diff --git a/cookbook/azure_container_apps_dynamic_sessions_data_analyst.ipynb b/cookbook/azure_container_apps_dynamic_sessions_data_analyst.ipynb index fb79cfaff8e97..70a029c805a4b 100644 --- a/cookbook/azure_container_apps_dynamic_sessions_data_analyst.ipynb +++ b/cookbook/azure_container_apps_dynamic_sessions_data_analyst.ipynb @@ -54,7 +54,7 @@ "- Azure PostgreSQL for the db: https://learn.microsoft.com/en-us/cli/azure/postgres/server?view=azure-cli-latest#az-postgres-server-create\n", "- Azure Container Apps dynamic sessions for code execution: https://learn.microsoft.com/en-us/azure/container-apps/sessions-code-interpreter?\n", "\n", - "This LangGraph architecture can also be used with any other [tool-calling LLM](https://python.langchain.com/v0.2/docs/how_to/tool_calling/) and any SQL database." + "This LangGraph architecture can also be used with any other [tool-calling LLM](https://python.langchain.com/v0.2/docs/how_to/tool_calling) and any SQL database." ] }, { @@ -64,7 +64,7 @@ "metadata": {}, "outputs": [ { - "name": "stdin", + "name": "stdout", "output_type": "stream", "text": [ "Azure OpenAI API key ········\n", @@ -153,7 +153,7 @@ "id": "1982c6f2-aa4e-4842-83f2-951205aa0854", "metadata": {}, "source": [ - "For our LLM we need to make sure that we use a model that supports [tool-calling](https://python.langchain.com/v0.2/docs/how_to/tool_calling/)." + "For our LLM we need to make sure that we use a model that supports [tool-calling](https://python.langchain.com/v0.2/docs/how_to/tool_calling)." ] }, { @@ -571,7 +571,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAACw/klEQVR4Ae3dCbxM9f/H8Y8WW4lKRIhsJe17ISollahoU9o3UpGKNkpIC5XSLy3SgkpFq1YtpBJCipJCSFJIJeX8z/vb/zudu+AOM/fOufP6Ph73zsyZM2fOeZ4zM+dzvt/v51siCItREEAAAQQQQAABBBBAAAEEEEAg5QKbpXyJLBABBBBAAAEEEEAAAQQQQAABBJwAQTcHAgIIIIAAAggggAACCCCAAAJpEiDoThMsi0UAAQQQQAABBBBAAAEEEECAoJtjAAEEEEAAAQQQQAABBBBAAIE0CRB0pwmWxSKAAAIIIIAAAggggAACCCBA0M0xgAACCCCAAAIIIIAAAggggECaBAi60wTLYhFAAAEEEEAAAQQQQAABBBAg6OYYQAABBBBAAAEEEEAAAQQQQCBNAgTdaYJlsQgggAACCCCAAAIIIIAAAggQdHMMIIAAAggUisC9995rJUqUsIYNGxbK+8XpTZo2bZoyl5kzZ1rPnj3tu+++ixPBOtc1lTbrfJPwiZo1a7rjU++XXxk2bJh7XsfwuHHj8ptlo6ZpX2mZG1POOecct94b81pegwACCCBQeAIE3YVnzTshgAACWS3w6KOPuu3/4osv7OOPP85qi3RuvILuXr16FZugO51WuZddrlw5e//9923OnDm5nzIdv9tss02e6UxAAAEEEEBgQwIE3RsS4nkEEEAAgU0WmDRpkn3++ed23HHHuWU98sgjm7zMZBcQBIH98ccfyb6M+bNIoFGjRrbTTju5ADu62QrCFYyfeuqp0cncRwABBBBAoEACBN0FYmImBBBAAIFNEfBBdr9+/ezQQw+1ESNG2O+//+4WuWbNGqtUqZKdddZZed7i119/tTJlyliXLl0Sz61YscKuvvpqq1WrlpUsWdIFSVdeeaWtWrUqMY/uqMlup06d7MEHH7TddtvNSpUqZY8//ribRzXBBx10kG233Xau9nLfffc1raMC82hZvXq1de3a1XbccUcrW7asNWnSxD777DPXpFdNe6Nl8eLFdvHFF1u1atXcemn99D5///13dLaNvq8LF6eddpp7b5nUDJtDn3766fb9998nljl06FBr27ate9ysWbNEc2hN9+Wtt96yI4880m23tumwww6zt99+2z/tbn2TZ7VK0HuUL1/eKleubOedd54tX748x7xr1661++67z/bee2+3rypUqGAHH3ywjRkzxs13/vnnO2e/v6MvPuKII2z33XePTlrn/Q8++MAtV9uuwPjGG2+0f/75x82v/Va3bl075phj8rz+t99+c+vfsWPHPM/lnrDZZpvZ2Wef7Y4TbZcvquWuXr26HXXUUX5Sjltt6yGHHOKOEdWWN2/e3D766KMc8+jBK6+84px0LOr4uPPOO/PMownangceeCBhuu2229opp5xi3377bb7zMxEBBBBAILMFCLoze/+wdggggEDsBVS7PHz4cDvggANcv2UFbitXrrRnn33WbduWW25p7du3t1GjRpkC6mjR6/78808799xz3WQFbocffrgLijp37myvvfaaXXvttaagslWrVnmC5hdffNEGDx5sN910k40dO9YaN27slqP+zgqQn3nmGXv++eftpJNOsssvv9xuvfXW6Nu79x04cKC7HT16tJ188snWpk0b08WAaFHAfeCBB7r30HtpvRRs9u3b1y688MLorBt9X+tcv3590/poW26//XZbtGiRc126dKlbrloS9OnTx92///77XeCn4M+3MHjyySft6KOPdgG3LkBo+3XhQcFq7sBbC9H21qtXz+2b6667zp5++mm76qqr3PL9P118uOKKK9x6jBw50l1Q0b7Q+qrouV9++cW91k34/39qBv/uu+9aQYJh+eqCw5lnnmnaDwpAe/fu7ZatxekCi/bfm2++aV9//XX0bUx9sXVcFeR99EIdnwsXLnTGeqzAXlbaTgXluYtMTjzxRGeq41UXb7S9TZs2tQ8//DAxu3w1n4JyXXS64447nP9jjz2WmMff0bGpC0kK8nUMKwDXBRBdsPrxxx/9bNwigAACCMRFILyaSkEAAQQQQCBtAmHQo+rjIKxxdu8RBtzB1ltvHYQBcOI9p02b5uZ56KGHEtN0Jwxkg/322y8xLQxigzDwCT799NPENN157rnn3OtfffXVxHS9Z1hDGyxbtiwxLb87YVAVhLXtwS233BJsv/32QVjD6WYLgxy3zDCoz/GyMLBy0zt06JCYHgZJbpvCWufENN0JazLdvFrW+kp4ISEIa3zXN0ue58Ia9CCsxQ222mqr4J577kk8H17McO8ZBrSJaboTtgQIwgA7OOGEE3JM1/bvtddezto/cfPNN7tl9O/f309yt5dd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fvjhdtttt9nChQsLZaV5EwQQQAABBBBAAAEEEEAAAQTiIFCgoPvFF1+0+vXrW4cOHWyzzTazbt262fPPP28Kwh955BEXdL/11lu2yy672CWXXGI//fRTHLaddUQAAQQQQAABBBBAAAEEEEAgrQJbFGTpffr0sTvvvNOOO+44F3Tnfk27du3cpB9++MHuueceGzZsmHXt2jX3bEk//vvvv61nz5721FNP2eLFi61KlSqupv2GG27Idz2SfgNegAACCCCAAAIIIIAAAggggEAaBQoUdH/yyScFWoWddtrJ+vfvX6B5CzLT7bffbg8++KA9/vjjtvvuu9ukSZPs3HPPtfLly9sVV1xRkEUwDwIIIIAAAggggAACCCCAAAJFJlCgoHt9a/fPP//Y9OnTbeedd7Ztt912fbMm/dxHH31kJ554oqth14tr1qxpw4cPd8F30gvjBQgggAACCCCAAAIIIIAAAggUskCB+nRH1+nKK690/bg1TQG3kqjtu+++Vr16dRs3blx01k2+36hRI3v77bdt9uzZblmff/65ffjhh9ayZctNXjYLQAABBBBAAAEEEEAAAQQQQCDdAknXdD/33HPWvn17t14vvfSSzZ0717766ivXj/v666+38ePHp2ydr732Wlu+fLntuuuutvnmm7sgX1nSTz/99HW+h4Yxiw5ltmLFinXOyxMIIIAAAggggAACCCCAAAIIpFMg6ZrupUuX2o477ujW6dVXX7W2bdtavXr17Pzzz3fNzFO5siNHjrQnn3zSnn76aZs8ebLr262Eburjva7St29f1+db/b71pxp4CgIIIIAAAggggAACCCCAAAJFIZB00F25cmWbOXOmq3V+/fXX7aijjnLr/fvvv7va6FRuhIYmu+666+y0006zPfbYw8466yy76qqrTIH1ukr37t1d7bhqyPU3f/78dc3KdAQQQAABBBBAAAEEEEAAAQTSKpB083JlD9cQYRq+q0SJEta8eXO3gh9//LFrBp7KtVUgr3HBo0XNzNeuXRudlON+qVKlTH8UBBBAAAEEEEAAAQQQQAABBIpaIOmgW+NmN2zY0NUgq2m5D3AVDKtWOpXlhBNOMPXhrlGjhhsybMqUKXb33Xfbeeedl8q3YVkIIIAAAggggAACCCCAAAIIpEWgRBCWtCw5BQtduXKl3XjjjfbCCy/YkiVLrGrVqi6J2k033WQlS5Ys0DsokZr6dqup+TbbbFOg1zATAggggAACmyrQb8rSTV0Er09S4Lp9Kib5CmZHAAEEEEBg4wUKGmsWqKb73nvvLfCadO7cucDzbmjGcuXK2cCBA93fhubleQQQQAABBBBAAAEEEEAAAQQyTaBAQfeAAQNyrPdPP/1k6m9doUIFN/3XX3+1smXLWqVKlSyVQXeON+UBAggggAACCCCAAAIIIIAAAjETyJmlbB0rr7G4/Z/6WO+999725Zdf2rJly9yf7u+777526623rmMJTEYAAQQQQAABBBBAAAEEEEAg+wQKFHRHWdTH+r777rP69esnJuu+asNvuOGGxDTuIIAAAggggAACCCCAAAIIIJDtAgVqXh5FWrRoka1ZsyY6yd3/559/7Mcff8wznQkIIIDAugRINLUumfRMJ8lUelxZKgIIIIAAAgggsD6BpGu6jzzySLvwwgtt0qRJ5hOf6/7FF19sRx111Prei+cQQAABBBBAAAEEEEAAAQQQyCqBpIPuRx991HbaaSc78MADrXTp0m6c7oMOOsiqVKliDz/8cFbhsbEIIIAAAggggAACCCCAAAIIrE8g6eblO+ywg7366qs2e/Zs++qrr1xt92677Wb16tVb3/vwHAIIIIAAAggggAACCCCAAAJZJ5B00O2FFGQTaHsNbhFAAAEEEEAAAQQQQAABBBDIK5B00K2EaUOHDrW3337blixZYmvXrs2x1HfeeSfHYx4ggAACCCCAAAIIIIAAAgggkK0CSQfdV1xxhQu6jzvuOGvYsKGVKFEiW+3YbgQQQAABBBBAAAEEEEAAAQTWK5B00D1ixAh75plnrGXLlutdME8igAACCCCAAAIIIIAAAgggkO0CSWcvL1mypNWpUyfb3dh+BBBAAAEEEEAAAQQQQAABBDYokHTQ3bVrV7vnnnsSY3Rv8B2YAQEEEEAAAQQQQAABBBBAAIEsFUi6efmHH35o7777rr322mu2++6725ZbbpmD7vnnn8/xmAcIIIAAAggggAACCCCAAAIIZKtA0kF3hQoVrE2bNtnqxXYjgAACCCCAAAIIIIAAAgggUGCBpIPuxx57rMALZ0YEEEAAAQQQQAABBBBAAAEEslkg6aDbY/300082a9YsN2RYvXr1bIcddvBPcYsAAggggAACCCCAAAIIIIAAAqFA0onUVq1aZeedd55VqVLFmjRpYo0bN7aqVava+eefb7///juoCCCAAAIIIIAAAggggAACCCDw/wJJB91dunSx9957z1566SX79ddf3d/o0aPdNGU2pyCAAAIIIIAAAggggAACCCCAwL8CSTcvHzVqlD333HPWtGnThGHLli2tTJky1q5dOxs8eHBiOncQQAABBBBAAAEEEEAAAQQQyGaBpGu61YS8cuXKecwqVapE8/I8KkxAAAEEEEAAAQQQQAABBBDIZoGkg+5DDjnEbr75Zvvzzz8Tbn/88Yf16tXL9BwFAQQQQAABBBBAAAEEEEAAAQT+FUi6efk999xjLVq0sGrVqtlee+3lspdPnTrVSpcubWPHjsUVAQQQQAABBBBAAAEEEEAAAQT+XyDpoLthw4b29ddf25NPPmlfffWVBUFgp512mp155pmuXzeyCCCAAAIIIIAAAggggAACCCDwr0DSQbdepqRpF154IYYIIIAAAggggAACCCCAAAIIILAegaT7dPft29ceffTRPIvUtNtvvz3PdCYggAACCCCAAAIIIIAAAgggkK0CSQfd//vf/2zXXXfN47X77rvbgw8+mGc6ExBAAAEEEEAAAQQQQAABBBDIVoGkg+7FixdblSpV8njtsMMOtmjRojzTmYAAAggggAACCCCAAAIIIIBAtgok3ae7evXqNn78eKtVq1YOM02rWrVqjmk8QAABBBBAAAEEECieAv2mLC2eG5ahW3XdPhUzdM1YLQQQ2JBA0kH3BRdcYFdeeaWtWbPGjjjiCLf8t99+26655hrr2rXrht6P5xFAAAEEEEAAAQQQQAABBBDIGoGkg24F18uWLbPLLrvM/vrrLwelMbqvvfZa6969e9bAsaEIIIAAAggggAACCCCAAAIIbEgg6aC7RIkSLkv5jTfeaF9++aUbPqxu3bpWqlSpDb0XzyOAAAIIIIAAAggggAACCCCQVQJJJ1LzOkqophrv2rVru4A7CAL/FLcIIIAAAggggAACCCCAAAIIIBAKJB10//zzz3bkkUdavXr1rGXLlomM5errTZ9ujikEEEAAAQQQQAABBBBAAAEE/hNIOui+6qqrbMstt7R58+ZZ2bJlE0s69dRT7fXXX0885g4CCCCAAAIIIIAAAggggAAC2S6QdJ/uN954w8aOHWvVqlXLYad+3d9//32OaTxAAAEEEEAAAQQQQAABBBBAIJsFkq7pXrVqVY4abo+3dOlSkql5DG4RQAABBBBAAAEEEEAAAQQQCAWSDrqbNGliw4YNS+Apm/natWvtjjvusGbNmiWmcwcBBBBAAAEEEEAAAQQQQACBbBdIunm5guumTZvapEmT3DjdGrf7iy++cJnMx48fn+2ebD8CCCCAAAIIIIAAAggggAACCYGka7obNGhg06ZNswMPPNCaN29uam5+0kkn2ZQpU9zwYYklcwcBBBBAAAEEEEAAAQQQQACBLBdIuqZbXjvuuKP16tUry+nYfAQQQAABBBBAAAEEEEAAAQTWL5B0TbeGBfvwww8TS73//vtt7733tjPOOMN++eWXxHTuIIAAAggggAACCCCAAAIIIJDtAkkH3d26dbMVK1Y4t+nTp1uXLl2sZcuW9u2337r72Q7K9iOAAAIIIIAAAggggAACCCDgBZJuXj537lxTv26VUaNG2QknnGB9+vSxyZMnu+DbL5hbBBBAAAEEEEAAAQQQQAABBLJdIOma7pIlS9rvv//u3N566y07+uij3f3tttsuUQOe7ahsPwIIIIAAAggggAACCCCAAAISSLqmu1GjRq4Z+WGHHWaffPKJjRw50knOnj3bqlWrhioCCCCAAAIIIIAAAggggAACCPy/QNI13YMGDbItttjCnnvuORs8eLDttNNOblGvvfaatWjRAlgEEEAAAQQQQAABBBBAAAEEEPh/gaRrumvUqGEvv/xyHsABAwbkmcYEBBBAAAEEEEAAAQQQQAABBLJZoEA13atWrUrKKNn5k1o4MyOAAAIIIIAAAggggAACCCAQE4ECBd116tRxGcoXLly4zs0KgsDefPNNO/bYY+3ee+9d53w8gQACCCCAAAIIIIAAAggggEC2CBSoefm4cePshhtusF69etnee+9t+++/v1WtWtVKly5tv/zyi82cOdM++ugj23LLLa179+520UUXZYsf24kAAggggAACCCCAAAIIIIDAOgUKFHTXr1/fnn32WVuwYIG7ff/9923ChAn2xx9/WMWKFW2fffaxIUOGuHG6N9usQJXn61whnkAAAQQQQAABBBBAAAEEEECguAgUKOj2G6shwa666ir356dxiwACCCCAAAIIIIAAAggggAAC+QtQLZ2/C1MRQAABBBBAAAEEEEAAAQQQ2GQBgu5NJmQBCCCAAAIIIIAAAggggAACCOQvQNCdvwtTEUAAAQQQQAABBBBAAAEEENhkAYLuTSZkAQgggAACCCCAAAIIIIAAAgjkL0DQnb8LUxFAAAEEEEAAAQQQQAABBBDYZIGkg+6aNWvaLbfcYvPmzdvkNy/IAn744Qdr3769bb/99la2bFk3Tvhnn31WkJcyDwIIIIAAAggggAACCCCAAAJFKpB00N21a1cbPXq07bLLLta8eXMbMWKErV69Oi0b8csvv9hhhx1mW265pb322ms2c+ZMu+uuu6xChQppeT8WigACCCCAAAIIIIAAAggggEAqBZIOui+//HJTTbP+GjRoYJ07d7YqVapYp06dbPLkyalcN7v99tutevXq9thjj9mBBx5oqmU/8sgjrXbt2il9HxaGAAIIIIAAAggggAACCCCAQDoEkg66/Urstddeds8995iaf99888328MMP2wEHHGCa/uijj1oQBH7Wjb4dM2aM7b///ta2bVurVKmS7bPPPjZkyJD1Lk+17itWrMjxt94X8CQCCCCAAAIIIIAAAggggAACaRLY6KB7zZo19swzz1irVq1MTc4VHCvwbteunV1//fV25plnbvIqf/vttzZ48GCrW7eujR071i655BJXsz5s2LB1Lrtv375Wvnz5xJ9qyikIIIAAAggggAACCCCAAAIIFIXAFsm+qZqQq7n38OHDbfPNN7ezzjrLBgwYYLvuumtiUUcffbQ1adIk8Xhj76xdu9YF83369HGLUE33F1984QLxs88+O9/Fdu/e3bp06ZJ4TrXeBN4JDu4ggAACCCCAAAIIIIAAAggUokDSQbeakCuBmmqgW7du7ZKc5V5f9fU+7bTTck9O+rH6imtZ0bLbbrvZqFGjopNy3C9VqpTpj4IAAggggAACCCCAAAIIIIBAUQskHXSryffOO++83vXeaqutXG34emcqwJPKXD5r1qwcc86ePXuD75/jBTxAAAEEEEAAAQQQQAABBBBAoIgEku7TvWTJEvv444/zrK6mTZo0Kc/0TZlw1VVX2cSJE03Ny7/55ht7+umn7aGHHrKOHTtuymJ5LQIIIIAAAggggAACCCCAAAKFIpB00K2Ad/78+XlWTlnMUx0Mqyn7Cy+84PqPN2zY0G699VYbOHBgSpK05dkAJiCAAAIIIIAAAggggAACCCCQYoGkm5fPnDnT9t133zyroSRnei7V5fjjjzf9URBAAAEEEEAAAQQQQAABBBCIm0DSNd1KUvbjjz/m2c5FixbZFlskHcPnWQ4TEEAAAQQQQAABBBBAAAEEECguAkkH3cpcrmG5li9fnjD49ddfrUePHi6reWIidxBAAAEEEEAAAQQQQAABBBDIcoGkq6bvuusuNwa3MpirSbnK1KlTrXLlyvbEE09kOSebjwACCCCAAAIIIIAAAggggMB/AkkH3TvttJNNmzbNnnrqKfv888+tTJkydu6559rpp5+e75jd/70V9xBAAAEEEEAAAQQQQAABBBDILoGkg27xaBzuiy66KLuk2FoEEEAAAQQQQAABBBBAAAEEkhTYqKB79uzZNm7cONOY3WvXrs3xljfddFOOxzxAAAEEEEAAAQQQQAABBBBAIFsFkg66hwwZYpdeeqlVrFjRdtxxRytRokTCTvcJuhMc3EEAAQQQQAABBBBAAAEEEMhygaSD7t69e9ttt91m1157bZbTsfkIIIAAAggggAACCCCAAAIIrF8g6SHDfvnlF2vbtu36l8qzCCCAAAIIIIAAAggggAACCCBgSQfdCrjfeOMN6BBAAAEEEEAAAQQQQAABBBBAYAMCSTcvr1Onjt144402ceJE22OPPfIME9a5c+cNvCVPI4AAAggggAACCCCAAAIIIJAdAkkH3Q899JBtvfXW9t5777m/KJMSqRF0R0W4jwACCCCAAAIIIIAAAgggkM0CSQfdc+fOzWYvth0BBBBAAAEEEEAAAQQQQACBAgsk3afbL/mvv/6yWbNm2d9//+0ncYsAAggggAACCCCAAAIIIIAAAhGBpIPu33//3c4//3wrW7as7b777jZv3jy3ODUr79evX2TR3EUAAQQQQAABBBBAAAEEEEAguwWSDrq7d+9un3/+uY0bN85Kly6d0DvqqKNs5MiRicfcQQABBBBAAAEEEEAAAQQQQCDbBZLu0/3iiy+64Prggw82JU7zpUGDBjZnzhz/kFsEEEAAAQQQQAABBBBAAAEEsl4g6Zrun376ySpVqpQHbtWqVTmC8DwzMAEBBBBAAAEEEEAAAQQQQACBLBNIOug+4IAD7JVXXkkw+druIUOG2CGHHJKYzh0EEEAAAQQQQAABBBBAAAEEsl0g6eblffv2tRYtWtjMmTNd5vJ77rnHvvjiC/voo4/yjNud7bhsPwIIIIAAAggggAACCCCAQHYLJF3Tfeihh9r48eNNWcxr165tb7zxhlWuXNkF3fvtt192a7L1CCCAAAIIIIAAAggggAACCEQEkq7p1mv32GMPe/zxxyOL4S4CCCCAAAIIIIAAAggggAACCOQWSLqme/PNN7clS5bkXo79/PPPpucoCCCAAAIIIIAAAggggAACCCDwr0DSQXcQBPnarV692kqWLJnvc0xEAAEEEEAAAQQQQAABBBBAIBsFCty8/N5773U+ylb+8MMP29Zbb53w+ueff+z999+3XXfdNTGNOwgggAACCCCAAAIIIIAAAghku0CBg+4BAwY4K9V0P/jggzmakquGu2bNmm56toOy/QgggAACCCCAAAIIIIAAAgh4gQIH3XPnznWvadasmT3//PO27bbb+mVwiwACCCCAAAIIIIAAAggggAAC+QgUOOj2r3333Xf9XW4RQAABBBBAAAEEEEAAAQQQQGA9AkkH3VrWggULbMyYMTZv3jz766+/ciz+7rvvzvGYBwgggAACCCCAAAIIIIAAAghkq0DSQffbb79trVq1slq1atmsWbOsYcOG9t1335n6eu+7777Z6sh2I4AAAggggAACCCCAAAIIIJBHIOkhw7p3725du3a1GTNmWOnSpW3UqFE2f/58O/zww61t27Z53oAJCCCAAAIIIIAAAggggAACCGSrQNJB95dffmkdOnRwXltssYX98ccfbviwW265xW6//fZsdWS7EUAAAQQQQAABBBBAAAEEEMgjkHTQvdVWW9nq1avdgqpWrWpz5sxJLHTp0qWJ+9xBAAEEEEAAAQQQQAABBBBAINsFku7TffDBB9v48eOtQYMGdtxxx7mm5tOnT3fDiOk5CgIIIIAAAggggAACCCCAAAII/CuQdNCt7OS//fabe3XPnj3d/ZEjR1qdOnVswIABuCKAAAIIIIAAAggggAACCCCAwP8LJB1077LLLgm8smXL2gMPPOAer1mzxhYtWpR4jjsIIIAAAggggAACCCCAAAIIZLtA0n261wU2c+ZMN4zYup5nOgIIIIAAAggggAACCCCAAALZJpCyoDvb4NheBBBAAAEEEEAAAQQQQAABBDYkQNC9ISGeRwABBBBAAAEEEEAAAQQQQGAjBQi6NxKOlyGAAAIIIIAAAggggAACCCCwIYECJ1KbNm3aepc1a9as9T7PkwgggAACCCCAAAIIIIAAAghkm0CBg+69997bSpQoYUEQ5DHy03VLQQABBBBAAAEEEEAAAQQQQACBfwUKHHTPnTsXMwQQQAABBBBAAAEEEEAAAQQQSEKgwEH3zjvvnMRimRUBBBBAAAEEEEAAAQQQQAABBEikxjGAAAIIIIAAAggggAACCCCAQJoECLrTBMtiEUAAAQQQQAABBBBAAAEEECDo5hhAAAEEEEAAAQQQQAABBBBAIE0CBN1pgmWxCCCAAAIIIIAAAggggAACCGxU0P3333/bW2+9Zf/73/9s5cqVTnHhwoX222+/IYoAAggggAACCCCAAAIIIIAAAv8vUODs5V7s+++/txYtWti8efNs9erV1rx5cytXrpz179/f/vzzT3vwwQf9rNwigAACCCCAAAIIIIAAAgggkNUCSdd0X3HFFbb//vvbL7/8YmXKlEngtWnTxt5+++3EY+4ggAACCCCAAAIIIIAAAgggkO0CSdd0f/jhhzZ+/HgrWbJkDjuN4/3DDz/kmMYDBBBAAAEEEEAAAQQQQAABBLJZIOma7rVr19o///yTx2zBggWumXmeJ5iAAAIIIIAAAggggAACCCCAQJYKJB10qw/3wIEDE1wlSpRwCdRuvvlma9myZWI6dxBAAAEEEEAAAQQQQAABBBDIdoGkm5cPGDDAmjVrZg0aNHCJ08444wz7+uuvrWLFijZ8+PBs92T7EUAAAQQQQAABBBBAAAEEEEgIJB10V61a1aZOneoC7MmTJ5uam59//vl25pln5kislngH7iCAAAIIIIAAAggggAACCCCQpQJJB91yUtby8847z/1lqRubjQACCCCAAAIIIIAAAggggMAGBZIOuseMGZPvQtW3u3Tp0lanTh2rVatWvvNs6sS+fftajx49TMOWRfuVb+pyeT0CCCCAAAIIIIAAAggggAAC6RBIOuhu3bq1KcAOgiDH+vhpum3UqJG9+OKLtu222+aYZ1MefPrpp/bQQw/ZnnvuuSmL4bUIIIAAAggggAACCCCAAAIIFJpA0tnL33zzTTvggANMt8uXL3d/un/ggQfayy+/bO+//779/PPPdvXVV6dsI3777TfXZ3zIkCEpDeRTtoIsCAEEEEAAAQQQQAABBBBAAIF8BJKu6VbTbtU4H3rooYnFHXnkka5p+UUXXWRffPGFa/qtPt+pKh07drTjjjvOjjrqKOvdu/d6F7t69WrTny8rVqzwd7lFAAEEEEAAAQQQQAABBBBAoFAFkg6658yZY9tss02eldS0b7/91k2vW7euLV26NM88GzNhxIgRpizpal5ekKJ+37169SrIrMyDAAIIIIAAAggggAACCCCAQFoFkm5evt9++1m3bt3sp59+SqyY7l9zzTWu2bkmatzuatWqJZ7f2Dvz5893SdOefPJJV5NekOV079490exdzd+1DAoCCCCAAAIIIIAAAggggAACRSGQdE33I488YieeeKILqqtXr+6Sqs2bN8922WUXGz16tNsG9cG+8cYbN3l7PvvsM1uyZIkp0Pfln3/+cf3GBw0a5JqRb7755v4pd1uqVCnTHwUBBBBAAAEEEEAAAQQQQACBohZIOuiuX7++ffnllzZ27FibPXu2y2K+6667WvPmzW2zzf6tOFeG81QU9RWfPn16jkWde+65pve79tprLXfAnWNGHiCAAAIIIIAAAggggAACCCBQxAJJB91aXw0L1qJFC/eXzvUvV66cNWzYMMdbbLXVVrb99tvnmZ5jJh4ggAACCCCAAAIIIIAAAgggkAECGxV0r1q1yt577z1Ts/K//vorx2Z07tw5x2MeIIAAAggggAACCCCAAAIIIJCtAkkH3VOmTLGWLVva77//bgq+t9tuO5epvGzZslapUiVLd9A9bty4bN1XbDcCCCCAAAIIIIAAAggggEDMBJLOXn7VVVfZCSecYMuWLbMyZcrYxIkT7fvvv3fJzu68886YbT6riwACCCCAAAIIIIAAAggggED6BJIOuqdOnWpdu3Z1ScyUyGz16tWmLOb9+/e3Hj16pG9NWTICCCCAAAIIIIAAAggggAACMRNIOujecsstXSI1bWflypVdv27dL1++fOK+HlMQQAABBBBAAAEEEEAAAQQQyHaBpPt077PPPjZp0iSrV6+eNWvWzG666SbXp/uJJ56wPfbYI9s92X4EEEAAAQQQQAABBBBAAAEEEgJJ13T36dPHqlSp4hZw6623uuG7Lr30UluyZIk99NBDiQVzBwEEEEAAAQQQQAABBBBAAIFsF0iqpjsIAtthhx1s9913d266/+qrr2a7IduPAAIIIIAAAggggAACCCCAQL4CSdV0K+iuW7euLViwIN+FMREBBBBAAAEEEEAAAQQQQAABBP4TSCro3myzzVzQ/fPPP/+3BO4hgAACCCCAAAIIIIAAAggggEC+AkkF3VqChgbr1q2bzZgxI98FMhEBBBBAAAEEEEAAAQQQQAABBP4VSKpPt17Svn17+/33322vvfaykiVLWpkyZXJYLlu2LMdjHiCAAAIIIIAAAggggAACCCCQrQJJB90DBw7MViu2GwEEEEAAAQQQQAABBBBAAIGkBJIOujt06JDUGzAzAggggAACCCCAAAIIIIAAAtkqkHSfbkHNmTPHbrjhBjv99NPd+Nya9vrrr9sXX3yhuxQEEEAAAQQQQAABBBBAAAEEEAgFkg6633vvPdtjjz3s448/tueff95+++03Bzlt2jS7+eabQUUAAQQQQAABBBBAAAEEEEAAgf8XSDrovu6666x379725ptvukRqXrJZs2b20Ucf+YfcIoAAAggggAACCCCAAAIIIJD1AkkH3dOnT7c2bdrkgdthhx2M8bvzsDABAQQQQAABBBBAAAEEEEAgiwWSDrorVKhgixYtykM2ZcoU22mnnfJMZwICCCCAAAIIIIAAAggggAAC2SqQdNB9xhln2LXXXmuLFy+2EiVK2Nq1a238+PF29dVX29lnn52tjmw3AggggAACCCCAAAIIIIAAAnkEkg66b7vtNqtRo4ar1VYStQYNGliTJk3s0EMPdRnN87wDExBAAAEEEEAAAQQQQAABBBDIUoGkx+necsst7amnnrJbbrnF1KRcNd377LOP1a1bN0sJ2WwEEEAAAQQQQAABBBBAAAEE8hdIOujWkGGHH3641a5d2/3lv1imIoAAAggggAACCCCAAAIIIIBA0s3Lmzdv7pqXa+iwGTNmIIgAAggggAACCCCAAAIIIIAAAusQSDroXrhwoV1zzTX2wQcf2J577un++vfvbwsWLFjHWzAZAQQQQAABBBBAAAEEEEAAgewUSDrorlixonXq1MllLJ8zZ46deuqpNmzYMKtZs6YdccQR2anIViOAAAIIIIAAAggggAACCCCQj0DSQXd0GbVq1TI1M+/Xr5/tsccepv7eFAQQQAABBBBAAAEEEEAAAQQQ+Fdgo4Nujc192WWXWZUqVUxjd+++++728ssv44oAAggggAACCCCAAAIIIIAAAv8vkHT28h49etjw4cNNfbuPOuooGzhwoLVu3drKli0LKgIIIIAAAggggAACCCCAAAIIRASSDrrHjRtnV199tevLrf7d0TJ16lTbe++9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Lbfc0vr06eN+K6pWrWoXXXSR+8wo8Nl2223dOo8fP94OO+ywjFh/VqJ4C4wbN859n7/++uu23377uY198MEH7YEHHrCtttrKdDFVtX+0xCjex0E2b93EiROtZcuWdvjhhzuGE044wbbeemu7+uqrbcyYMXbooYfGtvsPQXc2H9nFbNujJ1P6gXrvvffcD5MC7uuuu879gPnAW81v9aOljM8UBOIqoGO4VKlSbvW32OLfr3Pfx/u1116zevXq2V133WUrV650zWh1skZBIFsFor8RAwYMMAU4+mxUr17dXbRSaxEF4erjvWbNGteksW/fvu7C1qeffkqgk60HThq3O3pM6m2USV/f0xUrVjT/nM5b9L2u1hg6RmvUqJHGNWLRCBSNgD/e1eJjxYoVbiX8tGbNmtlpp53mEiP36NEjtv27aV5eNMcW75oGAd80SwH2rbfeanXq1HEnU2qqor4gKrpyrB8wNTW/+OKL7d13303DmrBIBNIjoB+g3GW77bZzP0DKWq6iPt4KGFQLrs+AmiTqyjEBd245HmebgP+NUNNdBdNqDaI+3erPrZM6BTx6/MQTT5gSrCnA0QgYH330EQF3th0shbS9/phUF6EPP/zQ/vrrL/vll1/Mt9TTMaly6aWXWtmyZd2xWEirxtsgkDYBnZ/kPp/xnwXlLxg9erQ71v00rYgujqoiITotbSuYpgUTdKcJlsUWjcBTTz3l+rFqvOLbbrvNJZb68ccf3TBKJ510klspBd7nnHOOqflgkyZNimZFeVcEkhTwV3z1MiXYWbx4sf38888uYdrdd99tao6oZuUqqq3TD9MOO+xgqvEeMmSIm84/BLJdQJ8dfSY0jKQCGV20+v333+3CCy+0MmXKuItVZ555pqsFV+CtDLr6PPn+39nux/anRiAacCjAUBcHtVo68cQTTa3zNHSd8nHomFRR325lb9bxSkEg7gJqpeeD57feesteffVVe+edd9xmXX755W6kITUrf+ONN2zevHkui/mjjz7qWoCom0VcC0OGxXXPsd5OIBqIaIJqKFSzp+HBXnrpJVdroSZZ6g+imu2zzz7b9MGNFl1RVqZnCgJxEFAtnQKGVatWuZo6BQuHHHKIDR061GXq11XimjVr2rfffutqTL744gt3fHOcx2Hvso7pFlBtohJT6UROvxG6r+SD+n3QZ2rEiBHud0KB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W9qbb77ppvMPAQQQQCB1Auq+U6NGDVe7rQukyp/Ru3dv23bbbV1LIzUnHzRokPtOVo24LyRN8xLcJitA0J2sGPMjgAACCCCwAQHf/7pr165uvG31GVSinunTp7sxuXWSp6ITPNWyfPfdd4mEPZo+ePBgVwujfoUUBBBAAIHUCPjvXiVJ+/PPP+2vv/5ygbVqsNWMvEePHvbGG2+472oN5ahWR8rBofsq/mJqataGpWSTAEF3Nu1tthUBBBBAoNAEvvrqK3vrrbesU6dOVq9ePevevbs98cQT1rdvX1u2bJlbD/UZ1AldzZo18yRKU99v9TWkIIAAAgikRsAHzeq6M2PGDDd6hJasIFxFY27vvvvuVrZsWRdgN2rUyB577DHXUsmPOuFm5B8CSQrQpztJMGZHAAEEEEBgQwIKrJUkTWXIkCEucZruq5+2mo6r1qR06dKu1vvnn392SXr8SZ/moyCAAAIIpFdAmcg1aoT6dp900kmu5ZFaJ/322282bty4HBdCdYG0TJky6V0hll6sBf69rFOsN5GNQwABBBBAoHAFVJsybNgwV2OyYsUK23777V3G27Zt27pa7VdeecV++OEH22mnneyGG25wtSwk6CncfcS7IYBAdgt06NDBDQmmhGkaHky128q14QNu1Xr7PtwE3Nl9rKRi66npToUiy0AAAQQQyFqB6JivUYQHH3zQZStXrfc111zjmipGM5pH542e3EWncx8BBBBAIL0CixcvdlnK1b97v/32S/TxpvVRet2zbenUdGfbHmd7EUAAAQRSKuCTpmmc11WrVrkxXkuWLGmXXHKJe6yAW7UkasLo+xPmDtR9bUpKV4yFIYAAAghsUGDHHXc0/fmi72cCbq/BbaoECLpTJclyEEAAAQSyRuDGG2+0/fff30488US3zeoH+Mwzz5j6ZysbeZcuXdy43Jqu2m09VsCtZowqPlB3D/iHAAIIIJAxAnw/Z8yuKFYrQtBdrHYnG4MAAgggkG6BX3/91Z566in78MMPbauttnLDzowdO9YeffRRq1ixol177bXWv39/W7lypZ1xxhmmMV51EnfFFVe42hT166YggAACCCCAQPYI0Kc7e/Y1W4oAAgggsIkCvk+2+gC2adMmMc62EvBofFcVZb49++yzXaK0jh072umnn+6ylytRjwJumi1u4k7g5QgggAACCMRMgKA7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EECg8AUIugvfnHdEAAEEEEAg5QLVq1e3ESNG2B9//JFY9p9//mnDhw+3GjVqJKZxBwEEEEAAAQQKV4Cgu3C9eTcEEEAAAQTSIrDvvvu64Pr5559PLF/3FYzvs88+iWmrV6+2zp07W6VKlax06dLWqFEj+/TTTxPP686rr75q9erVszJlylizZs3su+++y/G8HkyYMMGaNGni5tF7aJmrVq3KMx8TEEAAAQQQyHYBgu5sPwLYfgQQQACBYiNw7rnn2mOPPZbYnkcffdTOO++8xGPdueaaa2zUqFH2+OOP2+TJk61OnTp2zDHH2LJly9x88+fPt5NOOslatmxpU6dOtQsuuMCuu+66HMuYPn26e43mmzZtmo0cOdI+/PBD69SpU475eIAAAggggAACZgTdHAUIIIAAAggUE4GzzjrLBb+qmf7+++9t/Pjx1r59+8TWqSZ68ODBdscdd9ixxx5rDRo0sCFDhrja6kceecTNp+d32WUXGzBggNWvX9/OPPNMy90fXK8/44wz7Morr7S6devaoYceavfee68NGzbM1KSdggACCCCAAAL/CWzx313uIYAAAggggECcBSpWrGjHHXecq8UOgsDd1zRf5syZY2vWrLHDDjvMT7Itt9zSDjzwQPvyyy/dNN0efPDBLvman+mQQw7xd93tZ599Zt9884099dRTiel6v7Vr19rcuXNtt912S0znDgIIIIAAAtkuQNCd7UcA248AAgggUKwE1JzcN/O+//77c2ybAmMVDf8VLZrup/l5os/nvq/g+uKLL3b9uHM/R9K23CI8RgABBBDIdgGal2f7EcD2I4AAAggUK4EWLVrYX3/95f7UVzta1H+7ZMmSrgm6n66a70mTJiVqp9XkfOLEif5pd5v7sZK2ffHFF64/uJYZ/dPyKQgggAACCCDwnwBB938W3EMAAQQQQCD2AptvvrlrKq5m4rofLVtttZVdeuml1q1bN3v99ddt5syZduGFF9rvv/9u559/vptVY32rGXqXLl1s1qxZ9vTTT9vQoUOji7Frr73WPvroI+vYsaNLtvb111/bmDFj7PLLL88xHw8QQAABBBBAgERqHAMIIIAAAggUO4FtttnG9Jdf6devn5188smmpGuqsVbf7LFjx9q2227rZlfzcGU3f+mll2yvvfayBx980Pr06ZNjUXvuuae99957pmC7cePGbkiyG2+80apUqZJjPh4ggAACCCCAQNitK+y79W8HLzQQQAABBBBAAAEEEEAAAQQQQCClAjQvTyknC0MAAQQQQAABBBBAAAEEEEDgPwGC7v8suIcAAggggAACCCCAAAIIIIBASgUIulPKycIQQAABBBBAAAEEEEAAAQQQ+E+AoPs/C+4hgAACCCCAAAIIIIAAAgggkFIBgu6UcrIwBBBAAAEEEEAAAQQQQAABBP4TIOj+z4J7CCCAAAIIIIAAAggggAACCKRUgKA7pZwsDAEEEEAAAQQQQAABBBBAAIH/BAi6/7PgHgIIIIAAAggggAACCCCAAAIpFSDoTiknC0MAAQQQQAABBBBAAAEEEEDgPwGC7v8suIcAAggggAACCCCAAAIIIIBASgUIulPKycIQQAABBBBAAAEEEEAAAQQQ+E+AoPs/C+4hgAACCCCAAAIIIIAAAgggkFKB/wNPRoKTejbNZgAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAACw/klEQVR4Ae3dCbxM9f/H8Y8WW4lKRIhsJe17ISollahoU9o3UpGKNkpIC5XSLy3SgkpFq1YtpBJCipJCSFJIJeX8z/vb/zudu+AOM/fOufP6Ph73zsyZM2fOeZ4zM+dzvt/v51siCItREEAAAQQQQAABBBBAAAEEEEAg5QKbpXyJLBABBBBAAAEEEEAAAQQQQAABBJwAQTcHAgIIIIAAAggggAACCCCAAAJpEiDoThMsi0UAAQQQQAABBBBAAAEEEECAoJtjAAEEEEAAAQQQQAABBBBAAIE0CRB0pwmWxSKAAAIIIIAAAggggAACCCBA0M0xgAACCCCAAAIIIIAAAggggECaBAi60wTLYhFAAAEEEEAAAQQQQAABBBAg6OYYQAABBBBAAAEEEEAAAQQQQCBNAgTdaYJlsQgggAACCCCAAAIIIIAAAggQdHMMIIAAAggUisC9995rJUqUsIYNGxbK+8XpTZo2bZoyl5kzZ1rPnj3tu+++ixPBOtc1lTbrfJPwiZo1a7rjU++XXxk2bJh7XsfwuHHj8ptlo6ZpX2mZG1POOecct94b81pegwACCCBQeAIE3YVnzTshgAACWS3w6KOPuu3/4osv7OOPP85qi3RuvILuXr16FZugO51WuZddrlw5e//9923OnDm5nzIdv9tss02e6UxAAAEEEEBgQwIE3RsS4nkEEEAAgU0WmDRpkn3++ed23HHHuWU98sgjm7zMZBcQBIH98ccfyb6M+bNIoFGjRrbTTju5ADu62QrCFYyfeuqp0cncRwABBBBAoEACBN0FYmImBBBAAIFNEfBBdr9+/ezQQw+1ESNG2O+//+4WuWbNGqtUqZKdddZZed7i119/tTJlyliXLl0Sz61YscKuvvpqq1WrlpUsWdIFSVdeeaWtWrUqMY/uqMlup06d7MEHH7TddtvNSpUqZY8//ribRzXBBx10kG233Xau9nLfffc1raMC82hZvXq1de3a1XbccUcrW7asNWnSxD777DPXpFdNe6Nl8eLFdvHFF1u1atXcemn99D5///13dLaNvq8LF6eddpp7b5nUDJtDn3766fb9998nljl06FBr27ate9ysWbNEc2hN9+Wtt96yI4880m23tumwww6zt99+2z/tbn2TZ7VK0HuUL1/eKleubOedd54tX748x7xr1661++67z/bee2+3rypUqGAHH3ywjRkzxs13/vnnO2e/v6MvPuKII2z33XePTlrn/Q8++MAtV9uuwPjGG2+0f/75x82v/Va3bl075phj8rz+t99+c+vfsWPHPM/lnrDZZpvZ2Wef7Y4TbZcvquWuXr26HXXUUX5Sjltt6yGHHOKOEdWWN2/e3D766KMc8+jBK6+84px0LOr4uPPOO/PMownangceeCBhuu2229opp5xi3377bb7zMxEBBBBAILMFCLoze/+wdggggEDsBVS7PHz4cDvggANcv2UFbitXrrRnn33WbduWW25p7du3t1GjRpkC6mjR6/78808799xz3WQFbocffrgLijp37myvvfaaXXvttaagslWrVnmC5hdffNEGDx5sN910k40dO9YaN27slqP+zgqQn3nmGXv++eftpJNOsssvv9xuvfXW6Nu79x04cKC7HT16tJ188snWpk0b08WAaFHAfeCBB7r30HtpvRRs9u3b1y688MLorBt9X+tcv3590/poW26//XZbtGiRc126dKlbrloS9OnTx92///77XeCn4M+3MHjyySft6KOPdgG3LkBo+3XhQcFq7sBbC9H21qtXz+2b6667zp5++mm76qqr3PL9P118uOKKK9x6jBw50l1Q0b7Q+qrouV9++cW91k34/39qBv/uu+9aQYJh+eqCw5lnnmnaDwpAe/fu7ZatxekCi/bfm2++aV9//XX0bUx9sXVcFeR99EIdnwsXLnTGeqzAXlbaTgXluYtMTjzxRGeq41UXb7S9TZs2tQ8//DAxu3w1n4JyXXS64447nP9jjz2WmMff0bGpC0kK8nUMKwDXBRBdsPrxxx/9bNwigAACCMRFILyaSkEAAQQQQCBtAmHQo+rjIKxxdu8RBtzB1ltvHYQBcOI9p02b5uZ56KGHEtN0Jwxkg/322y8xLQxigzDwCT799NPENN157rnn3OtfffXVxHS9Z1hDGyxbtiwxLb87YVAVhLXtwS233BJsv/32QVjD6WYLgxy3zDCoz/GyMLBy0zt06JCYHgZJbpvCWufENN0JazLdvFrW+kp4ISEIa3zXN0ue58Ia9CCsxQ222mqr4J577kk8H17McO8ZBrSJaboTtgQIwgA7OOGEE3JM1/bvtddezto/cfPNN7tl9O/f309yt5dd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fvjhdtttt9nChQsLZaV5EwQQQAABBBBAAAEEEEAAAQTiIFCgoPvFF1+0+vXrW4cOHWyzzTazbt262fPPP28Kwh955BEXdL/11lu2yy672CWXXGI//fRTHLaddUQAAQQQQAABBBBAAAEEEEAgrQJbFGTpffr0sTvvvNOOO+44F3Tnfk27du3cpB9++MHuueceGzZsmHXt2jX3bEk//vvvv61nz5721FNP2eLFi61KlSqupv2GG27Idz2SfgNegAACCCCAAAIIIIAAAggggEAaBQoUdH/yyScFWoWddtrJ+vfvX6B5CzLT7bffbg8++KA9/vjjtvvuu9ukSZPs3HPPtfLly9sVV1xRkEUwDwIIIIAAAggggAACCCCAAAJFJlCgoHt9a/fPP//Y9OnTbeedd7Ztt912fbMm/dxHH31kJ554oqth14tr1qxpw4cPd8F30gvjBQgggAACCCCAAAIIIIAAAggUskCB+nRH1+nKK690/bg1TQG3kqjtu+++Vr16dRs3blx01k2+36hRI3v77bdt9uzZblmff/65ffjhh9ayZctNXjYLQAABBBBAAAEEEEAAAQQQQCDdAknXdD/33HPWvn17t14vvfSSzZ0717766ivXj/v666+38ePHp2ydr732Wlu+fLntuuuutvnmm7sgX1nSTz/99HW+h4Yxiw5ltmLFinXOyxMIIIAAAggggAACCCCAAAIIpFMg6ZrupUuX2o477ujW6dVXX7W2bdtavXr17Pzzz3fNzFO5siNHjrQnn3zSnn76aZs8ebLr262Eburjva7St29f1+db/b71pxp4CgIIIIAAAggggAACCCCAAAJFIZB00F25cmWbOXOmq3V+/fXX7aijjnLr/fvvv7va6FRuhIYmu+666+y0006zPfbYw8466yy76qqrTIH1ukr37t1d7bhqyPU3f/78dc3KdAQQQAABBBBAAAEEEEAAAQTSKpB083JlD9cQYRq+q0SJEta8eXO3gh9//LFrBp7KtVUgr3HBo0XNzNeuXRudlON+qVKlTH8UBBBAAAEEEEAAAQQQQAABBIpaIOmgW+NmN2zY0NUgq2m5D3AVDKtWOpXlhBNOMPXhrlGjhhsybMqUKXb33Xfbeeedl8q3YVkIIIAAAggggAACCCCAAAIIpEWgRBCWtCw5BQtduXKl3XjjjfbCCy/YkiVLrGrVqi6J2k033WQlS5Ys0DsokZr6dqup+TbbbFOg1zATAggggAACmyrQb8rSTV0Er09S4Lp9Kib5CmZHAAEEEEBg4wUKGmsWqKb73nvvLfCadO7cucDzbmjGcuXK2cCBA93fhubleQQQQAABBBBAAAEEEEAAAQQyTaBAQfeAAQNyrPdPP/1k6m9doUIFN/3XX3+1smXLWqVKlSyVQXeON+UBAggggAACCCCAAAIIIIAAAjETyJmlbB0rr7G4/Z/6WO+999725Zdf2rJly9yf7u+777526623rmMJTEYAAQQQQAABBBBAAAEEEEAg+wQKFHRHWdTH+r777rP69esnJuu+asNvuOGGxDTuIIAAAggggAACCCCAAAIIIJDtAgVqXh5FWrRoka1ZsyY6yd3/559/7Mcff8wznQkIIIDAugRINLUumfRMJ8lUelxZKgIIIIAAAgggsD6BpGu6jzzySLvwwgtt0qRJ5hOf6/7FF19sRx111Prei+cQQAABBBBAAAEEEEAAAQQQyCqBpIPuRx991HbaaSc78MADrXTp0m6c7oMOOsiqVKliDz/8cFbhsbEIIIAAAggggAACCCCAAAIIrE8g6eblO+ywg7366qs2e/Zs++qrr1xt92677Wb16tVb3/vwHAIIIIAAAggggAACCCCAAAJZJ5B00O2FFGQTaHsNbhFAAAEEEEAAAQQQQAABBBDIK5B00K2EaUOHDrW3337blixZYmvXrs2x1HfeeSfHYx4ggAACCCCAAAIIIIAAAgggkK0CSQfdV1xxhQu6jzvuOGvYsKGVKFEiW+3YbgQQQAABBBBAAAEEEEAAAQTWK5B00D1ixAh75plnrGXLlutdME8igAACCCCAAAIIIIAAAgggkO0CSWcvL1mypNWpUyfb3dh+BBBAAAEEEEAAAQQQQAABBDYokHTQ3bVrV7vnnnsSY3Rv8B2YAQEEEEAAAQQQQAABBBBAAIEsFUi6efmHH35o7777rr322mu2++6725ZbbpmD7vnnn8/xmAcIIIAAAggggAACCCCAAAIIZKtA0kF3hQoVrE2bNtnqxXYjgAACCCCAAAIIIIAAAgggUGCBpIPuxx57rMALZ0YEEEAAAQQQQAABBBBAAAEEslkg6aDbY/300082a9YsN2RYvXr1bIcddvBPcYsAAggggAACCCCAAAIIIIAAAqFA0onUVq1aZeedd55VqVLFmjRpYo0bN7aqVava+eefb7///juoCCCAAAIIIIAAAggggAACCCDw/wJJB91dunSx9957z1566SX79ddf3d/o0aPdNGU2pyCAAAIIIIAAAggggAACCCCAwL8CSTcvHzVqlD333HPWtGnThGHLli2tTJky1q5dOxs8eHBiOncQQAABBBBAAAEEEEAAAQQQyGaBpGu61YS8cuXKecwqVapE8/I8KkxAAAEEEEAAAQQQQAABBBDIZoGkg+5DDjnEbr75Zvvzzz8Tbn/88Yf16tXL9BwFAQQQQAABBBBAAAEEEEAAAQT+FUi6efk999xjLVq0sGrVqtlee+3lspdPnTrVSpcubWPHjsUVAQQQQAABBBBAAAEEEEAAAQT+XyDpoLthw4b29ddf25NPPmlfffWVBUFgp512mp155pmuXzeyCCCAAAIIIIAAAggggAACCCDwr0DSQbdepqRpF154IYYIIIAAAggggAACCCCAAAIIILAegaT7dPft29ceffTRPIvUtNtvvz3PdCYggAACCCCAAAIIIIAAAgggkK0CSQfd//vf/2zXXXfN47X77rvbgw8+mGc6ExBAAAEEEEAAAQQQQAABBBDIVoGkg+7FixdblSpV8njtsMMOtmjRojzTmYAAAggggAACCCCAAAIIIIBAtgok3ae7evXqNn78eKtVq1YOM02rWrVqjmk8QAABBBBAAAEEECieAv2mLC2eG5ahW3XdPhUzdM1YLQQQ2JBA0kH3BRdcYFdeeaWtWbPGjjjiCLf8t99+26655hrr2rXrht6P5xFAAAEEEEAAAQQQQAABBBDIGoGkg24F18uWLbPLLrvM/vrrLwelMbqvvfZa6969e9bAsaEIIIAAAggggAACCCCAAAIIbEgg6aC7RIkSLkv5jTfeaF9++aUbPqxu3bpWqlSpDb0XzyOAAAIIIIAAAggggAACCCCQVQJJJ1LzOkqophrv2rVru4A7CAL/FLcIIIAAAggggAACCCCAAAIIIBAKJB10//zzz3bkkUdavXr1rGXLlomM5errTZ9ujikEEEAAAQQQQAABBBBAAAEE/hNIOui+6qqrbMstt7R58+ZZ2bJlE0s69dRT7fXXX0885g4CCCCAAAIIIIAAAggggAAC2S6QdJ/uN954w8aOHWvVqlXLYad+3d9//32OaTxAAAEEEEAAAQQQQAABBBBAIJsFkq7pXrVqVY4abo+3dOlSkql5DG4RQAABBBBAAAEEEEAAAQQQCAWSDrqbNGliw4YNS+Apm/natWvtjjvusGbNmiWmcwcBBBBAAAEEEEAAAQQQQACBbBdIunm5guumTZvapEmT3DjdGrf7iy++cJnMx48fn+2ebD8CCCCAAAIIIIAAAggggAACCYGka7obNGhg06ZNswMPPNCaN29uam5+0kkn2ZQpU9zwYYklcwcBBBBAAAEEEEAAAQQQQACBLBdIuqZbXjvuuKP16tUry+nYfAQQQAABBBBAAAEEEEAAAQTWL5B0TbeGBfvwww8TS73//vtt7733tjPOOMN++eWXxHTuIIAAAggggAACCCCAAAIIIJDtAkkH3d26dbMVK1Y4t+nTp1uXLl2sZcuW9u2337r72Q7K9iOAAAIIIIAAAggggAACCCDgBZJuXj537lxTv26VUaNG2QknnGB9+vSxyZMnu+DbL5hbBBBAAAEEEEAAAQQQQAABBLJdIOma7pIlS9rvv//u3N566y07+uij3f3tttsuUQOe7ahsPwIIIIAAAggggAACCCCAAAISSLqmu1GjRq4Z+WGHHWaffPKJjRw50knOnj3bqlWrhioCCCCAAAIIIIAAAggggAACCPy/QNI13YMGDbItttjCnnvuORs8eLDttNNOblGvvfaatWjRAlgEEEAAAQQQQAABBBBAAAEEEPh/gaRrumvUqGEvv/xyHsABAwbkmcYEBBBAAAEEEEAAAQQQQAABBLJZoEA13atWrUrKKNn5k1o4MyOAAAIIIIAAAggggAACCCAQE4ECBd116tRxGcoXLly4zs0KgsDefPNNO/bYY+3ee+9d53w8gQACCCCAAAIIIIAAAggggEC2CBSoefm4cePshhtusF69etnee+9t+++/v1WtWtVKly5tv/zyi82cOdM++ugj23LLLa179+520UUXZYsf24kAAggggAACCCCAAAIIIIDAOgUKFHTXr1/fnn32WVuwYIG7ff/9923ChAn2xx9/WMWKFW2fffaxIUOGuHG6N9usQJXn61whnkAAAQQQQAABBBBAAAEEEECguAgUKOj2G6shwa666ir356dxiwACCCCAAAIIIIAAAggggAAC+QtQLZ2/C1MRQAABBBBAAAEEEEAAAQQQ2GQBgu5NJmQBCCCAAAIIIIAAAggggAACCOQvQNCdvwtTEUAAAQQQQAABBBBAAAEEENhkAYLuTSZkAQgggAACCCCAAAIIIIAAAgjkL0DQnb8LUxFAAAEEEEAAAQQQQAABBBDYZIGkg+6aNWvaLbfcYvPmzdvkNy/IAn744Qdr3769bb/99la2bFk3Tvhnn31WkJcyDwIIIIAAAggggAACCCCAAAJFKpB00N21a1cbPXq07bLLLta8eXMbMWKErV69Oi0b8csvv9hhhx1mW265pb322ms2c+ZMu+uuu6xChQppeT8WigACCCCAAAIIIIAAAggggEAqBZIOui+//HJTTbP+GjRoYJ07d7YqVapYp06dbPLkyalcN7v99tutevXq9thjj9mBBx5oqmU/8sgjrXbt2il9HxaGAAIIIIAAAggggAACCCCAQDoEkg66/Urstddeds8995iaf99888328MMP2wEHHGCa/uijj1oQBH7Wjb4dM2aM7b///ta2bVurVKmS7bPPPjZkyJD1Lk+17itWrMjxt94X8CQCCCCAAAIIIIAAAggggAACaRLY6KB7zZo19swzz1irVq1MTc4VHCvwbteunV1//fV25plnbvIqf/vttzZ48GCrW7eujR071i655BJXsz5s2LB1Lrtv375Wvnz5xJ9qyikIIIAAAggggAACCCCAAAIIFIXAFsm+qZqQq7n38OHDbfPNN7ezzjrLBgwYYLvuumtiUUcffbQ1adIk8Xhj76xdu9YF83369HGLUE33F1984QLxs88+O9/Fdu/e3bp06ZJ4TrXeBN4JDu4ggAACCCCAAAIIIIAAAggUokDSQbeakCuBmmqgW7du7ZKc5V5f9fU+7bTTck9O+rH6imtZ0bLbbrvZqFGjopNy3C9VqpTpj4IAAggggAACCCCAAAIIIIBAUQskHXSryffOO++83vXeaqutXG34emcqwJPKXD5r1qwcc86ePXuD75/jBTxAAAEEEEAAAQQQQAABBBBAoIgEku7TvWTJEvv444/zrK6mTZo0Kc/0TZlw1VVX2cSJE03Ny7/55ht7+umn7aGHHrKOHTtuymJ5LQIIIIAAAggggAACCCCAAAKFIpB00K2Ad/78+XlWTlnMUx0Mqyn7Cy+84PqPN2zY0G699VYbOHBgSpK05dkAJiCAAAIIIIAAAggggAACCCCQYoGkm5fPnDnT9t133zyroSRnei7V5fjjjzf9URBAAAEEEEAAAQQQQAABBBCIm0DSNd1KUvbjjz/m2c5FixbZFlskHcPnWQ4TEEAAAQQQQAABBBBAAAEEECguAkkH3cpcrmG5li9fnjD49ddfrUePHi6reWIidxBAAAEEEEAAAQQQQAABBBDIcoGkq6bvuusuNwa3MpirSbnK1KlTrXLlyvbEE09kOSebjwACCCCAAAIIIIAAAggggMB/AkkH3TvttJNNmzbNnnrqKfv888+tTJkydu6559rpp5+e75jd/70V9xBAAAEEEEAAAQQQQAABBBDILoGkg27xaBzuiy66KLuk2FoEEEAAAQQQQAABBBBAAAEEkhTYqKB79uzZNm7cONOY3WvXrs3xljfddFOOxzxAAAEEEEAAAQQQQAABBBBAIFsFkg66hwwZYpdeeqlVrFjRdtxxRytRokTCTvcJuhMc3EEAAQQQQAABBBBAAAEEEMhygaSD7t69e9ttt91m1157bZbTsfkIIIAAAggggAACCCCAAAIIrF8g6SHDfvnlF2vbtu36l8qzCCCAAAIIIIAAAggggAACCCBgSQfdCrjfeOMN6BBAAAEEEEAAAQQQQAABBBBAYAMCSTcvr1Onjt144402ceJE22OPPfIME9a5c+cNvCVPI4AAAggggAACCCCAAAIIIJAdAkkH3Q899JBtvfXW9t5777m/KJMSqRF0R0W4jwACCCCAAAIIIIAAAgggkM0CSQfdc+fOzWYvth0BBBBAAAEEEEAAAQQQQACBAgsk3afbL/mvv/6yWbNm2d9//+0ncYsAAggggAACCCCAAAIIIIAAAhGBpIPu33//3c4//3wrW7as7b777jZv3jy3ODUr79evX2TR3EUAAQQQQAABBBBAAAEEEEAguwWSDrq7d+9un3/+uY0bN85Kly6d0DvqqKNs5MiRicfcQQABBBBAAAEEEEAAAQQQQCDbBZLu0/3iiy+64Prggw82JU7zpUGDBjZnzhz/kFsEEEAAAQQQQAABBBBAAAEEsl4g6Zrun376ySpVqpQHbtWqVTmC8DwzMAEBBBBAAAEEEEAAAQQQQACBLBNIOug+4IAD7JVXXkkw+druIUOG2CGHHJKYzh0EEEAAAQQQQAABBBBAAAEEsl0g6eblffv2tRYtWtjMmTNd5vJ77rnHvvjiC/voo4/yjNud7bhsPwIIIIAAAggggAACCCCAQHYLJF3Tfeihh9r48eNNWcxr165tb7zxhlWuXNkF3fvtt192a7L1CCCAAAIIIIAAAggggAACCEQEkq7p1mv32GMPe/zxxyOL4S4CCCCAAAIIIIAAAggggAACCOQWSLqme/PNN7clS5bkXo79/PPPpucoCCCAAAIIIIAAAggggAACCCDwr0DSQXcQBPnarV692kqWLJnvc0xEAAEEEEAAAQQQQAABBBBAIBsFCty8/N5773U+ylb+8MMP29Zbb53w+ueff+z999+3XXfdNTGNOwgggAACCCCAAAIIIIAAAghku0CBg+4BAwY4K9V0P/jggzmakquGu2bNmm56toOy/QgggAACCCCAAAIIIIAAAgh4gQIH3XPnznWvadasmT3//PO27bbb+mVwiwACCCCAAAIIIIAAAggggAAC+QgUOOj2r3333Xf9XW4RQAABBBBAAAEEEEAAAQQQQGA9AkkH3VrWggULbMyYMTZv3jz766+/ciz+7rvvzvGYBwgggAACCCCAAAIIIIAAAghkq0DSQffbb79trVq1slq1atmsWbOsYcOG9t1335n6eu+7777Z6sh2I4AAAggggAACCCCAAAIIIJBHIOkhw7p3725du3a1GTNmWOnSpW3UqFE2f/58O/zww61t27Z53oAJCCCAAAIIIIAAAggggAACCGSrQNJB95dffmkdOnRwXltssYX98ccfbviwW265xW6//fZsdWS7EUAAAQQQQAABBBBAAAEEEMgjkHTQvdVWW9nq1avdgqpWrWpz5sxJLHTp0qWJ+9xBAAEEEEAAAQQQQAABBBBAINsFku7TffDBB9v48eOtQYMGdtxxx7mm5tOnT3fDiOk5CgIIIIAAAggggAACCCCAAAII/CuQdNCt7OS//fabe3XPnj3d/ZEjR1qdOnVswIABuCKAAAIIIIAAAggggAACCCCAwP8LJB1077LLLgm8smXL2gMPPOAer1mzxhYtWpR4jjsIIIAAAggggAACCCCAAAIIZLtA0n261wU2c+ZMN4zYup5nOgIIIIAAAggggAACCCCAAALZJpCyoDvb4NheBBBAAAEEEEAAAQQQQAABBDYkQNC9ISGeRwABBBBAAAEEEEAAAQQQQGAjBQi6NxKOlyGAAAIIIIAAAggggAACCCCwIYECJ1KbNm3aepc1a9as9T7PkwgggAACCCCAAAIIIIAAAghkm0CBg+69997bSpQoYUEQ5DHy03VLQQABBBBAAAEEEEAAAQQQQACBfwUKHHTPnTsXMwQQQAABBBBAAAEEEEAAAQQQSEKgwEH3zjvvnMRimRUBBBBAAAEEEEAAAQQQQAABBEikxjGAAAIIIIAAAggggAACCCCAQJoECLrTBMtiEUAAAQQQQAABBBBAAAEEECDo5hhAAAEEEEAAAQQQQAABBBBAIE0CBN1pgmWxCCCAAAIIIIAAAggggAACCGxU0P3333/bW2+9Zf/73/9s5cqVTnHhwoX222+/IYoAAggggAACCCCAAAIIIIAAAv8vUODs5V7s+++/txYtWti8efNs9erV1rx5cytXrpz179/f/vzzT3vwwQf9rNwigAACCCCAAAIIIIAAAgggkNUCSdd0X3HFFbb//vvbL7/8YmXKlEngtWnTxt5+++3EY+4ggAACCCCAAAIIIIAAAgggkO0CSdd0f/jhhzZ+/HgrWbJkDjuN4/3DDz/kmMYDBBBAAAEEEEAAAQQQQAABBLJZIOma7rVr19o///yTx2zBggWumXmeJ5iAAAIIIIAAAggggAACCCCAQJYKJB10qw/3wIEDE1wlSpRwCdRuvvlma9myZWI6dxBAAAEEEEAAAQQQQAABBBDIdoGkm5cPGDDAmjVrZg0aNHCJ08444wz7+uuvrWLFijZ8+PBs92T7EUAAAQQQQAABBBBAAAEEEEgIJB10V61a1aZOneoC7MmTJ5uam59//vl25pln5kislngH7iCAAAIIIIAAAggggAACCCCQpQJJB91yUtby8847z/1lqRubjQACCCCAAAIIIIAAAggggMAGBZIOuseMGZPvQtW3u3Tp0lanTh2rVatWvvNs6sS+fftajx49TMOWRfuVb+pyeT0CCCCAAAIIIIAAAggggAAC6RBIOuhu3bq1KcAOgiDH+vhpum3UqJG9+OKLtu222+aYZ1MefPrpp/bQQw/ZnnvuuSmL4bUIIIAAAggggAACCCCAAAIIFJpA0tnL33zzTTvggANMt8uXL3d/un/ggQfayy+/bO+//779/PPPdvXVV6dsI3777TfXZ3zIkCEpDeRTtoIsCAEEEEAAAQQQQAABBBBAAIF8BJKu6VbTbtU4H3rooYnFHXnkka5p+UUXXWRffPGFa/qtPt+pKh07drTjjjvOjjrqKOvdu/d6F7t69WrTny8rVqzwd7lFAAEEEEAAAQQQQAABBBBAoFAFkg6658yZY9tss02eldS0b7/91k2vW7euLV26NM88GzNhxIgRpizpal5ekKJ+37169SrIrMyDAAIIIIAAAggggAACCCCAQFoFkm5evt9++1m3bt3sp59+SqyY7l9zzTWu2bkmatzuatWqJZ7f2Dvz5893SdOefPJJV5NekOV079490exdzd+1DAoCCCCAAAIIIIAAAggggAACRSGQdE33I488YieeeKILqqtXr+6Sqs2bN8922WUXGz16tNsG9cG+8cYbN3l7PvvsM1uyZIkp0Pfln3/+cf3GBw0a5JqRb7755v4pd1uqVCnTHwUBBBBAAAEEEEAAAQQQQACBohZIOuiuX7++ffnllzZ27FibPXu2y2K+6667WvPmzW2zzf6tOFeG81QU9RWfPn16jkWde+65pve79tprLXfAnWNGHiCAAAIIIIAAAggggAACCCBQxAJJB91aXw0L1qJFC/eXzvUvV66cNWzYMMdbbLXVVrb99tvnmZ5jJh4ggAACCCCAAAIIIIAAAgggkAECGxV0r1q1yt577z1Ts/K//vorx2Z07tw5x2MeIIAAAggggAACCCCAAAIIIJCtAkkH3VOmTLGWLVva77//bgq+t9tuO5epvGzZslapUiVLd9A9bty4bN1XbDcCCCCAAAIIIIAAAggggEDMBJLOXn7VVVfZCSecYMuWLbMyZcrYxIkT7fvvv3fJzu68886YbT6riwACCCCAAAIIIIAAAggggED6BJIOuqdOnWpdu3Z1ScyUyGz16tWmLOb9+/e3Hj16pG9NWTICCCCAAAIIIIAAAggggAACMRNIOujecsstXSI1bWflypVdv27dL1++fOK+HlMQQAABBBBAAAEEEEAAAQQQyHaBpPt077PPPjZp0iSrV6+eNWvWzG666SbXp/uJJ56wPfbYI9s92X4EEEAAAQQQQAABBBBAAAEEEgJJ13T36dPHqlSp4hZw6623uuG7Lr30UluyZIk99NBDiQVzBwEEEEAAAQQQQAABBBBAAIFsF0iqpjsIAtthhx1s9913d266/+qrr2a7IduPAAIIIIAAAggggAACCCCAQL4CSdV0K+iuW7euLViwIN+FMREBBBBAAAEEEEAAAQQQQAABBP4TSCro3myzzVzQ/fPPP/+3BO4hgAACCCCAAAIIIIAAAggggEC+AkkF3VqChgbr1q2bzZgxI98FMhEBBBBAAAEEEEAAAQQQQAABBP4VSKpPt17Svn17+/33322vvfaykiVLWpkyZXJYLlu2LMdjHiCAAAIIIIAAAggggAACCCCQrQJJB90DBw7MViu2GwEEEEAAAQQQQAABBBBAAIGkBJIOujt06JDUGzAzAggggAACCCCAAAIIIIAAAtkqkHSfbkHNmTPHbrjhBjv99NPd+Nya9vrrr9sXX3yhuxQEEEAAAQQQQAABBBBAAAEEEAgFkg6633vvPdtjjz3s448/tueff95+++03Bzlt2jS7+eabQUUAAQQQQAABBBBAAAEEEEAAgf8XSDrovu6666x379725ptvukRqXrJZs2b20Ucf+YfcIoAAAggggAACCCCAAAIIIJD1AkkH3dOnT7c2bdrkgdthhx2M8bvzsDABAQQQQAABBBBAAAEEEEAgiwWSDrorVKhgixYtykM2ZcoU22mnnfJMZwICCCCAAAIIIIAAAggggAAC2SqQdNB9xhln2LXXXmuLFy+2EiVK2Nq1a238+PF29dVX29lnn52tjmw3AggggAACCCCAAAIIIIAAAnkEkg66b7vtNqtRo4ar1VYStQYNGliTJk3s0EMPdRnN87wDExBAAAEEEEAAAQQQQAABBBDIUoGkx+necsst7amnnrJbbrnF1KRcNd377LOP1a1bN0sJ2WwEEEAAAQQQQAABBBBAAAEE8hdIOujWkGGHH3641a5d2/3lv1imIoAAAggggAACCCCAAAIIIIBA0s3Lmzdv7pqXa+iwGTNmIIgAAggggAACCCCAAAIIIIAAAusQSDroXrhwoV1zzTX2wQcf2J577un++vfvbwsWLFjHWzAZAQQQQAABBBBAAAEEEEAAgewUSDrorlixonXq1MllLJ8zZ46deuqpNmzYMKtZs6YdccQR2anIViOAAAIIIIAAAggggAACCCCQj0DSQXd0GbVq1TI1M+/Xr5/tsccepv7eFAQQQAABBBBAAAEEEEAAAQQQ+Fdgo4Nujc192WWXWZUqVUxjd+++++728ssv44oAAggggAACCCCAAAIIIIAAAv8vkHT28h49etjw4cNNfbuPOuooGzhwoLVu3drKli0LKgIIIIAAAggggAACCCCAAAIIRASSDrrHjRtnV199tevLrf7d0TJ16lTbe++9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Lbfc0vr06eN+K6pWrWoXXXSR+8wo8Nl2223dOo8fP94OO+ywjFh/VqJ4C4wbN859n7/++uu23377uY198MEH7YEHHrCtttrKdDFVtX+0xCjex0E2b93EiROtZcuWdvjhhzuGE044wbbeemu7+uqrbcyYMXbooYfGtvsPQXc2H9nFbNujJ1P6gXrvvffcD5MC7uuuu879gPnAW81v9aOljM8UBOIqoGO4VKlSbvW32OLfr3Pfx/u1116zevXq2V133WUrV650zWh1skZBIFsFor8RAwYMMAU4+mxUr17dXbRSaxEF4erjvWbNGteksW/fvu7C1qeffkqgk60HThq3O3pM6m2USV/f0xUrVjT/nM5b9L2u1hg6RmvUqJHGNWLRCBSNgD/e1eJjxYoVbiX8tGbNmtlpp53mEiP36NEjtv27aV5eNMcW75oGAd80SwH2rbfeanXq1HEnU2qqor4gKrpyrB8wNTW/+OKL7d13303DmrBIBNIjoB+g3GW77bZzP0DKWq6iPt4KGFQLrs+AmiTqyjEBd245HmebgP+NUNNdBdNqDaI+3erPrZM6BTx6/MQTT5gSrCnA0QgYH330EQF3th0shbS9/phUF6EPP/zQ/vrrL/vll1/Mt9TTMaly6aWXWtmyZd2xWEirxtsgkDYBnZ/kPp/xnwXlLxg9erQ71v00rYgujqoiITotbSuYpgUTdKcJlsUWjcBTTz3l+rFqvOLbbrvNJZb68ccf3TBKJ510klspBd7nnHOOqflgkyZNimZFeVcEkhTwV3z1MiXYWbx4sf38888uYdrdd99tao6oZuUqqq3TD9MOO+xgqvEeMmSIm84/BLJdQJ8dfSY0jKQCGV20+v333+3CCy+0MmXKuItVZ555pqsFV+CtDLr6PPn+39nux/anRiAacCjAUBcHtVo68cQTTa3zNHSd8nHomFRR325lb9bxSkEg7gJqpeeD57feesteffVVe+edd9xmXX755W6kITUrf+ONN2zevHkui/mjjz7qWoCom0VcC0OGxXXPsd5OIBqIaIJqKFSzp+HBXnrpJVdroSZZ6g+imu2zzz7b9MGNFl1RVqZnCgJxEFAtnQKGVatWuZo6BQuHHHKIDR061GXq11XimjVr2rfffutqTL744gt3fHOcx2Hvso7pFlBtohJT6UROvxG6r+SD+n3QZ2rEiBHud0KB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W9qbb77ppvMPAQQQQCB1Auq+U6NGDVe7rQukyp/Ru3dv23bbbV1LIzUnHzRokPtOVo24LyRN8xLcJitA0J2sGPMjgAACCCCwAQHf/7pr165uvG31GVSinunTp7sxuXWSp6ITPNWyfPfdd4mEPZo+ePBgVwujfoUUBBBAAIHUCPjvXiVJ+/PPP+2vv/5ygbVqsNWMvEePHvbGG2+472oN5ahWR8rBofsq/mJqataGpWSTAEF3Nu1tthUBBBBAoNAEvvrqK3vrrbesU6dOVq9ePevevbs98cQT1rdvX1u2bJlbD/UZ1AldzZo18yRKU99v9TWkIIAAAgikRsAHzeq6M2PGDDd6hJasIFxFY27vvvvuVrZsWRdgN2rUyB577DHXUsmPOuFm5B8CSQrQpztJMGZHAAEEEEBgQwIKrJUkTWXIkCEucZruq5+2mo6r1qR06dKu1vvnn392SXr8SZ/moyCAAAIIpFdAmcg1aoT6dp900kmu5ZFaJ/322282bty4HBdCdYG0TJky6V0hll6sBf69rFOsN5GNQwABBBBAoHAFVJsybNgwV2OyYsUK23777V3G27Zt27pa7VdeecV++OEH22mnneyGG25wtSwk6CncfcS7IYBAdgt06NDBDQmmhGkaHky128q14QNu1Xr7PtwE3Nl9rKRi66npToUiy0AAAQQQyFqB6JivUYQHH3zQZStXrfc111zjmipGM5pH542e3EWncx8BBBBAIL0CixcvdlnK1b97v/32S/TxpvVRet2zbenUdGfbHmd7EUAAAQRSKuCTpmmc11WrVrkxXkuWLGmXXHKJe6yAW7UkasLo+xPmDtR9bUpKV4yFIYAAAghsUGDHHXc0/fmi72cCbq/BbaoECLpTJclyEEAAAQSyRuDGG2+0/fff30488US3zeoH+Mwzz5j6ZysbeZcuXdy43Jqu2m09VsCtZowqPlB3D/iHAAIIIJAxAnw/Z8yuKFYrQtBdrHYnG4MAAgggkG6BX3/91Z566in78MMPbauttnLDzowdO9YeffRRq1ixol177bXWv39/W7lypZ1xxhmmMV51EnfFFVe42hT166YggAACCCCAQPYI0Kc7e/Y1W4oAAgggsIkCvk+2+gC2adMmMc62EvBofFcVZb49++yzXaK0jh072umnn+6ylytRjwJumi1u4k7g5QgggAACCMRMgKA7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EECg8AUIugvfnHdEAAEEEEAg5QLVq1e3ESNG2B9//JFY9p9//mnDhw+3GjVqJKZxBwEEEEAAAQQKV4Cgu3C9eTcEEEAAAQTSIrDvvvu64Pr5559PLF/3FYzvs88+iWmrV6+2zp07W6VKlax06dLWqFEj+/TTTxPP686rr75q9erVszJlylizZs3su+++y/G8HkyYMMGaNGni5tF7aJmrVq3KMx8TEEAAAQQQyHYBgu5sPwLYfgQQQACBYiNw7rnn2mOPPZbYnkcffdTOO++8xGPdueaaa2zUqFH2+OOP2+TJk61OnTp2zDHH2LJly9x88+fPt5NOOslatmxpU6dOtQsuuMCuu+66HMuYPn26e43mmzZtmo0cOdI+/PBD69SpU475eIAAAggggAACZgTdHAUIIIAAAggUE4GzzjrLBb+qmf7+++9t/Pjx1r59+8TWqSZ68ODBdscdd9ixxx5rDRo0sCFDhrja6kceecTNp+d32WUXGzBggNWvX9/OPPNMy90fXK8/44wz7Morr7S6devaoYceavfee68NGzbM1KSdggACCCCAAAL/CWzx313uIYAAAggggECcBSpWrGjHHXecq8UOgsDd1zRf5syZY2vWrLHDDjvMT7Itt9zSDjzwQPvyyy/dNN0efPDBLvman+mQQw7xd93tZ599Zt9884099dRTiel6v7Vr19rcuXNtt912S0znDgIIIIAAAtkuQNCd7UcA248AAgggUKwE1JzcN/O+//77c2ybAmMVDf8VLZrup/l5os/nvq/g+uKLL3b9uHM/R9K23CI8RgABBBDIdgGal2f7EcD2I4AAAggUK4EWLVrYX3/95f7UVzta1H+7ZMmSrgm6n66a70mTJiVqp9XkfOLEif5pd5v7sZK2ffHFF64/uJYZ/dPyKQgggAACCCDwnwBB938W3EMAAQQQQCD2AptvvrlrKq5m4rofLVtttZVdeuml1q1bN3v99ddt5syZduGFF9rvv/9u559/vptVY32rGXqXLl1s1qxZ9vTTT9vQoUOji7Frr73WPvroI+vYsaNLtvb111/bmDFj7PLLL88xHw8QQAABBBBAgERqHAMIIIAAAggUO4FtttnG9Jdf6devn5188smmpGuqsVbf7LFjx9q2227rZlfzcGU3f+mll2yvvfayBx980Pr06ZNjUXvuuae99957pmC7cePGbkiyG2+80apUqZJjPh4ggAACCCCAQNitK+y79W8HLzQQQAABBBBAAAEEEEAAAQQQQCClAjQvTyknC0MAAQQQQAABBBBAAAEEEEDgPwGC7v8suIcAAggggAACCCCAAAIIIIBASgUIulPKycIQQAABBBBAAAEEEEAAAQQQ+E+AoPs/C+4hgAACCCCAAAIIIIAAAgggkFIBgu6UcrIwBBBAAAEEEEAAAQQQQAABBP4TIOj+z4J7CCCAAAIIIIAAAggggAACCKRUgKA7pZwsDAEEEEAAAQQQQAABBBBAAIH/BAi6/7PgHgIIIIAAAggggAACCCCAAAIpFSDoTiknC0MAAQQQQAABBBBAAAEEEEDgPwGC7v8suIcAAggggAACCCCAAAIIIIBASgUIulPKycIQQAABBBBAAAEEEEAAAQQQ+E+AoPs/C+4hgAACCCCAAAIIIIAAAgggkFKB/wNPRoKTejbNZgAAAABJRU5ErkJggg==", "text/plain": [ "" ] @@ -608,7 +608,7 @@ "outputs": [ { "data": { - "image/png": "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cSRAAiRAAiRAAnFDgGInbpqSFSEBEiABEiABEghGgGInGBXGkQAJkAAJkAAJxA0Bip24aUpWhARIgARIgARIIBgBip1gVBhHAiRAAiRAAiQQNwQoduKmKVkREiABEiABEiCBYAQodoJRYRwJkAAJkAAJkEDcEKDYiZumZEVIgARIgARIgASCEaDYCUaFcSRAAiRAAiRAAnFDgGInbpqSFSEBEiABEiABEghGgGInGBXGkQAJkAAJkAAJxA0Bip24aUpWhARIgARIgARIIBgBip1gVBhHAiRAAiRAAiQQNwQoduKmKVkREiABEiABEiCBYAQodoJRYRwJkAAJkAAJkEDcEKDYiZumZEVIgARIgARIgASCEaDYCUaFcSRAAiRAAiRAAnFDgGInbpqSFSEBEiABEiABEghGgGInGBXGkQAJkAAJkAAJxA0Bip24aUpWhARIgARIgARIIBiBfBU7kyZNkqZNm0pKSor5a926tXz44YduOR3HkbFjx0q1atWkWLFi0qFDB1m1apV7HBvp6ekydOhQqVChgpQoUUJ69eolmzZtCkjDHRIgARIgARIggcQlkK9i5+STT5YHHnhAvvnmG/PXqVMnueiii1xB89BDD8ljjz0mEydOlMWLF0uVKlWka9eusm/fPrfFhg0bJjNmzJBp06bJwoULZf/+/dKzZ085duyYm4YbJEACJEACJEACiUuggFpPnGiqfrly5eThhx+WAQMGGIsOxMyoUaNMEWHFqVy5sjz44IMyaNAgSU1NlYoVK8qUKVPk8ssvN2k2b94s1atXl1mzZkn37t3DqtrevXuldOnSJj9YmRhIgARIgARIgASin0C47+98tex4McISA+vMgQMHBN1Z69atk61bt0q3bt3cZEWKFJH27dvLokWLTNySJUvkyJEjAWnQ5dW4cWM3jXsyN0iABEiABEiABBKSQKH8rvWKFSuMuDl06JCULFnSdEk1bNjQFSuw5HgD9tevX2+iIIYKFy4sZcuW9SYx1h8cyyzAQoQ/G6AMGWKHQOrBw7Jz/2HZe+iIpBRLlgolCkvp4oVjpwIsKQmQAAmQQJ4SyHexc+qpp8q3334re/bskenTp0u/fv1k/vz5LoQCBQq429hAr5s/LiBBGGkmTJgg48aN85/G/RggsHlPmox6a7ks+GmnW9p29SrIA5c2lWplirlx3CABEiAB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dOnS7h+sQAwkQAIkQAIkQALxSSBfu7G8SIcMGSLLly83Pjfe+Msvv9zdhbWmRYsWUrNmTZk5c6Zccskl7jH/BsQTHJuDhdGjRxthZY/BykPBY2nwkwRIgARIgATii0BUWHYwkuq9996TTz75RE4++eSQhKtWrWrEztq1a006+PIcPnxYdu/eHXAeurpg3QkW4AOUkpIS8BcsHeNIgARIgARIgARin0C+ih1YX2DRefvtt003Ve3atbMkumvXLtm4caNA9CA0b95ckpOTzWguezJGbq1cuVLatGljo/hJAiRAAiRAAiSQoATytRsLw86nTp0q7777rplrB/43CPCnKVasmBlCPnbsWLn00kuNuPn1119lzJgxZj6diy++2E07cOBAufXWW6V8+fLGuXnEiBHSpEkTd3SWScj/SIAESIAESIAEEpJAvoqdSZMmGegdOnQIgI8h6JhMMCkpSVasWCGvvfaa7Nmzxwiejh07yptvvmnEkT3p8ccfl0KFCkmfPn0kLS1NOnfuLJMnTzbn2zT8JAESIAESIAESSEwCBbQryUnMqv9Vazgow5qEoe/w5WEgARIgARIgARKIfgLhvr/z1Wcn+jGyhCRAAiRAAiRAArFOgGIn1luQ5ScBEiABEiABEghJgGInJB4eJAESIAESIAESiHUCFDux3oIsPwmQAAmQAAmQQEgCFDsh8fAgCZAACZAACZBArBOg2In1FmT5SYAESIAESIAEQhKg2AmJhwdJgARIgARIgARinQDFTqy3IMtPAiRAAiRAAiQQkgDFTkg8PEgCJEACJEACJBDrBCh2Yr0FWX4SIAESIAESIIGQBCh2QuLhQRIgARIgARIggVgnQLET6y3I8pMACZAACZAACYQkQLETEg8PkgAJkAAJkAAJxDoBip1Yb0GWnwRIgARIgARIICQBip2QeHiQBEiABEiABEgg1glQ7MR6C7L8JEACJEACJEACIQlQ7ITEw4MkQAIkQAIkQAKxToBiJ9ZbkOUnARIgARIgARIISaBQyKNBDv7666+yYMECwefBgwelYsWK0qxZM2ndurUULVo0yBmMIgESIAESIAESIIH8IxC22Jk6dao89dRT8vXXX0ulSpXkpJNOkmLFisnvv/8uP//8sxE6V111lYwaNUpq1qyZfzXilUmABEiABEiABEjAQyAssXPmmWdKwYIFpX///vKf//xHatSo4clCJD09Xb744guZNm2atGjRQp599lm57LLLAtJwhwRIgARIgARIgATyg0ABR0NWF545c6ZccMEFWSUzx3fu3Cnr1q2Ts846K6z00ZBo7969Urp0aUlNTZWUlJRoKBLLQAIkQAIkQAIkkAWBcN/fYVl2whU6KFOFChXMXxbl42ESIAESIAESIAESyBMCEY/GWrp0qaxYscIt3Lvvviu9e/eWMWPGyOHDh914bpAACZAACZAACZBANBCIWOwMGjRIfvzxR1P2X375Ra644gopXry4/Pe//5WRI0dGQ51YBhIgARIgARIgARJwCUQsdiB0zjjjDJMBBE67du0EI7UmT54s06dPdzPmBgmQAAmQAAmQAAlEA4GIxQ78mY8fP27KPnfuXDn//PPNdvXq1QXOyQwkQAIkQAIkQAIkEE0EIhY7GFp+3333yZQpU2T+/PnuKC2MwKpcuXI01Y1lIQESIAESIAESIAGJWOw88cQTAiflIUOGyB133CF169Y1GN966y1p06YNkZIACZAACZAACZBAVBEIa56dcEp86NAhSUpKkuTk5HCSR1WacMfpR1WhWRgSIAESIAESSHAC4b6/w5pnJxyWXBcrHEpMQwIkQAIkQAIkkNcEwhI7ZcuWlQIFCoRVNqyVxUACJEACJEACJEAC0UIgLLEDPx0bdu3aZRyUu3fvblY6RzzWxfroo4/krrvussn4SQIkQAIkQAIkQAJRQSBin51LL71UOnbsaByUvTWYOHGiYCj6O++8442Oie1w+/xiojIsJAmQAAmQAAkkCIFw398Rj8aCBee8887LgBGWHogdBhIgARIgARIgARKIJgIRi53y5cvLjBkzMtQBFh0cYyABEiABEiABEiCBaCIQls+Ot8Djxo2TgQMHyqeffur67Hz55Zcye/ZsefHFF71JuU0CJEACJEACJEAC+U4gYrHTv39/Oe200+Spp56St99+W7B8RMOGDeXzzz+Xli1b5nuFWAASIAESIAESIAES8BKI2EHZe3K8bIfr4BQv9WU9SIAESIAESCAeCIT7/o7YsgM4WAj0p59+ku3bt7uLglpoWAWdgQRIgARIgARIgASihUDEDsrwz8F6WOjKgrDp0KGD+4ch6ZGECRMmyFlnnSWlSpWSSpUqSe/evWXNmjUBWaCbbOzYsVKtWjUpVqyYudaqVasC0qSnp8vQoUOlQoUKUqJECenVq5ds2rQpIA13SIAESIAESIAEEpNAxGLnhhtuEKx8vnLlSsFsybt373b/Ip09Gaum33jjjQIBNWfOHDl69Kh069ZNDhw44LbGQw89JI899phgHp/FixdLlSpVpGvXrrJv3z43zbBhw8wIsWnTpsnChQtl//790rNnTzl27JibhhskQAIkQAIkQAKJSSBinx1YTr777jt3tfOcxLZjxw5j4YEIgtUIVh1YdCBmRo0aZS4FK07lypXlwQcflEGDBklqaqpUrFhRpkyZIpdffrlJs3nzZqlevbrMmjVLMP9PViHcPr+s8uFxEiABEiABEiCBvCMQ7vs7YssORlzBXyc3AoQLQrly5cznunXrZOvWrcbaYyL0vyJFikj79u1l0aJFJmrJkiVy5MiRgDQQSI0bN3bT2HPtJwQTAHn/7DF+kgAJkAAJkAAJxBeBiB2U4Rtz6623GhHSpEkTSU5ODiDStGnTgP1wd2DFGT58uLRt29YIFZwHoYMAS443YH/9+vUmCmkKFy4sWKzUG5DGnu+NxzZ8hTBfEAMJkAAJkAAJkED8E4hY7GBtLIQBAwa4dLAiOsQKPrPrJzNkyBBZvny58blxM/5zw7/iur2WP513P1Sa0aNHG2Fl08PCg24vBhIgARIgARIggfgjELHYQddSTgdYi9577z357LPP5OSTT3azhzMyAiw0VatWdeMx5N1ae5Dm8OHDxknaa91BmjZt2rjneDfQFYY/BhIgARIgARIggfgnELHPTs2aNSXUXyTIYH2BRQczMc+bN09q164dcDr2IWYwUssGCBs4MFsh07x5c9OV5k2zZcsWM1rMprHn8pMESIAESIAESCDxCERs2QGin3/+WZ544glZvXq16brCnDs333yz1KlTJyKCGHY+depUeffdd81cO9bHpnTp0mZOHXRfYSTW+PHjpV69euYP28WLF5e+ffuaayEt1uqCHxEWIoVz84gRIwT+RF26dImoPExMAiRAAiRAAiQQfwQiFjsfffSRmbTvjDPOkHPOOcf46mBkVKNGjeT99983c+CEi2nSpEkmaYcOHQJOeeWVVwRrcCGMHDlS0tLSZPDgwaarCqPBPv74YyOOTAL97/HHH5dChQpJnz59TNrOnTvL5MmTJSkpySbhJwmQAAmQAAmQQIISiHienWbNmpm5ax544IEAZLfffrsRIUuXLg2Ij4WdcMfpx0JdWEYSIAESIAESSBQC4b6/I/bZQdcVuo38AaOzvv/+e38090mABEiABEiABEggXwlELHYwW/G3336bodCIw/pWDCRAAiRAAiRAAiQQTQQi9tm57rrr5Prrr5dffvnFjIiCEzHWo8LyDXASZiABEiABEiABEiCBaCIQsc8OhotjJNajjz4qWIMKAcsz3HbbbXLTTTeZ0VnRVMFwyhJun184eTENCZAACZAACZBA3hAI9/0dsdjxFt+uPF6qVClvdMxthwsr5irGApMACZAACZBAHBMI9/0dcTcWZlA+evSomfPGK3LWrl1rJverVatWHGNl1UiABEiABEiABGKNQMQOypj/xq447q3sV1995c6N443nNgmQAAmQAAmQAAnkJ4GIxc6yZcvMZIL+Qrdq1SroKC1/Ou6TAAmQAAmQAAmQQF4SiFjsYPSV9dXxFjQ1NTXbK5578+E2CZAACZAACZAACeQkgYjFzrnnnisTJkwIEDbHjh0zcW3bts3JsjEvEiABEiABEiABEjhhAhE7KD/00EPSrl07OfXUUwXCB2HBggUCj2isXM5AAiRAAiRAAiRAAtFEIGLLTsOGDWX58uVm0c3t27ebLq1rrrlGfvjhB2ncuHE01Y1lIQESIAESIAESIAE5oXl24oVfuOP046W+rAcJkAAJkAAJxAOBcN/fEVt2AAfdVn//+9/NchG//fab4TVlyhSzbEQ8wGMdSIAESIAESIAE4odAxGJn+vTp0r17dylWrJgsXbpU0tPTDQ2M0Bo/fnz8kGFNSIAESIAESIAE4oJAxGLnvvvuk+eee05eeOEFM2OypdCmTRsjfuw+P0mABEiABEiABEggGghELHbWrFljRmP5C5+SkiJ79uzxR3OfBEiABEiABEiABPKVQMRip2rVqvLTTz9lKPTChQvllFNOyRDPCBIgARIgARIgARLITwIRi51BgwbJzTffLFgLC7Mpb968WV5//XUZMWKEDB48OD/rwmuTAAmQAAmQAAmQQAYCEU8qOHLkSMHSEB07dpRDhw6ZLq0iRYoYsTNkyJAMF2AECZAACZAACZAACeQngWzPs3Pw4EH5/vvv5fjx44KJBkuWLJmf9Tiha4c7Tv+ELsKTSYAESIAESIAEcpRAuO/viLuxbCmLFy8uLVq0kAYNGsjcuXNl9erV9hA/SYAESIAESIAESCBqCEQsdvr06SMTJ040FUhLS5OzzjrLLB3RtGlTwRw8DCRAAiRAAiRAAiQQTQQiFjufffaZuwDojBkzTDcWhpw/9dRTgjl4GEiABEiABEiABEggmghELHbgnFyuXDlTh9mzZ8ull14q6NK64IILZO3atdFUN5aFBEiABEiABEiABCRisVO9enX54osv5MCBAwKx061bN4Nx9+7dUrRoUSIlARIgARIgARIggagiEPHQ82HDhslVV11lRl/VrFlTOnToYCqE7q0mTZpEVeVYGBIgARIgARIgARKIWOxg4sCWLVvKhg0bpGvXrlKw4B/GIcyeTJ8d3lAkQAIkQAIkQALRRiDb8+xEW0VOpDzhjtM/kWvwXBIgARIgARIggZwlEO77OyyfnQceeEAwiWA4ActIzJw5M5ykTEMCJEACJEACJEACuU4gLLGDmZJr1Kgh//znP+XDDz+UHTt2uAU7evSoLF++XJ599llp06aNXHHFFYIV0BlIgARIgARIgARIIBoIhOWz89prrxlB88wzzxjnZAw/T0pKEqyJZS0+zZo1k+uvv1769etn4qOhciwDCZAACZAACZAACUTss+M4jhE+v/76q2AG5QoVKsgZZ5xhPmMVZ7h9frFaP5abBEiABEiABOKRQLjv77AsO15ABQoUkNNPP938eeO5TQIkQAIkQAIkQALRSCAsn51oLDjLRAIkQAIkQAIkQALhEKDYCYcS05AACZAACZAACcQsAYqdmG06FpwESIAESIAESCAcAhQ74VBiGhIgARIgARIggZglELHYmTx5sjvcPGZrzYKTAAmQAAmQAAkkDIGIxc7o0aOlSpUqMnDgQFm0aFHCgGJFSYAESIAESIAEYpNAxGJn06ZN8u9//1t2794tHTt2lAYNGsiDDz4oW7dujZgAVkq/8MILpVq1aoIh7e+8805AHv379zfxOGb/WrVqFZAmPT1dhg4daub5KVGihPTq1UtQRgYSIAESIAESIAESAIGIxQ5mToagePvtt2Xjxo1m1uTXX3/dLCeB+HfffVeOHz8eFt0DBw6Y+XomTpyYafrzzjtPtmzZ4v7NmjUrIO2wYcNkxowZMm3aNFm4cKHs379fevbsKceOHQtIxx0SIAESIAESIIHEJBDxpIJeTJUqVZJzzjlH1qxZIz/++KOsWLFCYI0pU6aMvPLKK9KhQwdv8gzbPXr0EPyFCliSAt1mwQKWrXjppZdkypQp0qVLF5MEVqfq1avL3LlzpXv37sFOYxwJkAAJkAAJkEACEYjYsgM227Ztk0ceeUQaNWpkBA2ma/7ggw9k3bp1snnzZrnkkkvMGlk5wfHTTz8ViKr69evLddddJ9u3b3ezXbJkiRw5ckS6devmxqFLrHHjxiH9idD1hTJ7/9wMuEECJEACJEACJBBXBCIWO/CxgeUEo7IgPn777Td54403XMtKsWLF5NZbbzVdXCdKClYfdJHNmzdPHn30UVm8eLF06tRJIFYQ4CdUuHBhKVu2bMClKleuHNKHaMKECVK6dGn3D/VhIAESIAESIAESiE8CEXdjwcoyf/58ad26daZEqlataqw8mSYI88Dll1/upoS1pkWLFlKzZk2ZOXOmsR65B30bWKwUDs2ZBYwoGz58uHsYFh4KHhcHN0iABEiABEggrghELHbgI5NVgNCAKMnpABGFfNeuXWuyhi/P4cOHzcgwr3UHXV1t2rTJ9PLwA8IfAwmQAAmQAAmQQPwTiLgb66abbpKnnnoqAxmMqMLIqNwMu3btMt1jED0IzZs3l+TkZJkzZ457WYzcWrlyZUix4ybmBgmQAAmQAAmQQNwTiFjsTJ8+3YzA8pOBJeWtt97yR4fcxzDxb7/91vwhIRycsb9hwwYzhHzEiBHyxRdfyK+//ipwVIa/UIUKFeTiiy82+cLvBpMbwkfof//7nyxbtkz+/ve/S5MmTVwfopAF4EESIAESIAESIIG4JxBxNxasKxAZ/pCSkiI7d+70R4fc/+abb8zEhDaR9aPp16+fTJo0yQxlf+2112TPnj0Caw4mMXzzzTelVKlS9hR5/PHHpVChQtKnTx9JS0uTzp07G+dpzAfEQAIkQAIkQAIkQAIF1JnXiQQDHIVvuOEGGTJkSMBpTz/9tBEo33//fUB8LOzAQRkCDvP2QLQxkAAJkAAJkAAJRD+BcN/fEVt2YH2B0NmxY4cZBg4U6ELC0PAnnngi+smwhCRAAiRAAiRAAglFIGKxM2DAADPPzf333y/33nuvgVWrVi1j1bnmmmsSCh4rSwIkQAIkQAIkEP0EIu7G8lYJ1h1MIliyZElvdMxth2sGi7mKscAkQAIkQAIkEMcEwn1/R2zZ8TKrWLGid5fbJEACJEACJEACJBB1BCIeeo51sa6++mrBGlQYBYVRT96/qKshC0QCJEACJEACJJDQBCK27GBVc8yDc9ddd5nh4KGWZUhosqw8CZAACZAACZBAVBCIWOwsXLhQFixYIGeccUZUVICFIAESIAESIAESIIFQBCLuxsKCmRFOzRPq+jxGAiRAAiRAAiRAArlKIGKxg7l0br/9drOEQ66WjJmTAAmQAAmQAAmQQA4QiLgb6/LLL5eDBw9KnTp1pHjx4mYhTm85fv/9d+8ut0mABEiABEiABEggXwlELHY4S3K+thcvTgIkQAIkQAIkECGBiMUOFulkIAESIAESIAESIIFYIRCxzw4q9vPPP8udd94pV155pWzfvt3Udfbs2bJq1apYqTfLSQIkQAIkQAIkkCAEIhY78+fPlyZNmshXX30lb7/9tuzfv9+gWr58udx9990Jgo3VJAESIAESIAESiBUCEYsdjMS67777ZM6cOVK4cGG3nh07dpQvvvjC3ecGCZAACZAACZAACUQDgYjFzooVK+Tiiy/OUHask7Vr164M8YwgARIgARIgARIggfwkELHYKVOmjGzZsiVDmZctWyYnnXRShnhGkAAJkAAJkAAJkEB+EohY7PTt21dGjRolW7duFayLdfz4cfn8889lxIgRcs011+RnXXhtEiABEiABEiABEshAIGKxc//990uNGjWMFQfOyQ0bNpR27dpJmzZtzAitDFdgBAmQAAmQAAmQAAnkI4ECus6Vk53r//LLL7J06VJj2WnWrJnUq1cvO9lExTl79+6V0qVLS2pqqqSkpERFmVgIEiABEiABEiCB0ATCfX9HbNm55557zHIRp5xyivztb3+TPn36GKGTlpYmOMZAAiRAAiRAAiRAAtFEIGLLTlJSknFQrlSpUkA9MBILcceOHQuIj4WdcJVhLNSFZSQBEiABEiCBRCEQ7vs7YssOer3gmOwP3333nZQrV84fzX0SIAESIAESIAESyFcCYa+NVbZsWSNyIHTq168fIHhgzYGz8g033JCvleHFSYAESIAESIAESMBPIGyxg9XOYdUZMGCAjBs3zjj02swwk3KtWrWkdevWNoqfJEACJEACJEACJBAVBMIWO3a189q1a5th5snJyVFRARaCBEiABEiABEiABEIRCFvs2Ezat29vNwUjsI4cOeLuY4NDtwNwcIcESIAESIAESCCfCUTsoHzw4EEZMmSIGXlVsmRJgS+P9y+f68PLkwAJkAAJkAAJkEAAgYjFzm233Sbz5s2TZ599VooUKSIvvvii8eGpVq2avPbaawGZc4cESIAESIAESIAE8ptAxN1Y77//vhE1HTp0MM7K5557rtStW1dq1qwpr7/+ulx11VX5XSdenwRIgARIgARIgARcAhFbdn7//XeBkzIC/HOwj9C2bVv57LPPzDb/IwESIAESIAESIIFoIRCx2MEyEb/++qspPxYB/c9//mO2YfEpU6aM2eZ/JEACJEACJEACJBAtBCIWO9dee61gtmSE0aNHu747t9xyi8Cfh4EESIAESIAESIAEoolAxGtj+Qu/YcMG+eabb6ROnTpy+umn+w/HxH64a2vERGVYSBIgARIgARJIEALhvr8jtuz4+dWoUUMuueQSsy4WZldmIAESIAESIAESIIFoInDCYsdWBo7Kr776qt3lJwmQAAmQAAmQAAlEBYEcEztRURsWggRIgARIgARIgAR8BCh2fEC4SwIkQAIkQAIkEF8EKHbiqz1ZGxIgARIgARIgAR+BsGdQhhNyqLBnz55Qh4MewySEDz/8sCxZskS2bNkiM2bMkN69e7tpHccxS1E8//zzsnv3bmnZsqU888wz0qhRIzdNenq6jBgxQt544w2zMGnnzp3NcPiTTz7ZTZNfG6kHD8vO/Ydl76EjklIsWSqUKCylixfOr+LwuiRAAiRAAiSQkATCtuyULl1aQv1huYhrrrkmIogHDhwww9UnTpwY9LyHHnpIHnvsMcHxxYsXS5UqVaRr166yb98+N/2wYcOMSJo2bZosXLhQ9u/fLz179pRjx465afJjY/OeNBnyxjLp/Nh8ufjZRdL50fkyVPcRz0ACJEACJEACJJB3BE54np2cKmqBAgUCLDuw6mBxUYiZUaNGmcvAilO5cmV58MEHZdCgQZKamioVK1aUKVOmyOWXX27SbN68WapXry6zZs2S7t27h1W8cMfph5WZJoJFB0JnwdqdGU5pV6+CPH1lM1p4MpBhBAmQAAmQAAlERiDc93fYlp3ILn/iqdetWydbt26Vbt26uZlhlfX27dvLokWLTBy6v44cORKQBgKpcePGbhr35DzcQNdVMKGDInymAgjHGUiABEiABEiABPKGQNg+O3lTnL+uAqGDAEuON2B//fr1JgppChcuLGXLlvUmMefY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AYqduGxWVooESIAESIAESMASoNixJPhJAglKQGfKNotiYiHFaAk//PCDWYS2aNGicsYZZ0RLsaK+HDrxJHlFfSuxgPlBgGInP6jzmiTgIdC/f38jNnRae0+syDvvvJNhZe6ABHG8ozN2CxakXbNmjfzvf/8LWlPLDatRY222U045RUaMGCEHDhwImj6/I8MRlRArqE+oP+TDQAIkEBkBip3IeDE1CeQKAVgwHnzwwQwrx+fKxfIoU+8ippFe8ueff5a2bduaFdjLly+f6ennnXeeWThW13WT++67T5599lkjeIKdcOTIkWDRURUHsYaFcO0fVmu/55573H3EV69eParKzMKQQCwQoNiJhVZiGeOeQJcuXczq8hMmTMi0rsG6KJ544omAVdBh7ejdu7eMHz9edCFRKVOmjIwbN050QVa57bbbRNcbE7xAX3755QzXQdcRVqCH8GrUqJHoQpoBab7//ns5//zzpWTJkibvq6++Wnbu3Omm6dChg1ltfPjw4VKhQgXp2rWre8y7oWsVmRc4ylGkSBHT7TJ79mw3CawaS5YsMWmwjXpnFnC+rhtmBEDfvn1F11szFjGkt7xQV1h9kBar4+jaX3LRRReZeujiqtKnTx/Ztm2bewnvebpemEmni2zKsWPH5KGHHjLXq1Spktx///3uOdhAWSdNmiQ9evQQXdvNrLj93//+101jV19v1qyZSQte/gC2qI/9S0pKEl1Hzt2HgNS16zItuz8/XeBV6tatKyg/uOP8kSNHykknnWQsZy1btgxo58mTJ5t75qOPPpLTTjvNXMcKSps37ouzzz7bnI/765xzzhFd084e5icJRCUBip2obBYWKtEI4KUGgfL000/Lpk2bTqj68+bNk82bN4uuBC26srt56etK9lK2bFn56quv5IYbbjB/GzduDLgOxJCugi66MrwRPb169RJdvNWkgUWhffv2Rph88803AnECgQCh4A2vvvqqFCpUSD7//HP517/+5T3kbj/55JPy6KOPyiOPPCK68Kd0795dcK21a9eaNLgWxBbKgm1YO8INEBleC85PP/0k//nPf2T69OlifZIgBn///XeZP3++zJkzR2BF0sVwAy6BuA8//NDU84033jDiUBeoNW2D82CFu/POO+XLL78MOO+uu+6SSy+9VL777jv5+9//Lrpqvaxevdqk+frrr83n3Llz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\n", + "image/png": "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cSRAAiRAAiRAAnFDgGInbpqSFSEBEiABEiABEghGgGInGBXGkQAJkAAJkAAJxA0Bip24aUpWhARIgARIgARIIBgBip1gVBhHAiRAAiRAAiQQNwQoduKmKVkREiABEiABEiCBYAQodoJRYRwJkAAJkAAJkEDcEKDYiZumZEVIgARIgARIgASCEaDYCUaFcSRAAiRAAiRAAnFDgGInbpqSFSEBEiABEiABEghGgGInGBXGkQAJkAAJkAAJxA0Bip24aUpWhARIgARIgARIIBgBip1gVBhHAiRAAiRAAiQQNwQoduKmKVkREiABEiABEiCBYAQodoJRYRwJkAAJkAAJkEDcEKDYiZumZEVIgARIgARIgASCEaDYCUaFcSRAAiRAAiRAAnFDgGInbpqSFSEBEiABEiABEghGgGInGBXGkQAJkAAJkAAJxA0Bip24aUpWhARIgARIgARIIBiBfBU7kyZNkqZNm0pKSor5a926tXz44YduOR3HkbFjx0q1atWkWLFi0qFDB1m1apV7HBvp6ekydOhQqVChgpQoUUJ69eolmzZtCkjDHRIgARIgARIggcQlkK9i5+STT5YHHnhAvvnmG/PXqVMnueiii1xB89BDD8ljjz0mEydOlMWLF0uVKlWka9eusm/fPrfFhg0bJjNmzJBp06bJwoULZf/+/dKzZ085duyYm4YbJEACJEACJEACiUuggFpPnGiqfrly5eThhx+WAQMGGIsOxMyoUaNMEWHFqVy5sjz44IMyaNAgSU1NlYoVK8qUKVPk8ssvN2k2b94s1atXl1mzZkn37t3DqtrevXuldOnSJj9YmRhIgARIgARIgASin0C47+98tex4McISA+vMgQMHBN1Z69atk61bt0q3bt3cZEWKFJH27dvLokWLTNySJUvkyJEjAWnQ5dW4cWM3jXsyN0iABEiABEiABBKSQKH8rvWKFSuMuDl06JCULFnSdEk1bNjQFSuw5HgD9tevX2+iIIYKFy4sZcuW9SYx1h8cyyzAQoQ/G6AMGWKHQOrBw7Jz/2HZe+iIpBRLlgolCkvp4oVjpwIsKQmQAAmQQJ4SyHexc+qpp8q3334re/bskenTp0u/fv1k/vz5LoQCBQq429hAr5s/LiBBGGkmTJgg48aN85/G/RggsHlPmox6a7ks+GmnW9p29SrIA5c2lWplirlx3CABEiAB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dOnS7h+sQAwkQAIkQAIkQALxSSBfu7G8SIcMGSLLly83Pjfe+Msvv9zdhbWmRYsWUrNmTZk5c6Zccskl7jH/BsQTHJuDhdGjRxthZY/BykPBY2nwkwRIgARIgATii0BUWHYwkuq9996TTz75RE4++eSQhKtWrWrEztq1a006+PIcPnxYdu/eHXAeurpg3QkW4AOUkpIS8BcsHeNIgARIgARIgARin0C+ih1YX2DRefvtt003Ve3atbMkumvXLtm4caNA9CA0b95ckpOTzWguezJGbq1cuVLatGljo/hJAiRAAiRAAiSQoATytRsLw86nTp0q7777rplrB/43CPCnKVasmBlCPnbsWLn00kuNuPn1119lzJgxZj6diy++2E07cOBAufXWW6V8+fLGuXnEiBHSpEkTd3SWScj/SIAESIAESIAEEpJAvoqdSZMmGegdOnQIgI8h6JhMMCkpSVasWCGvvfaa7Nmzxwiejh07yptvvmnEkT3p8ccfl0KFCkmfPn0kLS1NOnfuLJMnTzbn2zT8JAESIAESIAESSEwCBbQryUnMqv9Vazgow5qEoe/w5WEgARIgARIgARKIfgLhvr/z1Wcn+jGyhCRAAiRAAiRAArFOgGIn1luQ5ScBEiABEiABEghJgGInJB4eJAESIAESIAESiHUCFDux3oIsPwmQAAmQAAmQQEgCFDsh8fAgCZAACZAACZBArBOg2In1FmT5SYAESIAESIAEQhKg2AmJhwdJgARIgARIgARinQDFTqy3IMtPAiRAAiRAAiQQkgDFTkg8PEgCJEACJEACJBDrBCh2Yr0FWX4SIAESIAESIIGQBCh2QuLhQRIgARIgARIggVgnQLET6y3I8pMACZAACZAACYQkQLETEg8PkgAJkAAJkAAJxDoBip1Yb0GWnwRIgARIgARIICQBip2QeHiQBEiABEiABEgg1glQ7MR6C7L8JEACJEACJEACIQlQ7ITEw4MkQAIkQAIkQAKxToBiJ9ZbkOUnARIgARIgARIISaBQyKNBDv7666+yYMECwefBgwelYsWK0qxZM2ndurUULVo0yBmMIgESIAESIAESIIH8IxC22Jk6dao89dRT8vXXX0ulSpXkpJNOkmLFisnvv/8uP//8sxE6V111lYwaNUpq1qyZfzXilUmABEiABEiABEjAQyAssXPmmWdKwYIFpX///vKf//xHatSo4clCJD09Xb744guZNm2atGjRQp599lm57LLLAtJwhwRIgARIgARIgATyg0ABR0NWF545c6ZccMEFWSUzx3fu3Cnr1q2Ts846K6z00ZBo7969Urp0aUlNTZWUlJRoKBLLQAIkQAIkQAIkkAWBcN/fYVl2whU6KFOFChXMXxbl42ESIAESIAESIAESyBMCEY/GWrp0qaxYscIt3Lvvviu9e/eWMWPGyOHDh914bpAACZAACZAACZBANBCIWOwMGjRIfvzxR1P2X375Ra644gopXry4/Pe//5WRI0dGQ51YBhIgARIgARIgARJwCUQsdiB0zjjjDJMBBE67du0EI7UmT54s06dPdzPmBgmQAAmQAAmQAAlEA4GIxQ78mY8fP27KPnfuXDn//PPNdvXq1QXOyQwkQAIkQAIkQAIkEE0EIhY7GFp+3333yZQpU2T+/PnuKC2MwKpcuXI01Y1lIQESIAESIAESIAGJWOw88cQTAiflIUOGyB133CF169Y1GN966y1p06YNkZIACZAACZAACZBAVBEIa56dcEp86NAhSUpKkuTk5HCSR1WacMfpR1WhWRgSIAESIAESSHAC4b6/w5pnJxyWXBcrHEpMQwIkQAIkQAIkkNcEwhI7ZcuWlQIFCoRVNqyVxUACJEACJEACJEAC0UIgLLEDPx0bdu3aZRyUu3fvblY6RzzWxfroo4/krrvussn4SQIkQAIkQAIkQAJRQSBin51LL71UOnbsaByUvTWYOHGiYCj6O++8442Oie1w+/xiojIsJAmQAAmQAAkkCIFw398Rj8aCBee8887LgBGWHogdBhIgARIgARIgARKIJgIRi53y5cvLjBkzMtQBFh0cYyABEiABEiABEiCBaCIQls+Ot8Djxo2TgQMHyqeffur67Hz55Zcye/ZsefHFF71JuU0CJEACJEACJEAC+U4gYrHTv39/Oe200+Spp56St99+W7B8RMOGDeXzzz+Xli1b5nuFWAASIAESIAESIAES8BKI2EHZe3K8bIfr4BQv9WU9SIAESIAESCAeCIT7/o7YsgM4WAj0p59+ku3bt7uLglpoWAWdgQRIgARIgARIgASihUDEDsrwz8F6WOjKgrDp0KGD+4ch6ZGECRMmyFlnnSWlSpWSSpUqSe/evWXNmjUBWaCbbOzYsVKtWjUpVqyYudaqVasC0qSnp8vQoUOlQoUKUqJECenVq5ds2rQpIA13SIAESIAESIAEEpNAxGLnhhtuEKx8vnLlSsFsybt373b/Ip09Gaum33jjjQIBNWfOHDl69Kh069ZNDhw44LbGQw89JI899phgHp/FixdLlSpVpGvXrrJv3z43zbBhw8wIsWnTpsnChQtl//790rNnTzl27JibhhskQAIkQAIkQAKJSSBinx1YTr777jt3tfOcxLZjxw5j4YEIgtUIVh1YdCBmRo0aZS4FK07lypXlwQcflEGDBklqaqpUrFhRpkyZIpdffrlJs3nzZqlevbrMmjVLMP9PViHcPr+s8uFxEiABEiABEiCBvCMQ7vs7YssORlzBXyc3AoQLQrly5cznunXrZOvWrcbaYyL0vyJFikj79u1l0aJFJmrJkiVy5MiRgDQQSI0bN3bT2HPtJwQTAHn/7DF+kgAJkAAJkAAJxBeBiB2U4Rtz6623GhHSpEkTSU5ODiDStGnTgP1wd2DFGT58uLRt29YIFZwHoYMAS443YH/9+vUmCmkKFy4sWKzUG5DGnu+NxzZ8hTBfEAMJkAAJkAAJkED8E4hY7GBtLIQBAwa4dLAiOsQKPrPrJzNkyBBZvny58blxM/5zw7/iur2WP513P1Sa0aNHG2Fl08PCg24vBhIgARIgARIggfgjELHYQddSTgdYi9577z357LPP5OSTT3azhzMyAiw0VatWdeMx5N1ae5Dm8OHDxknaa91BmjZt2rjneDfQFYY/BhIgARIgARIggfgnELHPTs2aNSXUXyTIYH2BRQczMc+bN09q164dcDr2IWYwUssGCBs4MFsh07x5c9OV5k2zZcsWM1rMprHn8pMESIAESIAESCDxCERs2QGin3/+WZ544glZvXq16brCnDs333yz1KlTJyKCGHY+depUeffdd81cO9bHpnTp0mZOHXRfYSTW+PHjpV69euYP28WLF5e+ffuaayEt1uqCHxEWIoVz84gRIwT+RF26dImoPExMAiRAAiRAAiQQfwQiFjsfffSRmbTvjDPOkHPOOcf46mBkVKNGjeT99983c+CEi2nSpEkmaYcOHQJOeeWVVwRrcCGMHDlS0tLSZPDgwaarCqPBPv74YyOOTAL97/HHH5dChQpJnz59TNrOnTvL5MmTJSkpySbhJwmQAAmQAAmQQIISiHienWbNmpm5ax544IEAZLfffrsRIUuXLg2Ij4WdcMfpx0JdWEYSIAESIAESSBQC4b6/I/bZQdcVuo38AaOzvv/+e38090mABEiABEiABEggXwlELHYwW/G3336bodCIw/pWDCRAAiRAAiRAAiQQTQQi9tm57rrr5Prrr5dffvnFjIiCEzHWo8LyDXASZiABEiABEiABEiCBaCIQsc8OhotjJNajjz4qWIMKAcsz3HbbbXLTTTeZ0VnRVMFwyhJun184eTENCZAACZAACZBA3hAI9/0dsdjxFt+uPF6qVClvdMxthwsr5irGApMACZAACZBAHBMI9/0dcTcWZlA+evSomfPGK3LWrl1rJverVatWHGNl1UiABEiABEiABGKNQMQOypj/xq447q3sV1995c6N443nNgmQAAmQAAmQAAnkJ4GIxc6yZcvMZIL+Qrdq1SroKC1/Ou6TAAmQAAmQAAmQQF4SiFjsYPSV9dXxFjQ1NTXbK5578+E2CZAACZAACZAACeQkgYjFzrnnnisTJkwIEDbHjh0zcW3bts3JsjEvEiABEiABEiABEjhhAhE7KD/00EPSrl07OfXUUwXCB2HBggUCj2isXM5AAiRAAiRAAiRAAtFEIGLLTsOGDWX58uVm0c3t27ebLq1rrrlGfvjhB2ncuHE01Y1lIQESIAESIAESIAE5oXl24oVfuOP046W+rAcJkAAJkAAJxAOBcN/fEVt2AAfdVn//+9/NchG//fab4TVlyhSzbEQ8wGMdSIAESIAESIAE4odAxGJn+vTp0r17dylWrJgsXbpU0tPTDQ2M0Bo/fnz8kGFNSIAESIAESIAE4oJAxGLnvvvuk+eee05eeOEFM2OypdCmTRsjfuw+P0mABEiABEiABEggGghELHbWrFljRmP5C5+SkiJ79uzxR3OfBEiABEiABEiABPKVQMRip2rVqvLTTz9lKPTChQvllFNOyRDPCBIgARIgARIgARLITwIRi51BgwbJzTffLFgLC7Mpb968WV5//XUZMWKEDB48OD/rwmuTAAmQAAmQAAmQQAYCEU8qOHLkSMHSEB07dpRDhw6ZLq0iRYoYsTNkyJAMF2AECZAACZAACZAACeQngWzPs3Pw4EH5/vvv5fjx44KJBkuWLJmf9Tiha4c7Tv+ELsKTSYAESIAESIAEcpRAuO/viLuxbCmLFy8uLVq0kAYNGsjcuXNl9erV9hA/SYAESIAESIAESCBqCEQsdvr06SMTJ040FUhLS5OzzjrLLB3RtGlTwRw8DCRAAiRAAiRAAiQQTQQiFjufffaZuwDojBkzTDcWhpw/9dRTgjl4GEiABEiABEiABEggmghELHbgnFyuXDlTh9mzZ8ull14q6NK64IILZO3atdFUN5aFBEiABEiABEiABCRisVO9enX54osv5MCBAwKx061bN4Nx9+7dUrRoUSIlARIgARIgARIggagiEPHQ82HDhslVV11lRl/VrFlTOnToYCqE7q0mTZpEVeVYGBIgARIgARIgARKIWOxg4sCWLVvKhg0bpGvXrlKw4B/GIcyeTJ8d3lAkQAIkQAIkQALRRiDb8+xEW0VOpDzhjtM/kWvwXBIgARIgARIggZwlEO77OyyfnQceeEAwiWA4ActIzJw5M5ykTEMCJEACJEACJEACuU4gLLGDmZJr1Kgh//znP+XDDz+UHTt2uAU7evSoLF++XJ599llp06aNXHHFFYIV0BlIgARIgARIgARIIBoIhOWz89prrxlB88wzzxjnZAw/T0pKEqyJZS0+zZo1k+uvv1769etn4qOhciwDCZAACZAACZAACUTss+M4jhE+v/76q2AG5QoVKsgZZ5xhPmMVZ7h9frFaP5abBEiABEiABOKRQLjv77AsO15ABQoUkNNPP938eeO5TQIkQAIkQAIkQALRSCAsn51oLDjLRAIkQAIkQAIkQALhEKDYCYcS05AACZAACZAACcQsAYqdmG06FpwESIAESIAESCAcAhQ74VBiGhIgARIgARIggZglELHYmTx5sjvcPGZrzYKTAAmQAAmQAAkkDIGIxc7o0aOlSpUqMnDgQFm0aFHCgGJFSYAESIAESIAEYpNAxGJn06ZN8u9//1t2794tHTt2lAYNGsiDDz4oW7dujZgAVkq/8MILpVq1aoIh7e+8805AHv379zfxOGb/WrVqFZAmPT1dhg4daub5KVGihPTq1UtQRgYSIAESIAESIAESAIGIxQ5mToagePvtt2Xjxo1m1uTXX3/dLCeB+HfffVeOHz8eFt0DBw6Y+XomTpyYafrzzjtPtmzZ4v7NmjUrIO2wYcNkxowZMm3aNFm4cKHs379fevbsKceOHQtIxx0SIAESIAESIIHEJBDxpIJeTJUqVZJzzjlH1qxZIz/++KOsWLFCYI0pU6aMvPLKK9KhQwdv8gzbPXr0EPyFCliSAt1mwQKWrXjppZdkypQp0qVLF5MEVqfq1avL3LlzpXv37sFOYxwJkAAJkAAJkEACEYjYsgM227Ztk0ceeUQaNWpkBA2ma/7ggw9k3bp1snnzZrnkkkvMGlk5wfHTTz8ViKr69evLddddJ9u3b3ezXbJkiRw5ckS6devmxqFLrHHjxiH9idD1hTJ7/9wMuEECJEACJEACJBBXBCIWO/CxgeUEo7IgPn777Td54403XMtKsWLF5NZbbzVdXCdKClYfdJHNmzdPHn30UVm8eLF06tRJIFYQ4CdUuHBhKVu2bMClKleuHNKHaMKECVK6dGn3D/VhIAESIAESIAESiE8CEXdjwcoyf/58ad26daZEqlataqw8mSYI88Dll1/upoS1pkWLFlKzZk2ZOXOmsR65B30bWKwUDs2ZBYwoGz58uHsYFh4KHhcHN0iABEiABEggrghELHbgI5NVgNCAKMnpABGFfNeuXWuyhi/P4cOHzcgwr3UHXV1t2rTJ9PLwA8IfAwmQAAmQAAmQQPwTiLgb66abbpKnnnoqAxmMqMLIqNwMu3btMt1jED0IzZs3l+TkZJkzZ457WYzcWrlyZUix4ybmBgmQAAmQAAmQQNwTiFjsTJ8+3YzA8pOBJeWtt97yR4fcxzDxb7/91vwhIRycsb9hwwYzhHzEiBHyxRdfyK+//ipwVIa/UIUKFeTiiy82+cLvBpMbwkfof//7nyxbtkz+/ve/S5MmTVwfopAF4EESIAESIAESIIG4JxBxNxasKxAZ/pCSkiI7d+70R4fc/+abb8zEhDaR9aPp16+fTJo0yQxlf+2112TPnj0Caw4mMXzzzTelVKlS9hR5/PHHpVChQtKnTx9JS0uTzp07G+dpzAfEQAIkQAIkQAIkQAIF1JnXiQQDHIVvuOEGGTJkSMBpTz/9tBEo33//fUB8LOzAQRkCDvP2QLQxkAAJkAAJkAAJRD+BcN/fEVt2YH2B0NmxY4cZBg4U6ELC0PAnnngi+smwhCRAAiRAAiRAAglFIGKxM2DAADPPzf333y/33nuvgVWrVi1j1bnmmmsSCh4rSwIkQAIkQAIkEP0EIu7G8lYJ1h1MIliyZElvdMxth2sGi7mKscAkQAIkQAIkEMcEwn1/R2zZ8TKrWLGid5fbJEACJEACJEACJBB1BCIeeo51sa6++mrBGlQYBYVRT96/qKshC0QCJEACJEACJJDQBCK27GBVc8yDc9ddd5nh4KGWZUhosqw8CZAACZAACZBAVBCIWOwsXLhQFixYIGeccUZUVICFIAESIAESIAESIIFQBCLuxsKCmRFOzRPq+jxGAiRAAiRAAiRAArlKIGKxg7l0br/9drOEQ66WjJmTAAmQAAmQAAmQQA4QiLgb6/LLL5eDBw9KnTp1pHjx4mYhTm85fv/9d+8ut0mABEiABEiABEggXwlELHY4S3K+thcvTgIkQAIkQAIkECGBiMUOFulkIAESIAESIAESIIFYIRCxzw4q9vPPP8udd94pV155pWzfvt3Udfbs2bJq1apYqTfLSQIkQAIkQAIkkCAEIhY78+fPlyZNmshXX30lb7/9tuzfv9+gWr58udx9990Jgo3VJAESIAESIAESiBUCEYsdjMS67777ZM6cOVK4cGG3nh07dpQvvvjC3ecGCZAACZAACZAACUQDgYjFzooVK+Tiiy/OUHask7Vr164M8YwgARIgARIgARIggfwkELHYKVOmjGzZsiVDmZctWyYnnXRShnhGkAAJkAAJkAAJkEB+EohY7PTt21dGjRolW7duFayLdfz4cfn8889lxIgRcs011+RnXXhtEiABEiABEiABEshAIGKxc//990uNGjWMFQfOyQ0bNpR27dpJmzZtzAitDFdgBAmQAAmQAAmQAAnkI4ECus6Vk53r//LLL7J06VJj2WnWrJnUq1cvO9lExTl79+6V0qVLS2pqqqSkpERFmVgIEiABEiABEiCB0ATCfX9HbNm55557zHIRp5xyivztb3+TPn36GKGTlpYmOMZAAiRAAiRAAiRAAtFEIGLLTlJSknFQrlSpUkA9MBILcceOHQuIj4WdcJVhLNSFZSQBEiABEiCBRCEQ7vs7YssOer3gmOwP3333nZQrV84fzX0SIAESIAESIAESyFcCYa+NVbZsWSNyIHTq168fIHhgzYGz8g033JCvleHFSYAESIAESIAESMBPIGyxg9XOYdUZMGCAjBs3zjj02swwk3KtWrWkdevWNoqfJEACJEACJEACJBAVBMIWO3a189q1a5th5snJyVFRARaCBEiABEiABEiABEIRCFvs2Ezat29vNwUjsI4cOeLuY4NDtwNwcIcESIAESIAESCCfCUTsoHzw4EEZMmSIGXlVsmRJgS+P9y+f68PLkwAJkAAJkAAJkEAAgYjFzm233Sbz5s2TZ599VooUKSIvvvii8eGpVq2avPbaawGZc4cESIAESIAESIAE8ptAxN1Y77//vhE1HTp0MM7K5557rtStW1dq1qwpr7/+ulx11VX5XSdenwRIgARIgARIgARcAhFbdn7//XeBkzIC/HOwj9C2bVv57LPPzDb/IwESIAESIAESIIFoIRCx2MEyEb/++qspPxYB/c9//mO2YfEpU6aM2eZ/JEACJEACJEACJBAtBCIWO9dee61gtmSE0aNHu747t9xyi8Cfh4EESIAESIAESIAEoolAxGtj+Qu/YcMG+eabb6ROnTpy+umn+w/HxH64a2vERGVYSBIgARIgARJIEALhvr8jtuz4+dWoUUMuueQSsy4WZldmIAESIAESIAESIIFoInDCYsdWBo7Kr776qt3lJwmQAAmQAAmQAAlEBYEcEztRURsWggRIgARIgARIgAR8BCh2fEC4SwIkQAIkQAIkEF8EKHbiqz1ZGxIgARIgARIgAR+BsGdQhhNyqLBnz55Qh4MewySEDz/8sCxZskS2bNkiM2bMkN69e7tpHccxS1E8//zzsnv3bmnZsqU888wz0qhRIzdNenq6jBgxQt544w2zMGnnzp3NcPiTTz7ZTZNfG6kHD8vO/Ydl76EjklIsWSqUKCylixfOr+LwuiRAAiRAAiSQkATCtuyULl1aQv1huYhrrrkmIogHDhwww9UnTpwY9LyHHnpIHnvsMcHxxYsXS5UqVaRr166yb98+N/2wYcOMSJo2bZosXLhQ9u/fLz179pRjx465afJjY/OeNBnyxjLp/Nh8ufjZRdL50fkyVPcRz0ACJEACJEACJJB3BE54np2cKmqBAgUCLDuw6mBxUYiZUaNGmcvAilO5cmV58MEHZdCgQZKamioVK1aUKVOmyOWXX27SbN68WapXry6zZs2S7t27h1W8cMfph5WZJoJFB0JnwdqdGU5pV6+CPH1lM1p4MpBhBAmQAAmQAAlERiDc93fYlp3ILn/iqdetWydbt26Vbt26uZlhlfX27dvLokWLTBy6v44cORKQBgKpcePGbhr35DzcQNdVMKGDInymAgjHGUiABEiABEiABPKGQNg+O3lTnL+uAqGDAEuON2B//fr1JgppChcuLGXLlvUmMefY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AYqduGxWVooESIAESIAESMASoNixJPhJAglKQGfKNotiYiHFaAk//PCDWYS2aNGicsYZZ0RLsaK+HDrxJHlFfSuxgPlBgGInP6jzmiTgIdC/f38jNnRae0+syDvvvJNhZe6ABHG8ozN2CxakXbNmjfzvf/8LWlPLDatRY222U045RUaMGCEHDhwImj6/I8MRlRArqE+oP+TDQAIkEBkBip3IeDE1CeQKAVgwHnzwwQwrx+fKxfIoU+8ippFe8ueff5a2bduaFdjLly+f6ennnXeeWThW13WT++67T5599lkjeIKdcOTIkWDRURUHsYaFcO0fVmu/55573H3EV69eParKzMKQQCwQoNiJhVZiGeOeQJcuXczq8hMmTMi0rsG6KJ544omAVdBh7ejdu7eMHz9edCFRKVOmjIwbN050QVa57bbbRNcbE7xAX3755QzXQdcRVqCH8GrUqJHoQpoBab7//ns5//zzpWTJkibvq6++Wnbu3Omm6dChg1ltfPjw4VKhQgXp2rWre8y7oWsVmRc4ylGkSBHT7TJ79mw3CawaS5YsMWmwjXpnFnC+rhtmBEDfvn1F11szFjGkt7xQV1h9kBar4+jaX3LRRReZeujiqtKnTx/Ztm2bewnvebpemEmni2zKsWPH5KGHHjLXq1Spktx///3uOdhAWSdNmiQ9evQQXdvNrLj93//+101jV19v1qyZSQte/gC2qI/9S0pKEl1Hzt2HgNS16zItuz8/XeBV6tatKyg/uOP8kSNHykknnWQsZy1btgxo58mTJ5t75qOPPpLTTjvNXMcKSps37ouzzz7bnI/765xzzhFd084e5icJRCUBip2obBYWKtEI4KUGgfL000/Lpk2bTqj68+bNk82bN4uuBC26srt56etK9lK2bFn56quv5IYbbjB/GzduDLgOxJCugi66MrwRPb169RJdvNWkgUWhffv2Rph88803AnECgQCh4A2vvvqqFCpUSD7//HP517/+5T3kbj/55JPy6KOPyiOPPCK68Kd0795dcK21a9eaNLgWxBbKgm1YO8INEBleC85PP/0k//nPf2T69OlifZIgBn///XeZP3++zJkzR2BF0sVwAy6BuA8//NDU84033jDiUBeoNW2D82CFu/POO+XLL78MOO+uu+6SSy+9VL777jv5+9//Lrpqvaxevdqk+frrr83n3Llz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", "text/plain": [ "" ] @@ -647,7 +647,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAp4AAAHFCAYAAABb1/k6AAB6DklEQVR4Ae2dB5xVxfm/X6SDLIIgRQGxi2DFIIgIFtRYo4lYohj9WaKoRLFg4j9ojKiJJcaoKcYWWxJ7xIJREcSKhaISVFQQEEF6L+c/34lzc+7h7u7d5d7de+8+L5/lnjNnZs7MM3Nm3vNOOfUiJ4ZAAAIQgAAEIAABCEAgzwQ2yXP8RA8BCEAAAhCAAAQgAAFPAMWTigABCEAAAhCAAAQgUCMEUDxrBDM3gQAEIAABCEAAAhBA8aQOQAACEIAABCAAAQjUCAEUzxrBzE0gAAEIQAACEIAABFA8qQMQgAAEIAABCEAAAjVCAMWzRjBzEwhAAAIQgAAEIAABFE/qAAQgAAEIQAACEIBAjRBA8awRzNwEAhCAAAQgAAEIQKBKiuc999xj9erVS/01aNDAOnToYCeccIJNmzatWjRfeeUVH59+qyoffvihjRgxwj7//PMNgp522mm29dZbb+Be0w5Kx6abbprVbcVW+cmVKC7FOW/evFxFaaNGjcppGnOWsBxGFK/jOm7ZsqX179/fnnnmmRzepWajevDBB+2WW26p9KbJZzzJIpxn82yFuN55551K71vXPKg+6a8yEecjjjiiMm9ZXR8/frx/dhcuXJiV/2LwtGbNGttpp53suuuuSyU31DvV1Uz9ij7Wt9122/m2MZsySEWcxYHuqXa3qqI+TGGV9lKVupDHZNmpfumvOqJ6pDpRqPKf//zHGjVqZO+++26Vk7hJlUO4AHfffbe9/vrr9uKLL9qQIUPsqaeesr59+9qCBQuqE121w0jxvOqqqzIqnldeeaU9/vjj1Y67NgKK6f/93//Vxq2zvqcUTzEvdfnhD3/o6/hrr71mf/jDH2zOnDl25JFHFq3yma3iefjhh/t8qy6GP5V14BHciu3ZKvX6mk3+pHjq2S0lxfP222/3/c7555+/AYIWLVrYXXfdtYH7mDFj7NNPPzVdRyCQTwKqn/qrjkgXUHtbqLLDDjvYySefbD/72c+qnMQGVQ7hAnTv3t169uzpg0qbX7dunf3yl7+0J554wn7yk59UJ8qch9l2221zHme+I9xnn33yfQviz5JAu3btLJRHnz59rHfv3t5KIquhlLNMIuuL3lA1ElCs0rZtW9NfUuI8ktc4h0BtEFi7dq395je/sdNPP92aN2++QRIGDRpkDzzwgH9xLCsrS12XMqrnefHixSk3DiCQDwLdunWrdrRbbbWV6a8mZcWKFda0adOsbynDo3RBvdSqn8xWqmXxTEYelNCvv/467ZKG2I466ihr3bq1NWnSxPbYYw/7+9//nuYn04nCafhew0yCoN8TTzzRvvjii5R3DUn86Ec/8ucDBgzwHX58qCLTUPvKlStt+PDh1rVrV28i3nLLLe28887bwAKg+2l467nnnrM999zTp0HDOX/9619T99fB8uXLbdiwYT4+5U/5FIuHHnoozZ9OPvnkE/v+97/vh907depkF198sa1atSrNn9IfH6YJQ0ajR4/2Cr3iVwMry9tnn32WFraikxkzZtixxx5ranw1bPzjH//Yvvnmmw2CPPLII75B1j00PeCQQw6x9957L+VPTGX9kyit4U9DKCqLXXbZJeVXB0qn/PzjH/9IucssL7enn3465SZr4tlnn+0fMpnuVT6yzKhjicvq1avtmmuu8UNrjRs39gqSXnSSecm2/OJxV3asFxkpZKEOhiki999/vy9L1SWlSeUsUV3ZbbfdfL1Xuf3gBz+wjz76KO02YRrGxx9/7FmLu6auhGHDN954w48kyF1vl/fee29a+GzrR3/3cqhpAkp7KDP9boyMGzfODjzwQG81atasmW90spmKMHv2bNtrr71s++23T03PkQIQniOVv1gOHTrUli1blpZEpVkNnZjvvPPOpvuK8b/+9a80f6oPZ511luk5C/Vk33339SM0aR4TJyo71SelTXErHarDkyZNSvMZyl7P+c9//nPr2LGjf7YOOuggmzp1appfDevecMMN1qVLF18X1J48++yzaX429kTtw9FHH+2fH7VDGkbW8xSfYqN25ZJLLvG30vMV6kF8KLqy51+BQ53Npj1T+3b11Vf7slK6Nt98c1NbrU5KovqjdlWM4hKGwst7wQt+NdL21Vdf2SmnnBKc0n7VZ0ji7fGiRYvs0Ucf9cpqmufvTr799ls799xzfdmrLm6zzTa+jJNttersmWee6fOktvLQQw81DT1mEk1DO+mkk2yLLbbw9VF1N7SjmfxX1+3JJ5+0XXfd1d9D6f7d737n+5Pks55tP7h+/Xpfd1VGeo6U/lNPPdVmzpyZlkSV17XXXpuq4+oDVSfV7uivMskVH5WR+tX27dv757dfv342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BIqfQEEonlpY1Lp1a0/zueees+OOO8407H744YfbtGnTip8yOYAABCAAAQhAAAIQsIJQPDt16mSvv/66LVu2zKR4Dhw40BfNggULrEmTJhQTBCAAAQhAAAIQgEAJECiI7ZSGDh1qJ598sl/F3qVLF+vfv79HqyH4Hj16lABmsgABCEAAAhCAAAQgUBCKpzaJ79Wrl3355Zd28MEH2yab/NcQq68WMceTSgoBCEAAAhCAAARKg0BB7eNZGkj/mwv2ASul0iQvEIAABCBQVwjQf+e3pGttjud1111n2jA+G9GnNJ955plsvOIHAhCAAAQgAAEIQKBACdSa4qkvFHXu3Nl++tOf2rPPPmvffPNNCtHatWtt4sSJdvvtt1ufPn3shBNOsLKystR1DiAAAQhAAAIQgAAEio9Arc3xvO+++7xy+Yc//MEvLNKWSvXr1zd9oz1YQvfYYw8766yzbPDgwd69+PCSYghAAAIQgAAEIACBQKAg5nhGUeSV0M8//9z05aI2bdrY7rvv7n9DQovtlzkixVZipBcCEIAABCBgRv+d31pQaxbPeLbq1atnu+22m/+Lu3MMAQhAAAIQgAAEIFA6BGptjmfpICQnEIAABCAAAQhAAALZEEDxzIYSfiAAAQhAAAIQgAAENpoAiudGIyQCCEAAAhCAAAQgAIFsCKB4ZkMJPxCAAAQgAAEIQAACG02gIBTPe+65J7WF0kbniAggAAEIQAACEIAABAqSQEEonsOHD7f27dvbGWecYePHjy9IUCQKAhCAAAQgAAEIQGDjCBSE4jlz5kz729/+ZgsWLLABAwbYTjvtZNdff73NmTOnWrl79dVX7cgjj7SOHTuatmp64okn0uI57bTTvLuuhb999tknzc+qVavs/PPP93uJNm/e3I466ihTOhEIQAACEIAABCAAgeoRKAjFU18skmL32GOP2YwZM/zXih544AH/SU25P/nkk7Z+/fqsc7hs2TK/J+htt91WbphDDz3UZs+enfobNWpUmt+hQ4fa448/bg8//LCNGzfOli5dakcccYStW7cuzR8nEIAABCAAAQhAAALZESiIDeTjSd1iiy1s3333talTp9p//vMfmzRpkslCudlmm9ndd99t/fv3j3vPeHzYYYeZ/ioSfZpTw/uZRJ/vvOuuu+z++++3gw46yHuRRbZTp0724osv2iGHHJIp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A7YjSsPBCQQgAAEIQAACEChKAgWxuGj58uU2ZMgQv4J90003Nc39jP8VJVkSDQEIQAACEIAABCCQRqAgFM9LLrnEXnrpJbv99tutcePG9pe//MXP+ezYsaPdd999aQnmBAIQgAAEIAABCECgOAkUxFD7008/7RXM/v37+4VG++23n2233XbWpUsXe+CBB+zkk08uTrqkGgIQgAAEIAABCEAgRaAgLJ7ffvutaYGRRPM5dS7p27evvfrqq/6Y/yAAAQhAAAIQgAAEiptAQSie+lTm559/7kl269bN/v73v/tjWUI322wzf8x/EIAABCAAAQhAAALFTaAgFM+f/OQnpq8USYYPH56a6/mzn/3MNP8TgQAEIAABCEAAAhAofgIF8a32JMYvv/zS3nnnHdt2221tt912S14uinO+9VoUxUQiIQABCEAAAmkE6L/TcOT8pCAsnslcde7c2Y499lj/nXZ91QiBAAQgAAEIQAACECh+AgWpeAasWmR07733hlN+IQABCEAAAhCAAASKmEBBK55FzJWkQwACEIAABCAAAQgkCKB4JoBwCgEIQAACEIAABCCQHwIonvnhSqwQgAAEIAABCEAAAgkCtfrlIi0gqkgWLlxY0WWuQQACEIAABCAAAQgUEYFatXi2bNnSKvrTJzNPPfXUKuPU146OPPJI07fe69WrZ0888URaHFEU2YgRI/z1pk2bmj7VOWXKlDQ/q1atsvPPP9/atGljzZs3t6OOOspmzpyZ5ocTCEAAAhCAAAQgAIHsCdSqxfPuu+/OPqVV8Lls2TK//6c2pj/uuOM2CHnDDTfYTTfdZPfcc4/tsMMOds0119jBBx9sU6dOtRYtWnj/Q4cONX056eGHH7bNN9/cLr74YjviiCNswoQJVr9+/Q3ixAECEIAABCAAAQhAoGICBbmBfMVJrtpVWTwff/xxO+aYY3xAWTtlCZViedlll3k3WTfbtWtn119/vZ199tm2aNEia9u2rd1///02aNAg72fWrFnWqVMnGzVqlB1yyCHeraL/2IC2IjpcgwAEIAABCBQmAfrv/JZLrQ615zdrmWOfPn26zZkzxwYOHJjy0LhxY9t///1t/Pjx3k1WzTVr1qT5kbLavXv3lJ9U4O8OpLyqssb/kn44hwAEIAABCEAAAnWZQJ1TPKV0SmThjIvOwzX9NmrUyFq1ahX34sME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pC7mWWVLvqnjpf6MU8ep46Vex8lfOgEWF6Xz4AwCEIAABCAAAQhAIE8EsHjmCSzRQgACEIAABCAAAQikE0DxTOfBGQQgAAEIQAACEIBAngigeOYJLNFCAAIQgAAEIAABCKQTQPFM58EZBCAAAQhAAAIQgECeCKB45glsvqK9/fbbrWvXrtakSRPba6+9bOzYsfm61UbFO2LECP/FJn21Kfy1b98+Fae+DCE/+jJE06ZNrX///jZlypTUdR2sWrXKzj//fGvTpo01b97cjjrqKJs5c2aanwULFtgpp5ziP2umDX91vHDhwjQ/X375pR155JE+DsV1wQUX2OrVq9P8VPfk1Vdf9XErH8rnE088kRZVoeVz0qRJtv/++3vmW265pV199dVWne8RV5bv0047LVXuofz32WefNDY1Wb65yPfIkSNt77339l8j22KLLeyYY46xqVOnpuWp1Mo7mzyXYlnfcccdtuuuu6Y+3NC7d2979tlnU2VdauUcMlZZvkuxrEPe+a1BAu4BQoqEwMMPPxw1bNgw+vOf/xx9+OGH0YUXXhg5hSz64osvCi4HbrunaJdddolmz56d+ps7d24qndddd13kPicaPfroo5FTCqJBgwZFHTp0iNzn81J+zjnnnMgpR9Ho0aOjd999NxowYEC02267RWvXrk35OfTQQ6Pu3btH48eP9386PuKII1LX5VduCqs4FJdTEqMhQ4ak/GzMwahRo6Kf//znPh/usY0ef/zxtOgKKZ+LFi2K2rVrF51wwgmeudirDH7729+mpTmbk8ryPXjw4EhlEy//+fPnp0VdU+Wbq3wfcsgh0d133x1Nnjw5ev/996PDDz886ty5c7R06dJUvkqtvLPJcymW9VNPPRU988wzkXux8H9XXHGFb3tV9pJSK+dQgSvLdymWdcg7vzVHQNYOpEgIfO9734vUWcdlp512ii6//PK4U0EcS/GUkphJ3HfsI2f99I13uL5y5crIWSyjO++80zs5q6Vv6KVsB/nqq68i9ynS6LnnnvNOUr6l7L3xxhvBS/T66697t48//ti7SUFSGIUN8tBDD0Vu78BICkkuJal4Flo+nbXcMxbrIM6i5RVxpbW6ksy34lEHdfTRR5cbZU2Wb77yrRcp5X3MmDE+n3WhvJN5VsbrQlkrn61atYr+8pe/RHWhnJXfICHfOq8rZR3yzm9+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fvqp9e3b19xnZ23zzTcvN55DDz3U3PfY7bPPPrNrrrnGbr/9dq98ZgqwZs2aTM4F5SbFWfkJf1tttZVdffXVqXO5d+rUqaDSTGIgAIHSJIDiWZrlSq4g4AkcdNBB5r7JbiNHjiyXSKZh1FtuucW23nrrVBhZAY855hi79tprrV27drbZZpvZVVddZWvXrrVLLrnEWrdubVJm/vrXv6bChAMNb/fp08cPb++yyy72yiuvhEv+98MPP7Tvf//7tummm/q4TznlFJs3b17KT//+/W3IkCF20UUXWZs2bezggw9OXYsfuO9ne2VK6WjcuLEfGn7uuedSXmTtmzBhgvejY+W7PFF4cZMydtJJJ9nJJ59sshRLAi/lVdZQ+dWXh9236O3oo4/2+SgrK7Pjjz/evv76ax8mGc59v977++lPf2rr1q2zG264wd9viy22sF//+tepMDpQWu+44w477LDDrGnTpta1a1f7xz/+kfKjc8kee+zh/YpXUsRW+Ql/9evXtxYtWqTOpcwfe+yx5aY9Gd/06dNtu+22M6Vf3BX+0ksvtS233NJblHv16pVWzvfcc4+vM88//7ztvPPO/j5BuQ9xq15873vf8+FVv/bdd1/74osvwmV+IQCBEiGA4lkiBUk2IJCJgBQMKYu///3vbebMmZm8ZO320ksv2axZs+zVV1+1m266yStgRxxxhLVq1crefPNNO+ecc/zfjBkz0uKUYnrxxRfbe++95xXQo446yubPn+/9yNK2//77eyXxnXfeMSmKUtaktMXl3nvvtQYNGthrr71mf/zjH+OXUse/+93v7MYbb7Tf/va3NnHiRDvkkENM95o2bZr3o3tJ8VVadCwrYLYihS9u2fzkk0/s73//uz366KOpOaxSzL/99lsbM2aMjR492mRdHTRoUNot5Pbss8/6fD700ENeUT/88MN92SicrNO/+MUv7I033kgLd+WVV9pxxx1nH3zwgf34xz+2E0880T766CPv56233vK/L774os/XY489lha2shMpzdmkPcQzefJkrxT+6Ec/8grxJptsYj/5yU982Tz88MOeva5JsQzsFXb58uW+bO6//35fh6SohzLQC4zSoLqgsnv99dftrLPO8op0uC+/EIBAiRBwjQ4CAQiUIIHBgwdHzgLnc+YW1ESnn366P3788ccj13ylcuzmPUa77bZb6lwH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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAp4AAAHFCAYAAABb1/k6AAB6DklEQVR4Ae2dB5xVxfm/X6SDLIIgRQGxi2DFIIgIFtRYo4lYohj9WaKoRLFg4j9ojKiJJcaoKcYWWxJ7xIJREcSKhaISVFQQEEF6L+c/34lzc+7h7u7d5d7de+8+L5/lnjNnZs7MM3Nm3vNOOfUiJ4ZAAAIQgAAEIAABCEAgzwQ2yXP8RA8BCEAAAhCAAAQgAAFPAMWTigABCEAAAhCAAAQgUCMEUDxrBDM3gQAEIAABCEAAAhBA8aQOQAACEIAABCAAAQjUCAEUzxrBzE0gAAEIQAACEIAABFA8qQMQgAAEIAABCEAAAjVCAMWzRjBzEwhAAAIQgAAEIAABFE/qAAQgAAEIQAACEIBAjRBA8awRzNwEAhCAAAQgAAEIQKBKiuc999xj9erVS/01aNDAOnToYCeccIJNmzatWjRfeeUVH59+qyoffvihjRgxwj7//PMNgp522mm29dZbb+Be0w5Kx6abbprVbcVW+cmVKC7FOW/evFxFaaNGjcppGnOWsBxGFK/jOm7ZsqX179/fnnnmmRzepWajevDBB+2WW26p9KbJZzzJIpxn82yFuN55551K71vXPKg+6a8yEecjjjiiMm9ZXR8/frx/dhcuXJiV/2LwtGbNGttpp53suuuuSyU31DvV1Uz9ij7Wt9122/m2MZsySEWcxYHuqXa3qqI+TGGV9lKVupDHZNmpfumvOqJ6pDpRqPKf//zHGjVqZO+++26Vk7hJlUO4AHfffbe9/vrr9uKLL9qQIUPsqaeesr59+9qCBQuqE121w0jxvOqqqzIqnldeeaU9/vjj1Y67NgKK6f/93//Vxq2zvqcUTzEvdfnhD3/o6/hrr71mf/jDH2zOnDl25JFHFq3yma3iefjhh/t8qy6GP5V14BHciu3ZKvX6mk3+pHjq2S0lxfP222/3/c7555+/AYIWLVrYXXfdtYH7mDFj7NNPPzVdRyCQTwKqn/qrjkgXUHtbqLLDDjvYySefbD/72c+qnMQGVQ7hAnTv3t169uzpg0qbX7dunf3yl7+0J554wn7yk59UJ8qch9l2221zHme+I9xnn33yfQviz5JAu3btLJRHnz59rHfv3t5KIquhlLNMIuuL3lA1ElCs0rZtW9NfUuI8ktc4h0BtEFi7dq395je/sdNPP92aN2++QRIGDRpkDzzwgH9xLCsrS12XMqrnefHixSk3DiCQDwLdunWrdrRbbbWV6a8mZcWKFda0adOsbynDo3RBvdSqn8xWqmXxTEYelNCvv/467ZKG2I466ihr3bq1NWnSxPbYYw/7+9//nuYn04nCafhew0yCoN8TTzzRvvjii5R3DUn86Ec/8ucDBgzwHX58qCLTUPvKlStt+PDh1rVrV28i3nLLLe28887bwAKg+2l467nnnrM999zTp0HDOX/9619T99fB8uXLbdiwYT4+5U/5FIuHHnoozZ9OPvnkE/v+97/vh907depkF198sa1atSrNn9IfH6YJQ0ajR4/2Cr3iVwMry9tnn32WFraikxkzZtixxx5ranw1bPzjH//Yvvnmmw2CPPLII75B1j00PeCQQw6x9957L+VPTGX9kyit4U9DKCqLXXbZJeVXB0qn/PzjH/9IucssL7enn3465SZr4tlnn+0fMpnuVT6yzKhjicvq1avtmmuu8UNrjRs39gqSXnSSecm2/OJxV3asFxkpZKEOhiki999/vy9L1SWlSeUsUV3ZbbfdfL1Xuf3gBz+wjz76KO02YRrGxx9/7FmLu6auhGHDN954w48kyF1vl/fee29a+GzrR3/3cqhpAkp7KDP9boyMGzfODjzwQG81atasmW90spmKMHv2bNtrr71s++23T03PkQIQniOVv1gOHTrUli1blpZEpVkNnZjvvPPOpvuK8b/+9a80f6oPZ511luk5C/Vk33339SM0aR4TJyo71SelTXErHarDkyZNSvMZyl7P+c9//nPr2LGjf7YOOuggmzp1appfDevecMMN1qVLF18X1J48++yzaX429kTtw9FHH+2fH7VDGkbW8xSfYqN25ZJLLvG30vMV6kF8KLqy51+BQ53Npj1T+3b11Vf7slK6Nt98c1NbrU5KovqjdlWM4hKGwst7wQt+NdL21Vdf2SmnnBKc0n7VZ0ji7fGiRYvs0Ucf9cpqmufvTr799ls799xzfdmrLm6zzTa+jJNttersmWee6fOktvLQQw81DT1mEk1DO+mkk2yLLbbw9VF1N7SjmfxX1+3JJ5+0XXfd1d9D6f7d737n+5Pks55tP7h+/Xpfd1VGeo6U/lNPPdVmzpyZlkSV17XXXpuq4+oDVSfV7uivMskVH5WR+tX27dv757dfv342YcIErz+o3sYlmz4nTA3Qy83111/v45E+ojyprGVouPzyy/3zr35VbfzcuXPjt/F+4wxCnL/97W/tpptu8n2d6o9ehNTex0XPbLLs4tczHYcw6rcr6/NDP/nYY4953UzPaBjNnDx5sm9TWrVq5dut3XfffYP+R/dXW676fOedd2ZKTvlurtJkLW6IXS1E9Pbbb6eFue2227y7e6BT7i+99FLkHtxov/32i1yDFjklLnKF7/0pniAvv/yyd9NvEKeoRP/v//2/yA3nRW5YJHr44Yej/fffP3Idf+Q6Fe/NFXDkKrsP6x7iyJmk/Z/cJYMHD45cY++P9Z97iCKnSEXOGhW5YfjohRdeiFzhR65Tj5xCHLmHMeVX4dybRuTeVqL77rsvev755yOnWPl7KT1BXOMeuQ4qchUoUvpdBxg5pSH6/e9/H7z4dIiDKxx/Pzc9wefNVajIFXLKnw7E1lmOU26Bt+tAI/dWH7kOK/rTn/4UuQYgkpub2pDym+lAcSlO5cd1Oj4fSmvIs1PkUsF+/etfR0qT7qN8uMoYuYfB+50yZYr35zqbyA25+jgDb/2Knat43n3WrFner3soIzeUFbkHNXINdOo+7gH2ZeAabu/mFBGfF6Xxj3/8YyQ+v/rVryLX0Pn6EgI6q3rkGnefHnFzDVv0l7/8JXLKgS8n9xIQvPr8ZlN+qQCJAzFzLyRprq5DijbZZJPIvdV5d5W3/On+YuI6Qc9t/vz5qXrpOr7IKWO+DrmOIHKNU+QarFS8qqOhbrhOwufJKT4+XveCFDllM3LWGV9u7kXIu7uXslT4bOuHys8pXpFrkFPPicotW0nycMpK1LBhw8g1Ov7ZdiMd0cCBA3390bMaJKQvtBdOgfNlrXoVnmOnXEauUYvatGnjnyOVv1iI1QEHHOCf2xCf0uEay+h73/te5F5gIzftI3KNuq9Pbug0ePPPudoKPStKq9Kn9iSetpTn2IGebddxRf/85z99u6P255hjjvF12L0cpHyGslda3FCTL2On3ESdO3eOnNIauRemlN/wDJ5xxhmp51d1RmWhNq0y0XPhFLAKvd1xxx3RyJEjfR1UHtwLSuQU8mjHHXeMwjPuXj4jNxzt65Ce7fD8OkXMx53N8y+P8Tqr9rO89kzPv1Myfdm4lwpfVnpGrrjiikisJE5R8unRsxwXPTMqa/1WJGqr1BYmJV7vnFLq60vwI1Zq/9T+uBfltDJw1p7IKW7+uvKmPkJ9hfoMZzQIUfg6qbypjRI3+VM56xlXunUcRM+e6nKPHj18OyC/qmNqS5ySELxF06dP92GV9rgovmzqifoGxannQfVWfWivXr3886I4glSlH3Qvbz5N7mXP999q4/Vcqe8Jz6/iVVule8i/+vk///nP/llwL9Fpac+Ux2z5hPRX9Kv2VgycMujLxI1O+bSKv+ptkGz7nJBePYPuBdS373/7298iN/rj22bVrdAvi41TIL2/cB/9quz0FyTEqbZD/ZnaJv2pfjglL3LTYIJXX4/iZZe6UMGB6p7CKM2V9fnyozJSvXWGkkjt2ltvvRWprVPf7Ywtvs7qORRbxav+Oyk//elPffutupWt/K9GZhEiPNBOM4/UsCxZssRXNDWi7u3Cu4Vo3FuSV+jkLy7qQJVZKRISZVYZ0m95ooZ86dKlvkFQpxRED1d5YVXRBDaIHgj5ddaH4OR/pRTLXZ1UEIVz2n/kLETBKVKj5CxXkZTNIG7Kge+YwnmmX6VD8aujjIsaMnUMcZE/VZwggbd7kwpO/tfNO/RxOutfmnvyJFRCNwcj7ZIbfvLh9RBJvvzyS9+4qmOKi8pXZXv88cennKWQKZ1JkVIqdynqEmcR8+eXXnpp5CwsKe8HH3xwSnmTo3jqgY2zlrsafsUXlF51VjqPv9zIn5Qaubt5NDr1km35Bf/JX8XnrB6+PqvjdpbK6LDDDvP30UuOJNRb1fu46GVAyna8o9J1MVZH5SwfKe+hbsTzpOdFjbvS4KzDKb9SaOvXrx9ddNFFKbeq1A8pL/HnIRVJFgdKS1wRd1MQfIev+hFEz6ieByn8oQEK6VMZSblwFnevpOtZCiKFSZ1FUE6Du5Q/3VfKZRCdq9EPLy1yd5YLH17xBFF9chbTcFrtX+VJ5S9lMv4MhbJPlrGecaUxKPWqC2pHynt+4x1SeYlUmVWmeMbDir3qkJ4npUXKXRBnufFu6vziUpXnP9TZytoztQO6v5SQ8kR9gDo9Z61N86JnTZ1eqEdpF2MneplX552UeL0LZeUsON7b3nvvnXqhTSqe4eU5mTd1tsqLlEaJlDydx/siuUsJlXu8DZexQ89EUPDlTyJlTnVDL7SSoJAo7XHRM68XsMpE+ZJC6Kx+Ka96Pp2V2acpOGbbD6rNU17UDsblzTff9O56gZAo/WrX3LSGuDf/DCh8vI5nymO2fNIiz3CifkL3u+yyy9Kuhn5D9TZItn1OSK9e4oK+ojik0OpebjQ3ROl/1ebIPV7Wyn8mBlI04y+oUvgUNryUKULVI7lVRUKYeHul8Mk+X25qW1S/3CiNTlPiRpt9mapdiIueSxna4sqxrusZVzpVZ7KVag21a+6bs3j4YTYNMcgcKzN/mNumYRgNH2riqcQBTv25xto03JYckvIev/vPKZnmKpAfMlKc+pM5WkNvyeHKeLiKjp0F1l9Omtw1RKyhzH//+99pwWVadhaMlJvM0Bru1HBlEGd58cNmMrdryErzIzKJzOUasouLhkTiccWvJY8Dx+CuuRSu0phrVINThb/J8E6R9ExDeGfR9eWjYZR4WSnP7qHxeavwBu6ihqLdW1xqOFNDLe7h8sP67gH2k/k1FKIhWg1JBtEwqYbfNFwZv7er5N6Ls+D4X/nbbLPNPMe4P5WTU443SGM25RfSkOlXE8JVxzXcpqEEDQ9q2FDDcHE57rjj4qd+MrjqQbKeuU7BXAeyQT1T3dAzEUR1XUOlGnLX1JQgGq7XUFemOpMs36rWj3CPbH71DLrOxy820jMZxDVgfshTw3DJZ1tTBJRHTZZ3nbofugnhVK6aM67yiperpnmIzSvuuYqL6kp8UYjmnia56LnUNARNy9DwlVPE4lGUe6z7a8hQ87JU7ioL/WooMFO7o2lEcdEzLQll5BRQ07BmeeUTD7sxxxreO+ecc/zUAqVZ9VbtgyRTupP3qurzn017pukEaj+cRSh5u9S5e+HwUydUB1wn59216McpR/45030qEje64su+Ij9qv9Q2aeqLpky4F5xy06Q+Qn2BFtLFJTzLoY8I7WayXDWcHheVvcJoCFZTN+L1W8+DrieHV+Phdaww4b7Ja+Fcz6SmpznrvK+vwV3PZ7LfybYfDHkMeQ9x6tlSexjSpPSrXVefEhfpCOoPKpJc8Anxh34imQ6VpZ6JuGTb54QwKivV1SDKvyQ5FSS4h7oc/Gf6VVi1mUGSbUdwr+5vsm4m+/wQr+4rvSYuqiOaBqM+Ky6qC5peqHYtLmp/JZr2kq2kl0iWodzbrK987o3KNC/IDZH6OZhqbCRhrqfmbekvk8TnHyWv6wFWxdbKdPcm5+dPhQ66POUuGUfy3FmMfAV01qS0S4pXiouux0XzkZLi3uzSlMtbb73Vz6sSA80BUUOrDlNzQjRPLIgaHV2Li+LSg5eNKH1JyZTmpJ9wngyvB1H5C3kO5SXWmST+0GW6HtxUWdVpSNwQnDnrplc+pRzoXExUfnHFU/fWfE91lpkk1BP5c29aaQ1r3H/wF9yyKb/gN9OvHlTNiVP9kKKjziveUIQwUhDjEpgm3eVHyrUU8rhkqhtSdqRoJkXumepMsnwVrir1I3mfis6dFU+v4F4xTvpT/iSBQbjuhrj9PGkpnkllQuWqF9XKyj/ElU256nmU0ummYvg2RB2wOn/NtczEKsTtrMl+7p1eeqWw6IVadV/pztTuJNOiZ1oS/AYOme6ZyS2koyq/zipobpqDSQlTe6mXPSlPclfnH9JSUZxVff4z1dlke6Z5tqoPlbUdUkzdNAg/R0xKv+Y+ah5dRQpryIvylmxXw7Xwq/qmebtqq/XsqJN107/C5bRflZfKJVlH1bGqzQzlqd/QhsYjSJap/ElxdFOv/F/cbzhOtlvBvSq/4ZlUO5uUpFtIe2X9YMhree1YeLkK/pL3UToyucXTl0s+5aUjUzll2+eEtCbbYrXDkvLcM7XRIa7wW1nbEfxV9zdZFwOHwCnEm6l85SeTe3nte3gGs2lrwn2rpXhKsw8LimSBcGZo38i74TH/tujma/n4tZBHE1wziRtmzuRsmvytNxJnMvYTd4MnvVVp4nd1RQWtRkANYvyhUyeqicblKV0V3U8NvCbj6k+VWYq3rJ96y5TFN1ei9CVFbrKMZSPyq4USQcRBlStU/lBeKr9gKQl+q/IrxVMrRt2wgbeK/eIXv/DBZemTwqXGSkqAOsQgurfeutwwVXBK+w2VXf6U3qDYpnlyJ3ErWPJadc5VR0Idryh8spMKTGXVT4qUg8A6eW1jzje2flTl3kEZKy9/iiuZR60sllIkZc4NV3rrZrin/ErRSC7ci18Px9n+Kk7tPqA/WR+0CEXPpSyD5dUfxe2mnvjFE1KA4iLlQNb2qkqoC+WVT2UWoWzup0UAH3zwgbfwuuHEVBAp89lKKK+Nff7j99Pzo9ENKcAVKZ9u/p0p3XpJkJHCDTX7hTjZ8Fa6s+kTZKkJym157YzSrvKSNV99Qvy5Vr1Rmxk4yV+yDVX4ZDnrWQkjAVrEmkm00GtjRfdResMLRDy+ZJpC2ivrB0Pd1XPupgrEo/QvOXEWuljevSuq47nkE9KrdGTq6+IZUNqz6XPiYYrtWOWeiUPgFPITr+fBTX6q0r6HZzDUiRBPRb//sx9X5KuSa7IkqBLp4VZDI6VS1i01iOq8M/2VpygIhB78YD0It1bDJAU3LsFPNpq2lCKJOpe4aIWjhirC9fi1qhzr7U4NnFZSaqhRJulciTruuGjYV0pc//79487lHifDa7hTDWcILyut3og0zJWprOIKWEXMxVDlJyVDnY1WFUpk4dTQjZRPucWtW9o9QJ2nLIqZ7h0UT/mTsqw6kMlfeS8y5ULJ0wWtTpQilaxnGoIOQxi5vnWyfDPVD5VbNs9JZWnTy5ZbtGBaCRmPT8+98qxOKjl0I8uALN56YdWLanx4UeWqeqfGLlO5VtRxVZZWXdd0Ga2El/W9so2OVXdD/Q5xu4n1VRpCCuH0qxcsWQPKK5+43+oeh44jmW6NQiUl+ImXm/xU5flPxlneuabKyPKjKQ+VyQUXXOBX4GtYVKMaKq9sRKutVXcqE3XAGr2QQSCunCfDqf3SNC+32CPtkkb4JKGPUB2WJMtVe+XGRZZh+dUKYyk6mep3UhGIh8/2WM+k4la63ZzkVDDlRUacuIQ8JNunZD8oY4Ek6U9TFTR9I8SjtkD1SqMMcdEzHqyicff4cS75hL4mmQ69TKmvi0u2fU48TLEdJ+tmss+vKD8qW/VVMpTERc+ByixuONJ17bCj/r4qfXCDeMTVPZbSKeumW0hievi0XY8aPjU+atSkkOnhl2asSqsOIL7FTvy+2vJHlUjD1dKg1fFo/oYsacm3YM0Nk7iFQd7ipUZeb5CZHmZ1PEqLhtG0FYa2V5k4caK3rGouXXlbcsTTljzWQ6dKrEZFDJQ3bfUi5UMFlCvR/B0N92k+qrZG0hYu4pmcb1je/aQkSLEUAzcJ2yuG2oYmzIcRY81fVLyqRGHert4eZb0Mll3Fr6E8iaYWqHz1Rq/8a/hBQ1IqE1m11OAGBlI8Vfb60xYScdF9pZBqXqI6IFVedVjadkKb1bsJ/16Z0fZaepg03+bCCy80zTWSAiuFTkqttpPRcGpti+qoFG83+d5bz/QiIoVZVnHVT1nycy3Z1A+Vm+qBW9Xrt8BQQ6HOqjriFvL4uqQylpVKZa85sXqBcJPj06xFIX69aMraqBEQ1UNZIRVe2yap09Mzr42IVZekxMpSqXqk7VH0nGUrGjFRvJquI8VE91VnGe5dUTx6lqUoKZzSoa1Y1A4lLT4VxRG/pjZBfDTsH39+R4wYUeGQfzwOHct6oQ40KXpu9RzrpU0WXb2wS8nX1JXklA6FDc+uWxTjFTA9P3reqvL8J9NQ3rnqvayXmnuqF3GVicpVFkW9gOh5DqIXFbU5GjHSh0iUp2xEL85qP/SSH9qa8sKFLcrKuy53zXHXUL+UU7U/4iWrrSzganfCFCFNbVB9VX8no4WeI31oQm1/UsRaedLwvlv961lripos0iqnMOcyGS6cq93WSEGYUxnck7/ioHmD6uPUPuoFXXVXI0zBIqUw2faDqhfakkzTBNRWqK0XE7VtmvunZ1Wi+qYpKmoTVN/VBqtNVnun4VqFrUg2lk+IW1v5qc7deOONvk+S4qy+TueyqsfTkW2fE+Iuxt/K+vyK8qQ+KsyDlTFRZay+Vy/hMjKKZ1z0kqE5+ir/rMU1VllLfLVgMpB7i95gOxFn8fQrop1C4rdfcfMO/Ao9rR4M4pSGyCU20m8QV3Ejt2jDby/gOg6/clGrEt0wcOQaheDN/7rhNL9q2ilAPp6wKlD+5D8uSqNWvcndNbp+db22AtDq07joeqaVpK4BiPQXxDX2kWt0fDrdW59foanVZG5oLnjx6XWKW+o8HITVZ+Fcv+Ig9yCBt1ZTausGp9SkVky7BQ/BW7m/4R6uA/XbPLhGyG+T4B7QyCmVG4Rzb8x+CxStPlZ+xEFbBWnLlCBaNek6Ub/y2llbfJq1+i+I8q98aIVnXLQyWO5O2Y87+2NtzeGUTl+OKhdX0f1WPU4R9rsZhABaravV7q5j8itClR/tnqBVinEe2ZZfiDf5q3TGV3Enr+s81FvtrJBJtNWTU178dknazkMrd8MK/eBfdTRT3VAd04rbpCTzVZX64TofX5aqQ6HckvGXd56Jx9ixY/2zrPRrFb97C45cR5oWRUhffMW66o+ebaeEp7bL0Y4VblqG3+XBKbGReLlO368kd0pXKs5M6dBFcRFLiXtpiZyy49mrHittrhP1z5VTEryf8v5TO6Btj9ReOUUmcgpDpHyqPPQXpLyyD6tgQxsk/07Z8lsdacWx8qY6IU7JOEPcyV/lTfnO9Bfy7L7gFjmFwj/brvH3W785xd2Hibcniltb37hRBL8TgOJUXoJk8/yXV2dDWxPi0q/aW9dx+V0BlHdnEPB1xlnk4978sVP4fXor2/IqHtApb74uJ1ehZ6p38XDhOLmqXe7uJdHXH6c0+Z0+xF/MVK/i4iyzfisdPU+qK+KvbWjENMlc9ULb7jhjge933DQEv7NHfFeSTHVH91N88boXT0PyWNso6bkRa23tpa391K6qTsQl237QKa9++xz3YuDT7QxBkTMqRdqaKy6q48qLVu+HOu4UF99OO0U05bW8PGbDJxVJBQcqI+36oedX7YvaJO0wofZE/VJcsulzQnqdAh8P6p8ZlUuy7c9U75LPeXlx6gbJupPpmUpLSIaTECabPl91O5Oeo2i19Z0bIfDsVKbqc+PtWri1dk5Q/XcKfnDK6ldvyUiBEshUkQs0qSSrFghQP2oBOrfMCwFnCfcKcdh3NNubOCt1xi2Vsg1fyv7EUntRSymuaXEjZ14JTRogajodYetBZ7Gr6VvXyv2C4inFuiZEBhYZH2TYqIrkZKjdaeoIBCAAAQhAIGsCWjCqaVeazuOsdX4ajob/qyIa4tVUKU2nqM4C0arcq9D9Omu9H0rXELemZ2iakqZ/aTg7n6K1HJpio+lSmiqnqRUaktWx0lRToukl2upHX9PRPHulS1MstN6kvEXONZW2UryP5s5qyp2mWVZpmN3BQPEsxRpBniAAAQgUOAGtnA3KipsuY+4DFlVOseaUO8v/BivKqxxRCQTQ3FHNKdaKdSnw+jyr5smHuan5yqKzePl9RLUOQ4vD3NC2af6tdhCobEulbNKk+arOmlauVy2w01oDKbqaF67dLMRCa0Q0N1UvJ5pfX8yi+dH6q0g0H7gmRetNtJ5H8/CrKvVkHq1qIPxDAAIQgAAEIACBfBPQ4reKVsi7eZT2yiuv5DsZtRq/FiRqwVZF4uaP+sVrFfkplGsonoVSEqQDAhCAAAQgAIE0AvrilKZllCfauUKr8EtZtLVRcnujZH61E4dbCJR0LshzFM+CLBYSBQEIQAACEIAABEqPQMWbbJVefskRBCAAAQhAAAIQgEAtEajZ2ai1lMnauK0mAss0rmEATX5GIAABCEAAAhAofAJa+qIFSvpyXnzz+cJPeXGkEMUzT+UkpVNfeEAgAAEIQAACECg+Alq5Xd0vlxVfbmsuxSieeWItS6dEFVfbPCAQgAAEIAABCBQ+AX1WW4aj0I8XfoqLK4UonnkqrzC8LqUTxTNPkIkWAhCAAAQgkCcCoR/PU/R1NloWF9XZoifjEIAABCAAAQhAoGYJoHjWLG/uBgEIQAACEIAABOosARTPOlv0ZBwCEIAABCAAAQjULAEUz5rlzd0gAAEIQAACEIBAnSWA4llni56MQwACEIAABCAAgZolgOJZs7y5GwQgAAEIQAACEKizBFA862zRk3EIQAACEIAABCBQswRQPGuWN3eDAAQgAAEIQAACdZYAimedLXoyDgEIQAACEIAABGqWAIpnzfLmbhCAAAQgAAEIQKDOEuCTmXW26Mk4BCAAAQhAoDgJLFq+2uYtXW2LV66xsqYNrU3zRtayWaPizEwdSzWKZx0rcLILAQhAAAIQKGYCsxausMv+OdHGfjIvlY1+27ex647b1Tpu1jTlxkFhEmCovTDLhVRBAAIQgAAEIJAgIEtnUumUl1enzbPLHp1ouo4UNgEUz8IuH1IHAQhAAAIQgMB3BOYuWZVm6YyDGeuUT11HCpsAimdhlw+pgwAEIAABCEDgOwILV6ypkMWiSq5XGJiLNUIAxbNGMHMTCEAAAhCAAAQ2lkDzRvUrjKJZJdcrDMzFGiGA4lkjmLkJBCAAAQhAAAIbS6B5owa273abZ4xG7rqOFDYBFM/CLh9SBwEIQAACEIDAdwQ2a9bQzj9g+w2UTymdctd1pLAJ8GpQ2OVD6iAAAQhAAAIQ+I6A9urs0rqZHbFrRzt93662au16a9xgE7+oaGvnzl6ehV9VUDwLv4xIIQQgAAEIQAAC3xHo4Pbq/H739n4D+SVuA/kWTRpazy6tUDqLpIageBZJQZFMCEAAAhCAAAT+S0CWTaybxVkbmONZnOVGqiEAAQhAAAIQgEDREUDxLLoiI8EQgAAEIAABCECgOAmgeBZnuZFqCEAAAhCAAAQgUHQEUDyLrshIMAQgAAEIQAACEChOAiiexVlupBoCEIAABCAAAQgUHQEUz6IrMhIMAQhAAAIQgAAEipMAimdxlhuphgAEIAABCEAAAkVHAMWz6IqMBEMAAhCAAAQgAIHiJIDiWZzlRqohAAEIQAACEIBA0RFA8Sy6IiPBEIAABCAAAQhAoDgJoHgWZ7mRaghAAAIQgAAEIFB0BFA8i67ISDAEIAABCEAAAhAoTgIonsVZbqQaAhCAAAQgAAEIFB0BFM+iKzISDAEIQAACEIAABIqTAIpncZYbqYYABCAAAQhAAAJFRwDFs+iKjARDAAIQgAAEIACB4iSA4lmc5UaqIQABCEAAAhCAQNERQPEsuiIjwRCAAAQgAAEIQKA4CaB4Fme5kWoIQAACEIAABCBQdARQPIuuyEgwBCAAAQhAAAIQKE4CJad43nHHHbbrrrtaWVmZ/+vdu7c9++yzqdKJoshGjBhhHTt2tKZNm1r//v1typQpqes6WLVqlZ1//vnWpk0ba968uR111FE2c+bMND+cQAACEIAABCAAAQhUjUDJKZ5bbbWVXXfddfbOO+/4vwMOOMCOPvrolHJ5ww032E033WS33Xabvf3229a+fXs7+OCDbcmSJSlyQ4cOtccff9wefvhhGzdunC1dutSOOOIIW7duXcoPBxCAAAQgAAEIQAACVSNQz1kAo6oFKT7frVu3tt/85jd2+umne0unFMvLLrvMZ0TWzXbt2tn1119vZ599ti1atMjatm1r999/vw0aNMj7mTVrlnXq1MlGjRplhxxySFYAFi9ebC1btvTxyfqKQAACEIAABCBQ+ATov/NbRiVn8YzjkoVSVstly5aZhtynT59uc+bMsYEDB6a8NW7c2Pbff38bP368d5swYYKtWbMmzY+G5bt3757ykwrMAQQgAAEIQAACEIBA1gQaZO2ziDxOmjTJK5orV660TTfd1A+bd+vWLaU4ysIZF51/8cUX3kmKaaNGjaxVq1ZxL94qqmvliSyn+guiNyakeAgsWr7a5i1dbYtXrrGypg2tTfNG1rJZo+LJACmFAAQgAAEIFAGBklQ8d9xxR3v//fdt4cKF9uijj9rgwYNtzJgxqeKoV69e6lgHmm2QdEvzkIWfkSNH2lVXXZUMxnkREJi1cIVd9s+JNvaTeanU9tu+jV133K7WcbOmKTcOIAABCEAAAhDYOAIlOdQui+V2221nPXv2NCmEu+22m/3ud7/zC4mEK2m5nDt3rrdo6poWG61evdoWLFig05TE/aQcYwfDhw/38zk1R1R/M2bMiF3lsFAJyNKZVDqV1lenzbPLHp1ouo5AAAIQgAAEIJAbAiWpeCbRyKKpYfCuXbt6xXL06NEpL1IyZQ3t06ePd9trr72sYcOGFvcze/Zsmzx5cspPKnDsQHNFwxZO4Td2mcMCJTB3yao0S2c8mWOd8qnrCAQgAAEIQAACuSFQckPtV1xxhR122GF+Fbq2SNLioldeecWee+45P5yuFe3XXnutbb/99v5Px82aNbOTTjrJE9VK9DPOOMMuvvhi23zzzU0r4ocNG2Y9evSwgw46KDfUiaVgCCxcsabCtCyq5HqFgbkIAQhAAAIQgEAagZJTPL/++ms75ZRTTFZKKZHaTF5Kp/bqlFx66aW2YsUKO/fcc/1weq9eveyFF16wFi1apMDcfPPN1qBBAzv++OO93wMPPNDuueceq1+/fsoPB6VBoHmjisu0WSXXS4MCuYAABCAAAQjUDIE6sY9nzaBMvwv7gKXzKNSzL+YtsyuemGSvfTJ/gyTuu93mdu0xPaxLm+YbXMMBAhCAAARKkwD9d37LtU7M8cwvQmIvZgKbNWto5x+wvUnJjIvO5a7rCAQgAAEIQAACuSFQckPtucFCLHWFgPbq7NK6mR2xa0c7fd+utmrtemvcYBO/qGhr585ennWlJpBPCEAAAhCoCQIonjVBmXsUNIEObq/O73dv7zeQX+I2kG/RpKH17NIKpbOgS43EQQACEIBAMRJA8SzGUiPNOScgyybWzZxjJUIIQAACEIBAGgHmeKbh4AQCEIAABCAAAQhAIF8EUDzzRZZ4IQABCEAAAhCAAATSCKB4puHgBAIQgAAEIAABCEAgXwRQPPNFlnghAAEIQAACEIAABNIIoHim4eAEAhCAAAQgAAEIQCBfBFA880WWeCEAAQhAAAIQgAAE0gigeKbh4AQCEIAABCAAAQhAIF8EUDzzRZZ4IQABCEAAAhCAAATSCKB4puHgBAIQgAAEIAABCEAgXwRQPPNFlnghAAEIQAACEIAABNIIoHim4eAEAhCAAAQgAAEIQCBfBFA880WWeCEAAQhAAAIQgAAE0gigeKbh4AQCEIAABCAAAQhAIF8EUDzzRZZ4IQABCEAAAhCAAATSCKB4puHgBAIQgAAEIAABCEAgXwRQPPNFlnghAAEIQAACEIAABNIIoHim4eAEAhCAAAQgAAEIQCBfBFA880WWeCEAAQhAAAIQgAAE0gigeKbh4AQCEIAABCAAAQhAIF8EUDzzRZZ4IQABCEAAAhCAAATSCKB4puHgBAIQgAAEIAABCEAgXwRQPPNFlnghAAEIQAACEIAABNIIoHim4eAEAhCAAAQgAAEIQCBfBFA880WWeCEAAQhAAAIQgAAE0gigeKbh4AQCEIAABCAAAQhAIF8EUDzzRZZ4IQABCEAAAhCAAATSCKB4puHgBAIQgAAEIAABCEAgXwRQPPNFlnghAAEIQAACEIAABNIIoHim4eAEAhCAAAQgAAEIQCBfBFA880WWeCEAAQhAAAIQgAAE0gigeKbh4AQCEIAABCAAAQhAIF8EUDzzRZZ4IQABCEAAAhCAAATSCKB4puHgBAIQgAAEIAABCEAgXwRQPPNFlnghAAEIQAACEIAABNIIoHim4eAEAhCAAAQgAAEIQCBfBFA880WWeCEAAQhAAAIQgAAE0giUnOI5cuRI23vvva1Fixa2xRZb2DHHHGNTp05Ny/Rpp51m9erVS/vbZ5990vysWrXKzj//fGvTpo01b97cjjrqKJs5c2aaH04gAAEIQAACEIAABLInUHKK55gxY+y8886zN954w0aPHm1r1661gQMH2rJly9KoHHrooTZ79uzU36hRo9KuDx061B5//HF7+OGHbdy4cbZ06VI74ogjbN26dWn+OIEABCAAAQhAAAIQyI5Ag+y8FY+v5557Li2xd999t7d8Tpgwwfr165e61rhxY2vfvn3qPH6waNEiu+uuu+z++++3gw46yF/629/+Zp06dbIXX3zRDjnkkLh3jiEAAQhAAAIQgAAEsiBQchbPZJ6lREpat26ddumVV17xCukOO+xgZ555ps2dOzd1XUrqmjVrvKU0OHbs2NG6d+9u48ePD05pvxqaX7x4cdpfmgdOIAABCEAAAhCAQB0nUNKKZxRFdtFFF1nfvn290hjK+rDDDrMHHnjAXnrpJbvxxhvt7bfftgMOOMCkPErmzJljjRo1slatWoUg/rddu3b+WprjdyeaW9qyZcvUn6yjCAQgAAEIQAACEIDA/wiU3FD7/7JmNmTIEJs4caKfoxl3HzRoUOpUVsyePXtaly5d7JlnnrFjjz02dS15IEVWi5IyyfDhw72SG67J+onyGWjwCwEIQAACEIAABMxK1uKpFelPPfWUvfzyy7bVVltVWNYdOnTwiue0adO8P839XL16tS1YsCAtnIbjZfXMJJozWlZWlvaXyR9uEIAABCAAAQhAoK4SKDnFU1ZJWTofe+wxP5TetWvXSst2/vz5NmPGDJMCKtlrr72sYcOGflV8CKwV8JMnT7Y+ffoEJ34hAAEIQAACEIAABKpAoOSG2rWV0oMPPmhPPvmk38tT8zUlmn/ZtGlTvy3SiBEj7LjjjvOK5ueff25XXHGF36/zBz/4QcrvGWecYRdffLFtvvnmfmHSsGHDrEePHqlV7t4j/0EAAhCAAAQgAAEIZE2g5BTPO+64w2e+f//+aRC0rZI2jq9fv75NmjTJ7rvvPlu4cKFXPgcMGGCPPPKIV1RDoJtvvtkaNGhgxx9/vK1YscIOPPBAu+eee3z44IdfCEAAAhCAAAQgAIHsCdRzQ9NR9t7xmS0BLS6SlVXbOWnuJwIBCEAAAhCAQOEToP/ObxmV3BzP/OIidghAAAIQgAAEIACB6hJA8awuOcJBAAIQgAAEIAABCFSJAIpnlXDhGQIQgAAEIAABCECgugRQPKtLjnAQgAAEIAABCEAAAlUigOJZJVx4hgAEIAABCEAAAhCoLgEUz+qSIxwEIAABCEAAAhCAQJUIoHhWCReeIQABCEAAAhCAAASqSwDFs7rkCAcBCEAAAhCAAAQgUCUCKJ5VwoVnCEAAAhCAAAQgAIHqEkDxrC45wkEAAhCAAAQgAAEIVIkAimeVcOEZAhCAAAQgAAEIQKC6BFA8q0uOcBCAAAQgAAEIQAACVSKA4lklXHiGAAQgAAEIQAACEKguARTP6pIjHAQgAAEIQAACEIBAlQigeFYJF54hAAEIQAACEIAABKpLAMWzuuQIBwEIQAACEIAABCBQJQIonlXChWcIQAACEIAABCAAgeoSQPGsLjnCQQACEIAABCAAAQhUiUCDKvnOk+fPP//cxo4da/pdvny5tW3b1vbYYw/r3bu3NWnSJE93JVoIQAACEIAABCAAgZokUKuK54MPPmi33nqrvfXWW7bFFlvYlltuaU2bNrVvv/3WPv30U690nnzyyXbZZZdZly5dapIL94IABCAAAQhAAAIQyDGBWlM899xzT9tkk03stNNOs7///e/WuXPntKytWrXKXn/9dXv44YetZ8+edvvtt9uPfvSjND+cQAACEIAABCAAAQgUD4F6kZPaSO4zzzxjhx9+eFa3njdvnk2fPt323nvvrPwXgqfFixdby5YtbdGiRVZWVlYISSINEIAABCAAAQhUQoD+uxJAG3m51iye2Sqdyl+bNm3830bmleAQgAAEIAABCEAAArVIoCBWtb/77rs2adKkFIYnn3zSjjnmGLviiits9erVKXcOIAABCEAAAhCAAASKl0BBKJ5nn322/ec///EUP/vsMzvhhBOsWbNm9o9//MMuvfTS4qVLyiEAAQhAAAIQgAAEUgQKQvGU0rn77rv7REnZ7Nevn2nF+z333GOPPvpoKrEcQAACEIAABCAAAQgUL4GCUDy1vmn9+vWe4osvvmjf//73/XGnTp1MC4sQCEAAAhCAAAQgAIHiJ1AQiqe2S7rmmmvs/vvvtzFjxqRWu2sle7t27YqfMjmAAAQgAAEIQAACELCCUDxvueUW0wKjIUOG2M9//nPbbrvtfNH885//tD59+lBMEIAABCAAAQhAAAIlQKDW9vHMht3KlSutfv361rBhw2y8F5Qf9gErqOIgMRCAAAQgAIGsCNB/Z4Wp2p5qbR/PbFLMd9qzoYQfCEAAAhCAAAQgUBwEak3xbNWqldWrVy8rSvp2OwIBCEAAAhCAAAQgUNwEak3x1LzOIPPnz/eLiw455BDr3bu3d9Z32p9//nm78sorgzd+IQABCEAAAhCAAASKmEBBzPE87rjjbMCAAX5xUZzlbbfdZtpe6Yknnog7F8Uxc0SKophIJAQgAAEIQCCNAP13Go6cnxTEqnZZNg899NANMicLqBRPBAIQgAAEIAABCECg+AkUhOK5+eab2+OPP74BTVk6dQ2BAAQgAAEIQAACECh+ArU2xzOO7qqrrrIzzjjDXnnlldQczzfeeMOee+45+8tf/hL3yjEEIAABCEAAAhCAQJESKAjF87TTTrOdd97Zbr31VnvsscdMn9Ds1q2bvfbaa9arV68iRUuyIQABCEAAAhCAAATiBApicVE8QaVyzOTkUilJ8gEBCEAAAnWJAP13fku7ICyeyuL69evtk08+sblz5/rjeLb79esXP+UYAhCAAAQgAAEIQKAICRTE4iLN59T32TXcLiWzf//+qT9ts1QVGTlypO29997WokUL22KLLeyYY46xqVOnpkWhofwRI0ZYx44drWnTpv5eU6ZMSfOzatUqO//8861NmzbWvHlzO+qoo2zmzJlpfjiBAAQgAAEIQAACEMieQEEonuecc4717NnTJk+ebPpK0YIFC1J/Vf1q0ZgxY+y8884zKbOjR4+2tWvX2sCBA23ZsmUpKjfccIPddNNNpn1C3377bWvfvr0dfPDBtmTJkpSfoUOH+pX2Dz/8sI0bN86WLl1qRxxxhK1bty7lhwMIQAACEIAABCAAgewJFMQcT1kUP/jgA2/1zD7p2fn85ptvvOVTCqmsqbJ2ytIpxfKyyy7zkci62a5dO7v++uvt7LPPtkWLFlnbtm3t/vvvt0GDBnk/s2bNsk6dOtmoUaNM+4tWJswRqYwQ1yEAAQhAAAKFR4D+O79lUhAWT61c1/zOfIiUSEnr1q397/Tp023OnDneCuod3H+NGze2/fff38aPH++dJkyYYGvWrEnzI2W1e/fuKT8hbPiV8qrKGv8L1/iFAAQgAAEIQAACEDAriMVFmkt58cUXe4WwR48e1rBhw7Sy2XXXXdPOsz2RdfOiiy6yvn37eqVR4aR0SmThjIvOv/jiC+8kP40aNbJWrVrFvfgwIXzaBXeiuaXajxSBAAQgAAEIQAACEMhMoCAUT32rXXL66aenUlmvXj0/LK7f6s6rHDJkiE2cONHP0UxF/N2B4o2LlNSkW/y6jivyM3z4cK/khjCyfGpoHoEABCAAAQhAAAIQ+C+BglA8Nfyda5EV9amnnrJXX33Vttpqq1T0WkgkkeWyQ4cOKXdt4xSsoPKzevVqv8ApbvWUnz59+qTCxA80XK8/BAIQgAAEIAABCEAgM4GCmOPZpUsXq+gvc9Izu8oqKUunvoD00ksvWdeuXdM86lyKpVa8B5GSqcVHQanca6+9/HB/3M/s2bP9qvvgJ4TlFwIQgAAEIAABCEAgOwIFYfFUUj/99FO75ZZb7KOPPvJD3trT88ILL7Rtt902u5x850tbKT344IP25JNP+r08w5zMli1b+j07NZyuFe3XXnutbb/99v5Px82aNbOTTjrJxyK/+na85p1uvvnmfmHSsGHDTPNPDzrooCqlB88QgAAEIAABCEAAAv8lUBCK5/PPP+83aN99991t33339XMptcJ8l112saefftrvsZltgd1xxx3ea//+/dOC3H333aZvwksuvfRSW7FihZ177rl+OF2r6l944QWvqHoP7r+bb77ZGjRoYMcff7z3e+CBB9o999xj9evXD174hQAEIAABCEAAAhCoAoGC2Mdzjz328HtjXnfddWlJv/zyy71C+O6776a5F8MJ+4AVQymRRghAAAIQgEA6AfrvdB65PiuIOZ4aXtfQdlK0yv3DDz9MOnMOAQhAAAIQgAAEIFCEBApC8dRXgt5///0N8MlN31tHIAABCEAAAhCAAASKn0BBzPE888wz7ayzzrLPPvvMryzXAiB9H12fsNQCHwQCEIAABCAAAQhAoPgJFMQcT22BpBXtN954o+mb6BJ9ovKSSy6xCy64oNKN3QuxGJgjUoilQpogAAEIQAACFROg/66Yz8ZeLQjFM56JJUuW+NMWLVrEnYvumIpbdEVGgiEAAQhAAAJG/53fSlAQQ+36ctHatWv9nppxhXPatGl+I/ett946vxSIHQIQgAAEIAABCEAg7wQKYnGR9tfUvp1JefPNN1N7byavcQ4BCEAAAhCAAAQgUFwECkLxfO+99/zG8Ul0++yzT8bV7kl/nEMAAhCAAAQgAAEIFD6BglA8tYo9zO2MI1u0aJGtW7cu7sQxBCAAAQhAAAIQgECREigIxXO//fazkSNHpimZUjjl1rdv3yJFS7IhAAEIQAACEIAABOIECmJx0Q033GD9+vWzHXfc0aSESsaOHetXlr300kvx9HIMAQhAAAIQgAAEIFCkBArC4tmtWzebOHGiHX/88TZ37lw/7H7qqafaxx9/bN27dy9StCQbAhCAAAQgAAEIQCBOoOD28YwnrpiP2QesmEuPtEMAAhCAQF0lQP+d35IvCIunsqih9R//+Mf+k5lfffWVz/X999/vP52ZXwTEDgEIQAACEIAABCBQEwQKQvF89NFH7ZBDDrGmTZvau+++a6tWrfJ510r3a6+9tiY4cA8IQAACEIAABCAAgTwTKAjF85prrrE777zT/vznP/svFYU89+nTxyui4ZxfCEAAAhCAAAQgAIHiJVAQiufUqVP9qvYkxrKyMlu4cGHSmXMIQAACEIAABCAAgSIkUBCKZ4cOHeyTTz7ZAN+4ceNsm2222cAdBwhAAAIQgAAEIACB4iNQEIrn2WefbRdeeKHp2+z6itGsWbPsgQcesGHDhtm5555bfFRJMQQgAAEIQAACEIDABgQKYgP5Sy+91PR5zAEDBtjKlSv9sHvjxo294jlkyJANEo0DBCAAAQhAAAIQgEDxESiofTyXL19uH374oa1fv960qfymm25afES/SzH7gBVt0ZFwCEAAAhCowwTov/Nb+AUx1B6y2KxZM+vZs6fttNNO9uKLL9pHH30ULvELAQhAAAIQgAAEIFDkBApC8dSnMm+77TaPcsWKFbb33nv7z2fuuuuupj0+EQhAAAIQgAAEIACB4idQEIrnq6++avvtt5+n+fjjj/uhdm2jdOutt5r2+EQgAAEIQAACEIAABIqfQEEonlpY1Lp1a0/zueees+OOO8407H744YfbtGnTip8yOYAABCAAAQhAAAIQsIJQPDt16mSvv/66LVu2zKR4Dhw40BfNggULrEmTJhQTBCAAAQhAAAIQgEAJECiI7ZSGDh1qJ598sl/F3qVLF+vfv79HqyH4Hj16lABmsgABCEAAAhCAAAQgUBCKpzaJ79Wrl3355Zd28MEH2yab/NcQq68WMceTSgoBCEAAAhCAAARKg0BB7eNZGkj/mwv2ASul0iQvEIAABCBQVwjQf+e3pGttjud1111n2jA+G9GnNJ955plsvOIHAhCAAAQgAAEIQKBACdSa4qkvFHXu3Nl++tOf2rPPPmvffPNNCtHatWtt4sSJdvvtt1ufPn3shBNOsLKystR1DiAAAQhAAAIQgAAEio9Arc3xvO+++7xy+Yc//MEvLNKWSvXr1zd9oz1YQvfYYw8766yzbPDgwd69+PCSYghAAAIQgAAEIACBQKAg5nhGUeSV0M8//9z05aI2bdrY7rvv7n9DQovtlzkixVZipBcCEIAABCBgRv+d31pQaxbPeLbq1atnu+22m/+Lu3MMAQhAAAIQgAAEIFA6BGptjmfpICQnEIAABCAAAQhAAALZEEDxzIYSfiAAAQhAAAIQgAAENpoAiudGIyQCCEAAAhCAAAQgAIFsCKB4ZkMJPxCAAAQgAAEIQAACG02gIBTPe+65J7WF0kbniAggAAEIQAACEIAABAqSQEEonsOHD7f27dvbGWecYePHjy9IUCQKAhCAAAQgAAEIQGDjCBSE4jlz5kz729/+ZgsWLLABAwbYTjvtZNdff73NmTOnWrl79dVX7cgjj7SOHTuatmp64okn0uI57bTTvLuuhb999tknzc+qVavs/PPP93uJNm/e3I466ihTOhEIQAACEIAABCAAgeoRKAjFU18skmL32GOP2YwZM/zXih544AH/SU25P/nkk7Z+/fqsc7hs2TK/J+htt91WbphDDz3UZs+enfobNWpUmt+hQ4fa448/bg8//LCNGzfOli5dakcccYStW7cuzR8nEIAABCAAAQhAAALZESiIDeTjSd1iiy1s3333talTp9p//vMfmzRpkslCudlmm9ndd99t/fv3j3vPeHzYYYeZ/ioSfZpTw/uZRJ/vvOuuu+z++++3gw46yHuRRbZTp0724osv2iGHHJIp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A7YjSsPBCQQgAAEIQAACEChKAgWxuGj58uU2ZMgQv4J90003Nc39jP8VJVkSDQEIQAACEIAABCCQRqAgFM9LLrnEXnrpJbv99tutcePG9pe//MXP+ezYsaPdd999aQnmBAIQgAAEIAABCECgOAkUxFD7008/7RXM/v37+4VG++23n2233XbWpUsXe+CBB+zkk08uTrqkGgIQgAAEIAABCEAgRaAgLJ7ffvutaYGRRPM5dS7p27evvfrqq/6Y/yAAAQhAAAIQgAAEiptAQSie+lTm559/7kl269bN/v73v/tjWUI322wzf8x/EIAABCAAAQhAAALFTaAgFM+f/OQnpq8USYYPH56a6/mzn/3MNP8TgQAEIAABCEAAAhAofgIF8a32JMYvv/zS3nnnHdt2221tt912S14uinO+9VoUxUQiIQABCEAAAmkE6L/TcOT8pCAsnslcde7c2Y499lj/nXZ91QiBAAQgAAEIQAACECh+AgWpeAasWmR07733hlN+IQABCEAAAhCAAASKmEBBK55FzJWkQwACEIAABCAAAQgkCKB4JoBwCgEIQAACEIAABCCQHwIonvnhSqwQgAAEIAABCEAAAgkCtfrlIi0gqkgWLlxY0WWuQQACEIAABCAAAQgUEYFatXi2bNnSKvrTJzNPPfXUKuPU146OPPJI07fe69WrZ0888URaHFEU2YgRI/z1pk2bmj7VOWXKlDQ/q1atsvPPP9/atGljzZs3t6OOOspmzpyZ5ocTCEAAAhCAAAQgAIHsCdSqxfPuu+/OPqVV8Lls2TK//6c2pj/uuOM2CHnDDTfYTTfdZPfcc4/tsMMOds0119jBBx9sU6dOtRYtWnj/Q4cONX056eGHH7bNN9/cLr74YjviiCNswoQJVr9+/Q3ixAECEIAABCAAAQhAoGICBbmBfMVJrtpVWTwff/xxO+aYY3xAWTtlCZViedlll3k3WTfbtWtn119/vZ199tm2aNEia9u2rd1///02aNAg72fWrFnWqVMnGzVqlB1yyCHeraL/2IC2IjpcgwAEIAABCBQmAfrv/JZLrQ615zdrmWOfPn26zZkzxwYOHJjy0LhxY9t///1t/Pjx3k1WzTVr1qT5kbLavXv3lJ9U4O8OpLyqssb/kn44hwAEIAABCEAAAnWZQJ1TPKV0SmThjIvOwzX9NmrUyFq1ahX34sME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pC7mWWVLvqnjpf6MU8ep46Vex8lfOgEWF6Xz4AwCEIAABCAAAQhAIE8EsHjmCSzRQgACEIAABCAAAQikE0DxTOfBGQQgAAEIQAACEIBAngigeOYJLNFCAAIQgAAEIAABCKQTQPFM58EZBCAAAQhAAAIQgECeCKB45glsvqK9/fbbrWvXrtakSRPba6+9bOzYsfm61UbFO2LECP/FJn21Kfy1b98+Fae+DCE/+jJE06ZNrX///jZlypTUdR2sWrXKzj//fGvTpo01b97cjjrqKJs5c2aanwULFtgpp5ziP2umDX91vHDhwjQ/X375pR155JE+DsV1wQUX2OrVq9P8VPfk1Vdf9XErH8rnE088kRZVoeVz0qRJtv/++3vmW265pV199dVWne8RV5bv0047LVXuofz32WefNDY1Wb65yPfIkSNt77339l8j22KLLeyYY46xqVOnpuWp1Mo7mzyXYlnfcccdtuuuu6Y+3NC7d2979tlnU2VdauUcMlZZvkuxrEPe+a1BAu4BQoqEwMMPPxw1bNgw+vOf/xx9+OGH0YUXXhg5hSz64osvCi4HbrunaJdddolmz56d+ps7d24qndddd13kPicaPfroo5FTCqJBgwZFHTp0iNzn81J+zjnnnMgpR9Ho0aOjd999NxowYEC02267RWvXrk35OfTQQ6Pu3btH48eP9386PuKII1LX5VduCqs4FJdTEqMhQ4ak/GzMwahRo6Kf//znPh/usY0ef/zxtOgKKZ+LFi2K2rVrF51wwgmeudirDH7729+mpTmbk8ryPXjw4EhlEy//+fPnp0VdU+Wbq3wfcsgh0d133x1Nnjw5ev/996PDDz886ty5c7R06dJUvkqtvLPJcymW9VNPPRU988wzkXux8H9XXHGFb3tV9pJSK+dQgSvLdymWdcg7vzVHQNYOpEgIfO9734vUWcdlp512ii6//PK4U0EcS/GUkphJ3HfsI2f99I13uL5y5crIWSyjO++80zs5q6Vv6KVsB/nqq68i9ynS6LnnnvNOUr6l7L3xxhvBS/T66697t48//ti7SUFSGIUN8tBDD0Vu78BICkkuJal4Flo+nbXcMxbrIM6i5RVxpbW6ksy34lEHdfTRR5cbZU2Wb77yrRcp5X3MmDE+n3WhvJN5VsbrQlkrn61atYr+8pe/RHWhnJXfICHfOq8rZR3yzm9+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fvqp9e3b19xnZ23zzTcvN55DDz3U3PfY7bPPPrNrrrnGbr/9dq98ZgqwZs2aTM4F5SbFWfkJf1tttZVdffXVqXO5d+rUqaDSTGIgAIHSJIDiWZrlSq4g4AkcdNBB5r7JbiNHjiyXSKZh1FtuucW23nrrVBhZAY855hi79tprrV27drbZZpvZVVddZWvXrrVLLrnEWrdubVJm/vrXv6bChAMNb/fp08cPb++yyy72yiuvhEv+98MPP7Tvf//7tummm/q4TznlFJs3b17KT//+/W3IkCF20UUXWZs2bezggw9OXYsfuO9ne2VK6WjcuLEfGn7uuedSXmTtmzBhgvejY+W7PFF4cZMydtJJJ9nJJ59sshRLAi/lVdZQ+dWXh9236O3oo4/2+SgrK7Pjjz/evv76ax8mGc59v977++lPf2rr1q2zG264wd9viy22sF//+tepMDpQWu+44w477LDDrGnTpta1a1f7xz/+kfKjc8kee+zh/YpXUsRW+Ql/9evXtxYtWqTOpcwfe+yx5aY9Gd/06dNtu+22M6Vf3BX+0ksvtS233NJblHv16pVWzvfcc4+vM88//7ztvPPO/j5BuQ9xq15873vf8+FVv/bdd1/74osvwmV+IQCBEiGA4lkiBUk2IJCJgBQMKYu///3vbebMmZm8ZO320ksv2axZs+zVV1+1m266yStgRxxxhLVq1crefPNNO+ecc/zfjBkz0uKUYnrxxRfbe++95xXQo446yubPn+/9yNK2//77eyXxnXfeMSmKUtaktMXl3nvvtQYNGthrr71mf/zjH+OXUse/+93v7MYbb7Tf/va3NnHiRDvkkENM95o2bZr3o3tJ8VVadCwrYLYihS9u2fzkk0/s73//uz366KOpOaxSzL/99lsbM2aMjR492mRdHTRoUNot5Pbss8/6fD700ENeUT/88MN92SicrNO/+MUv7I033kgLd+WVV9pxxx1nH3zwgf34xz+2E0880T766CPv56233vK/L774os/XY489lha2shMpzdmkPcQzefJkrxT+6Ec/8grxJptsYj/5yU982Tz88MOeva5JsQzsFXb58uW+bO6//35fh6SohzLQC4zSoLqgsnv99dftrLPO8op0uC+/EIBAiRBwjQ4CAQiUIIHBgwdHzgLnc+YW1ESnn366P3788ccj13ylcuzmPUa77bZb6lwH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", "text/plain": [ "" ] @@ -716,7 +716,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAAH+CAYAAACV9Wa6AADWhklEQVR4AeydB2AU1fbGT3olAUKvohRRARGUqmJ59md99i7P3rD3Z332/uzlb3vWZ++KDUWKiorSEZEWeknvmf/5brjD7LKb7Ca7ySb5joZpd+7c+c3s7jdnzj03zlETGgmQAAmQAAmQAAmQAAm0AgLxreAceYokQAIkQAIkQAIkQAIkYAhQ/PJGIAESIAESIAESIAESaDUEKH5bzaXmiZIACZAACZAACZAACVD88h4gARIgARIgARIgARJoNQQoflvNpeaJkgAJkAAJkAAJkAAJUPzyHiABEiABEiABEiABEmg1BCh+W82l5omSAAmQAAmQAAmQAAlQ/PIeIAESIAESIAESIAESaDUEKH5bzaXmiZIACZAACZAACZAACdRb/D7//PMSFxfn/iUmJkrXrl3luOOOk4ULF9aL7DfffGPqwzRcmzNnjtx0003y119/bbXraaedJttss81W6xt7BdqRmZkZ0mHBFucTKUNdqHPdunWRqlI+/vjjiLYxYg2LcEXr16+Xa665RnbYYQdJT0+XrKwsGTlypDz66KNSUVFR76M1Nr/HHntM8Lmty+y94v18B5ofN25cXVWZ+yPS912dB20mBfCdhO+Eugz8LrjggrqKhbS9se+5kBrVgEKRZBOsGfhNsfc/PhuB7IwzznDLBNpe33X4jIXyOQtUf6j3V6B9uY4EWjqB+Iae4HPPPSdTp06VL774wnxBv//++zJ27FjZuHFjQ6sOa3+I35tvvjmg+L3hhhvknXfeCau+pi4Mpv/85z+buhm1Hh8/pGDekm3evHkydOhQefLJJ+XEE0+Ujz76SF577TXZZZdd5OKLL5a//e1vUlxcXC8Ejc0vVPGL+w73n/17++23zfldeOGF7jpsQ3205kWgse+55kWn9ta2adPGPDxWV1f7FCwsLJT//e9/5qHYZwMXSIAEYpZAYkNbttNOO8nw4cNNNXhCraqqkhtvvFHeffddOf300xtafUT232677SJST2NWAs8irWkJ4F4+6qijJD8/X3744Qfp37+/26CDDjpI9txzT/Om49JLL5UnnnjC3dbcZ3r06CH4s2bfpvTq1ct4vO16TkmgNRE49thj5ZlnnpEvv/zSPPTac3/99dfN797hhx8u//3vf+1qTkmABGKYQIM9v/7nZoXw6tWrfTb99NNPcuihh0r79u0lNTXVeNPeeOMNnzKBFrAfQinwCictLc1Mjz/+eFmyZIlbHK9yjz76aLO81157ua+f7CveQGEPpaWl5lV2nz59JDk5Wbp37y7nn3++bNq0ya0XMzjuIYccIp9++qnx9qEN22+/vfzf//2fTzl4/y6//HJBfTg/nCdYvPrqqz7lsPDHH38IxBNCIHr27CmXXXaZlJWV+ZTDazbvKzacC9ZNnDjRPFSg/oyMDPn73/8uf/75p8++tS0sW7ZMjjzySOOlyM7OlpNOOknWrl271S74Qh81apQ5Btq5//77yy+//OKWA1O89ofZV4KYQijhWuy4445uWcygndgOD4m1n3/+2az74IMP7CpZtWqVnH322UZ84bqAJ7zLlZWVbhnMlJeXy2233WauRUpKinTs2NFw8T+XUK+fT+WbF/C2AG8Urr76ah/ha8vix3C//faTZ5991rQb64OF7oALzt97Twbjh3pQFq+64XGG6MY5IuwCXmev4R5BWX+z94sVruAwe/ZsmTRpkimPfbCuIYa3PLhHEAoCrxi84PAI12Xwpm+77bYyYsQIWbNmjSkeynW3DO+99165//77zb2BexNtmDZtms9h8ZnA90a3bt0Mu86dO8s+++wjv/76q085/4VQvm+wj+X79ddfy7nnnisdOnSQnJwc89nKzc31qRahMVdeeaV06dLFsMKbMTxMRdLwecW9iNAzfEcNHDjQ3LdFRUXuYWr7zKKQ4zjGm7/zzjubOtq1ayf/+Mc/tvp+GadODjg9fvzxR9l9993NOeF63nnnneLvFcX3Kb7fsB33cKdOncx3H+4BHK9fv37mu8Vt5OYZeFPx/YTv5FCsts8J7huE5d1xxx1bVfXtt9+az4P3e2mrQptXDBgwQEaPHr3Vdz9+C/Cdivb6G3jcfffd7vcUzv+UU06R5cuX+xQFC5Tr3bu3+f3Am6VPPvnEp4xdwMO4/a2xv10TJkwQ77W2ZTklARIIQkA/dPUyDXdwtEpHvwB99n/kkUfM+rfeestd/9VXXzn6IXX0i9LRL2lHhaSjX8SmHOqxpj8kZh2m1vRLyfnXv/7lqBBx9Ifb0R9/Rz1ujoodR4WOKaY/oM7tt99u9lVB4egPsPnDetipp57q6JeKmcc/+oXkqJhz9AvR0ZAI5/PPP3f0B9VRMenoK25HhbFbFvupF8xR4eG8+OKLzmeffeaouDPHQnusqWBzVAQ4+qPsoP0ffvihoz8Gzn/+8x9bxLQDHPSHyRxPQ0XMuakQcVTgueUwA7bqQXfXWd4qlh2NL3P0i9F56qmnHP0ydbBOw0zcsoFmUBfqxPlcccUV5jzQVnvOKibd3f797387aBOOg/PQ196OCgxTVgWUKacC3tEfRlOn5Y0p2KkX1KxXEWDK6o+/o+LI0R9l58wzz3SPc9ddd5lroF/mZt3KlSvNuaCN+mPmgM+tt97q6I+muV/sjuqRdQ444ADTHnDTBwJHPTKOPsCY66QPIraoOd9Qrp+7g2fmrLPOMucxd+5cz1rfWX31b8roQ47ZgGsPzph6bfHixWa9vd9r44f9UAeuK+471K1C05wz1uMzYc1eV7tsp/Z+wXFh+qDhqAAx97e9XlgXitm233PPPW7xl19+2bRRBZejb3nM53rYsGHmc/7dd9+55Wz77GdVHw4cFVXOYYcd5uiPtSkX6nW37VDRbljguPgbNGiQqVOFlntcFSpO3759nZdeesl8b+D7SEXYVtfF3WHzTCjfNyhq+YKphoOYzxPuQZzbXnvt5VMtvn/wecLnDt81+NzhXtXYcfOd4FM4wAKuuYrAAFu2rMLn5IEHHnA0LMcBY3wG9cHRpy113XP4bCYlJRlO+I5+5ZVXHH3Qd/TBwdGHE/dg+P5Voe+ocDXHwefvvPPOM/fDCy+84JbD51ofgs3n9JZbbjGMcB00XMjBbwLsoYceMmwWLFjg7ocZfI/jvO33jc9Gz0Kon5MjjjjC0TcXjj5Ee/Z2zHe5PiA5+I4KZva+w/2vD7qOOjecDRs2mOIq4k07cT64RmiP1+x3iD7Imt89XBf8duGzbT8TKG8/J+PHj3e/23GP6AOT+b2zdeIzow8njj5smfsI35FgqMLb2Xvvvc1vmy2L71HcezQSIIGtCfh+UrfeHnSN/fJXj4v54igoKDAfbnxY99hjD58vE3yBQlT6f8GoR9VRT4UDMQODYMCXB6bBDF9e6hUwX6j40FvDj1awffEFgC8Ca/hiR1l90rarzBTCHOshKq1hP3zZqafZrnJKSkoc9bw6ELzW1BPi6GsvuxhwinagfvV4+2xXL7CDH2uvoRy+EK1Z3vgS99r3339v6lQvqHf1VvP2y/WSSy7x2WZFjL6uM+uXLl1qBCl+0L2G64tre8wxx7irA33ZYyN+ZNF+PCzAJk+ebJbV+2V+kM1K/Uc9hY56Uuyi4amePB/W2IgHE9RnfwghBrHsfcBCOTyIYT0EqbVQr58t751CYKM+78OQdzvm8RCCMhDysGD3sP0BxXW0FowftqNOPCx4RQfufXyWIOqs2etql+3U3i84rjUIkT1VuIRrtu1W/OLzCsEA0Wk/u6gT9wgexrzX1LYPP/QQonj4u+iii3z2w+colOtu24HjekWMelENL/sAop06zfKDDz4Y7qluVT7Y943lC9HnNXyn4NpB0MPw4ITlYJ+7UMQJ9q9L/HrbgId7fNfi4Rz7zpw5090c7J7DAxHK3nfffW5ZzOibInMf4rNrDfcQyk6fPt2uMlM8qMGpYA2CF+UgjoMZBDIejCGIvYa6/B8ivNvtPOoP5XNiP5dwolhbsWKF+a7zdzzY7XZq7zvc/7jHca/CyQPDAw0eMsDcn6299v73CLih3ddee62pA44L/MYE+273fmbVe+3Ex8dv5XR68803TZ0a023qxD/47gvl/nJ34AwJtCICDQ57QGyqegvMa08VC4JXZe+99555zaQfcPOKH6+40FkIpj8m7h9e/euPhMyfP99sC/QPXn9dddVVoj/4pk68vsKrTrzi0S+XQLvUuU6f0k0ZvAb0Gl7XI5QAMV1ew2tAxDtaQ1gDXkV7Qy92220385oKr8jx6lsFsi3uM8XrZoQAeG3w4ME+dXm3+c9bjnY9XsPpl5zol7tdVevUf38Vs4ar3V892+b64NWc91rhnPVL2JxbrQfQjYixxit1dIKEIVRDBYsJsdAfElm0aJEJ81BRLPvuu68pg3/Uyyz6g2deVXuPfeCBB5oyeGVvy7Vt29Zw9JbDdcKrZfD3WijXz1s+nHn9rjDFcV0jbXhNj9f11hISEgShFvpwsdVrU1umMab4vOLV/sknnyz6Q+weEp9LxEgjBMG/E6C+TRB83vBqXB9affYL9brbAx188MECFtbw+YHZzyNCgnAPqlgx4REI18Hr51As3O8bhHJ5zb8t9nMV7HPn3bch8wjzOOGEE8z9Dzb4TsbnFRbK9ySuAe5hhEF5P1P4PA0ZMkS+8ftMYT2+87zm/z2G1/b4nvR+xr3lMY9wGfQNQRiJfW2P72eEG4Wa4SKUzwlCNXAeNtQIx0acPs5ZvbNYDMlwj+N3AqEO4KQP+Kb9gT7/9tr7/86AG8JS7O+MPngIwvD87xH73e5tGK4TQk7wnea9TghLQxv8r5N3X86TAAlsIbDll2vLurDm8OFH7Be+sBCriS9axORas7G/iFHCF7L3T5+ITbHa0m/hC12fsk3mAwgzxMrheIjxDCYw7bGDTZG6CiIadXgNXx74Usd2ryGWz98Qv+Y9/sMPP2xEOjr6QcDhBxgdIPzTviE+EkLSa6gLX36hGNrnb4Ha7F/GLvvvDw44P3vO9nrtuuuuPtcK1w1xhbVdK3sMTPGDZL/cIYIRDwoBDDGHZfVYG37eH0YcG/G/3nsE8zZ+2B4b5RBLiHg3/7KIHbXlbHtCuX62rHdqH3gg2IOZjanV15jBitR7vf+1QkV2nb1e9a68ATvaYyO+1N8QYwuh6Z/tBR2BEFePOFx/C/W62/38ryc+PzD7ecTnGPceBAHiKBE/ic+6epxFPXe2moDTcL9v6mqLZWWvmz2o/dzZ5YZMIdgRe6seRRMHDwGE70ibpcNyqe0YuAZ4kMPn0/8zhYeZ+nym1Nvv03Ey2PGRRQTXRd9CmSL4vkeHSw2NCbaLz3p/ttho11n+WIfrj/sCD2/qGZenn37axDTbsigTimlogqC/Ah7ocI7+4tbWYY8d7HNit9tpoHb4r8N1+u2337a6RniIwPXzv062LZySAAn4Ekj0XQx/CU+wtpMbRJ++BjU9YvU1jPliQUcQGPKkolNAIENHgkCWl5dnvIH66tR03rBl0DlMY67sYthT/GDhqRlfXF4BjC8PiCcIv3ANHmN0zMIfvqDg9YAXGF5eeL4jZWifv2EdPOOhGMpChFgDB3z52h9xe71w/eBRrq9B/KIjGB5W8KN8/fXXm6o0Ls14guGlgxfFm9UCx4b3CD8qgQzCCoZyaC86IQYy/BBEwiDYNQRG8ECDaxnIsA1CZpx6lmD2wca/A2N9fpSCXWscx14v7/GsCMT2+hwP+4Vi9th4a+Nv8AjDG4w3QF7DtYLXGiINAsR7b4V63b311TWP+nH/wTSeVNC5Fp0D0VESHr9AFo3vG8sq2OcuUDvCXQfHA7hD9FpvL+rAA2KohmuAhwaN1zYd0/z3895b/tuCLeO71b9jV6Cy+O7C2x14ZTFFR0p8j3q9+4H2s+tC+ZygLB5s8BYRx8H3DvbTUAVbTcjTMWPGCH6zNKzDPNQHe/C11x6fE2/2FBwI1wvMYbZcsPPwdkzFPujQ6N/h2lSk/9g67TKnJEACgQk02PPrXy08Lfjh005qxgOELwn06NW4MyOSIZT9/4KJFXwZQ5D6f/Ei3QxEttdsmVC8HBBmMP+0NBpDal692e3e+sOZh/cE3gB4wOFl8H8FHE5d/mWtd8SunzJlinnda8WXXR9s6r8/RAEEsN0f3jKIOYQm+F8nu2zrro05GOL6IccyxJDGgZvd4OnF60CEQmAdvEzWkFVj1qxZ5pW1PZZ3asUvykGw4x7wbrfzwR6m7HFCnWoMnsmwgFf1EFD+Bk+4dmAybyWsh8b+UME74zX8oPtbbfxQFiIRD1LWcL44Jl7p2x/TYMfzZtCw++N4oXw+bPlgU/DFA5R2iDKfT1sOr63xGbIZIOx6TCFGrbCCAPa+EQn1unvrC2cer97x8IU3D/DYBbNwvm+C1eG/3n6ugn3u/MvXZxnthtn7ydaBDAj+Zsv43we4Bviu1TjYgJ8psAvXIGTxubFhZrXtrzG/xqOpMapG9Grnu9qK+2wL5XOCHfCgiBAH7ZRnwmEQOgAhWx/D/QTHBjJZBDM86MP8f2fglccbUvs7AyGOtvnfI/a73Vs/rhO+myGY7fedd2q/D7z7cJ4ESGBrAg32/PpXCeELLy9S++DHETFk+BLGFyGEFUQhfjjhucUXAH6MtLOafzVmGSNpQSAhdg9PtPhgI+4THh3EfHoNcVAweOogpvFlgjRZ9qnaWxYePbQFXgCkjcEXIMQKPMwY0ACxjOEa0jbhiwmeSzDAuWkHn4BCINy6veWRigmDECDuDGnLrrvuOsPThpB4ywaax6tQiFswQOoriFPEwiH2FwbG8GigXsQR2jhuiDB4ca2HG2XtD6J29jLXF54anD/CEZDSB9cE4hBvBBDuAYP4xbXHH9JVeQ3HhShGrBteUUJkIRwEoQVIzg+PHUQfXp3jhwIx4/jRRAwdRDS8TBDWeF0K4dpQw/lAzIEVBB1+6DCFVxfiEvcaPG3aScg9FEQwzhFplXAfQPThx9m+gnYL6kxt/FAO9zx+QHGNwB2DSuAtgjfdGRggxAavYsEP1xbxk7g3/A3Hw74Q0Eg9hc+IbYN/2dqW8TCDh1zEKOKeR7gTmOBzCm8jHhYCGV7/4vOLzx4+17jWuEdCve6B6gy0Dp9lxIviM4IHb9yPEGBYH8yDj3rC+b4JdNxA6/BmDN+B2vnO3KO4N/CAh3RtOF6oBsGDtzH+ph3DzOcF99o555xjvsPwWcDnAw4Hf7PX2/8zi+9ACEPE3+I7BtcH9xy8lojNx35I6RaOIf0W7jV8HsEdn1OIbtwDuG/wvWANnzGcCz6/4IXvj1AtlM+JrQvfk7h3Z8yYYd5Q2vXhTtFG/NVm+P4CU834YxwA+A3Edxk+z/AWaydIszuuHcICkbrR+92ONxX2odoeB0zxnYTrg/3xfYswI+2obL5r8R2F3yIaCZBAHQT0ab9eZns761PsVvvrF5xJK4NUOOpVNNvR4xiZAtAbXL+cTeYApGZB6hdr+sXnaHMdTK2poHG0E41JIaSi1qQ40h8PR0XFVj1Z0bsbPW9VtJh6bM969HhFea+hjSp+zXq0B1kn9Mt9q5Rh2E872Hh3NfMqehz8WdMvd0efwE071bti0kqhh7e+frZFTHv1B8VdtjO2R7xdxhQcsN6a5Y1USSrOHRX/ppczMkWoF80WCzq1x9AvfUc9FqbHMniqd9pRYbvVfvo63/S2RjomnA84ILUZUutYU8Hj6Je1Sd2j3ifTZvSMtobzx3kgdZrXcF9gvYoR72ozj6wAyAaA64jrgqwaSKGlYtxk+bA7oDc7skCocDc9pTWEwmRCQOYAL49Qr5+tN9AU1xDXF5kWVDAadvpDbnp8e1PE2X1VMBhWaDtSEOmPpKOCwpyzvSdRtjZ+4IPe48hcoZ5ewwLHV1FjD+NOke0AGRZwb+mDpblvkHYLdXivh/7wOkhNhuuObWATiqEOlEdvd6/hHtEfWsMEx1ZPloPsI16z9x2uqzUVyI6KLXNt7fdHKNc9WDtQL9qHY8FwP+tDtrleaBfuDRUJJhWY/T4yBQP8E+r3jf082vbbqgJ9h+E6I80avvtw/6inz6RiBH98N9VlOLdgf/ac1Uto0hEi3aKGG5jPJVLZYb9Q7zm0Q1+nm2sKbsiigHtPO7+a+9e2E997yBzib4G+Z5HJAJkckGYMn2cwwPcpUoT5m4o9015kEArVcH6hfk5sneqNN/eeNyWi3RZoWtt95y3vn+0B2/RtjckEo28fzPmrUDffB8ii4TVki0AmB6RAQ0YU3K/6gG1+Y7y/M9gH2Y7U82wyBKEsvmP04cRkFNHQCbfaUO8vdwfOkEArIhCHc9UvEFqME4A3D14ZvDLDay5ayyaAV9mIR0TnHxoJtAYC+F7DfY/vuGgZBlVRUSjoZAcPMI0ESKB1Eoh42EPrxMizJgESIAESCJcAws4QBoIUXghFwKiK0TCERCGMC6E5CNtBuBSNBEig9RKg+G29155nTgIkQAJNSgB9PhD7i74ZGsJh0kNGo0HoJI3YcvRpQDy0N+NNNI7HOkmABGKbAMMeYvv6sHUkQAIkQAIkQAIkQAIRJBAfwbpYFQmQAAmQAAmQAAmQAAnENAGK35i+PGwcCZAACZAACZAACZBAJAlQ/EaSJusiARIgARIgARIgARKIaQIUv3p5kO0NvY6Z9S2m71U2jgRIgARIgARIgAQaTIDiVxEWFBSIJgo30wYTZQUkQAIkQAIkQAIkQAIxS4DiN2YvDRtGAiRAAiRAAiRAAiQQaQIUv5EmyvpIgARIgARIgARIgARilgDFb8xeGjaMBEiABEiABEiABEgg0gQofiNNlPWRAAmQAAmQAAmQAAnELAGK35i9NGwYCZAACZAACZAACZBApAlQ/EaaKOsjARIgARIgARIgARKIWQIUvzF7adgwEiABEiABEiABEiCBSBOg+I00UdZHAiRAAiRAAiRAAiQQswQofmP20rBhJEACJEACJEACJEACkSZA8RtpoqyPBEiABEiABEiABEggZglQ/MbspWHDSIAESIAESIAESIAEIk2A4jfSRFkfCZAACZAACZAACZBAzBKg+I3ZS8OGkQAJkAAJkAAJkAAJRJoAxW+kibI+EiABEiABEiABEiCBmCWQGLMta2YNq66sloU/rZaCDaXSpn2q9BveWeIT+WzRzC4jm0sCJEACJEACJNDCCVD8RuAC/zJxicz4ZImUl1SKo/XF6d93byyUYQf2lqF/6x2BI7AKEiABEiABEiABEiCBSBCg+G0gRQjfae/8KdXVjsQnxEm8Kl9HFXBZcaVZj+opgBsImbuTAAmQAAmQAAmQQIQI8L18A0Ai1AEeXwjfhEQVvip+41T9YoplrDfbtRyNBEiABEiABEiABEig6QlQ/DbgGiDGF6EOVvR6q7IiGNtRjkYCJEACJEACJEACJND0BCh+G3AN0LnNxPgiyDeAxSEEQtejHI0ESIAESIAESIAESKDpCVD8NuAaIKsDdC9ifAMZ1mM7ytFIgARIgARIgARIgASangDFbwOuAdKZJaclSnWVI47G93oNy1iP7ShHIwESIAESIAESIAESaHoCFL8NuAbI44t0ZvHaya2qskbsWtGLZcQCm+3M99sAytyVBEiABEiABEiABCJHgKnOGsjSpjGzeX6R1wGhDinpiczz20C23J0ESIAESIAESIAEIk0gzlGLdKXNrb78/HzJzs6WvLw8ycrKqlfzOcJbvbBxJxIgARIgARIgARJoVAL0/EYIN0IgBozsGqHaWA0JkAAJkAAJkAAJkEA0CDDmNxpUWScJkAAJkAAJkAAJkEBMEqD4jcnLwkaRAAmQAAmQAAmQAAlEgwDFbzSosk4SIAESIAESIAESIIGYJEDxG5OXhY0iARIgARIgARIgARKIBgGK32hQZZ0kQAIkQAIkQAIkQAIxSYDiNyYvCxtFAiRAAiRAAiRAAiQQDQIUv9GgyjpJgARIgARIgARIgARikgDFb0xeFjaKBEiABEiABEiABEggGgQofqNBlXWSAAmQAAmQAAmQAAnEJAGK35i8LGwUCZAACZAACZAACZBANAhQ/EaDKuskARIgARIgARIgARKISQIUvzF5WdgoEiABEiABEiABEiCBaBCg+I0GVdZJAiRAAiRAAiRAAiQQkwQofmPysrBRJEACJEACJEACJEAC0SBA8RsNqqyTBEiABEiABEiABEggJglQ/MbkZWGjSIAESIAESIAESIAEokGA4jcaVFknCZAACZAACZAACZBATBKg+I3Jy8JGkQAJkAAJkAAJkAAJRIMAxW80qLJOEiABEiABEiABEiCBmCRA8RuTl4WNIgESIAESIAESIAESiAYBit9oUGWdJEACJEACJEACJEACMUmA4jcmLwsbRQIkQAIkQAIkQAIkEA0CFL/RoMo6SYAESIAESIAESIAEYpIAxW9MXhY2igRIgARIgARIgARIIBoEKH6jQZV1kgAJkAAJkAAJkAAJxCSBJhW/jz/+uAwePFiysrLM36hRo+STTz5xQTmOIzfddJN069ZN0tLSZNy4cTJ79mx3O2bKysrkwgsvlA4dOkhGRoYceuihsnz5cp8yXCABEiABEiABEiABEiABEGhS8dujRw+588475aeffjJ/e++9txx22GGuwL377rvl/vvvl0ceeUR+/PFH6dKli/ztb3+TgoIC9+pNmDBB3nnnHXnttddk8uTJUlhYKIcccohUVVW5ZThDAiRAAiRAAiRAAiRAAiAQp95VJ5ZQtG/fXu655x4544wzjMcX4vaqq64yTYSXt3PnznLXXXfJ2WefLXl5edKxY0d56aWX5NhjjzVlcnNzpWfPnvLxxx/L/vvvH9Kp5efnS3Z2tqkPXmgaCZAACZAACZAACZBAyyTQpJ5fL1J4auG9LSoqEoQ/LF68WFatWiX77befWywlJUX23HNPmTJlilk3Y8YMqaio8CmDEImddtrJLePu7JmBiIbg9f55Ntdr1ql2ZM2SfFk6e72ZYplGAiRAAiRAAiRAAiQQWwQSm7o5v//+uxG7paWlkpmZaUIYdthhB1e8wtPrNSwvWbLErII4Tk5Olnbt2nmLGO8wtgWzO+64Q26++eZgm8Nev3zeBpnx6RJZn1sk1ZXVEp8YLzndMmTYAb2lx/btw66PO5AACZAACZAACZAACUSHQJN7fgcMGCC//vqrTJs2Tc4991w59dRTZc6cOe7ZxsXFufOYQZSG/zqfAiGUueaaa0yIA8Im8Lds2TL/KkJehvD94vk5krtwk5QWlkt5SaWZYhnrsZ1GAiRAAiRAAiRAAiQQGwSaXPzCc9u3b18ZPny4wCM7ZMgQeeihh0znNiDy9+CuWbPGeHaxDR3gysvLZePGjVh0zVvGXemZQfiEzTBhp57NIc8itGHK24ukOK9cqnU+Pj5eEtTriymWsR7bGQIRMlIWJAESIAESIAESIIGoEmhy8et/dvDsIia3T58+RtxOnDjRLQKhO2nSJBk9erRZN2zYMElKShJvmZUrV8qsWbPcMu7OUZhZs7RANuQWCqJ7E1X0xoGmOqoxxTLWYzvK0UiABEiABEiABEiABJqeQJPG/F577bVy4IEHmuwMSF+GDm/ffPONfPrppya0AZkebr/9dunXr5/5w3x6erqccMIJhhwyNIwfP14uu+wyycnJEWSKuPzyy2XQoEGy7777Rp3u6sV5Ul0Fjy8Ur9/hdBnrsR3lOm/DLBJ+hLhIAiRAAiRAAiRAAo1OoEnF7+rVq+Xkk08WeGshZDHgBYQvcvnCrrzySikpKZHzzjvPhDaMGDFCPv/8c2nTpo0L6oEHHlAva6Icc8wxpuw+++wjzz//vCQkJLhloj3jF5bsHg7rmfPBxcEZEiABEiABEiABEmhyAjGX57cpiNQ3z+/qv/LknXt/ron3TYjz6YiH8A3rFT7i8l3U85vdFKfGY5IACZAACZAACZAACXgIxFzMr6dtMT/bqVeWtNeUZnDvQuiiYxtEL6ZYxnpsRzkaCZAACZAACZAACZBA0xOg+G3ANYjTmN7RR/aV9Kxk4/WtroYI1j+dIh1benay2Y5yNBIgARIgARIgARIggaYnwLAHvQb1DXuwl69mkIu/ZP0KHeQCHeA0BCKnOwa52IaDXFhInJIACZAACZAACZBADBBo0g5vMXD+EWkCRnHr3r+drF1WoANcVEhqZpJ07NlGU57R4xsRwKyEBEiABEiABEiABCJEgOI3QiAhdDv1ZmxvhHCyGhIgARIgARIgARKICgHG/EYFKyslARIgARIgARIgARKIRQIUv7F4VdgmEiABEiABEiABEiCBqBCg+I0KVlZKAiRAAiRAAiRAAiQQiwQofmPxqrBNJEACJEACJEACJEACUSFA8RsVrKyUBEiABEiABEiABEggFglQ/MbiVWGbSIAESIAESIAESIAEokKA4jcqWFkpCZAACZAACZAACZBALBJgnt9IXRWMabxqpkjxepH0HJEuQ0Ti+WwRKbyshwRIgARIgARIgAQiQYDiNxIU/5wkMvkBkXULRaorVPQmiXToJzL2EpFt94zEEVgHCZAACZAACZAACZBABAjQNdlQiBC+H04QWT1bJDlDJLNzzRTLWI/tNBIgARIgARIgARIggZggQPHbkMuAUAd4fMsKRdp0FUlKE4lTpJhiGeuxHeVoJEACJEACJEACJEACTU6A4rchlwAxvgh1SGunojfOtyYsYz22oxyNBEiABEiABEiABEigyQlQ/DbkEqBzG2J8E1MC14L12I5yNBIgARIgARIgARIggSYnQPHbkEuArA7o3FZZFrgWrMd2lKORAAmQAAmQAAmQAAk0OQGK34ZcAqQzQ1aHko0ijuNbE5axHttRjkYCJEACJEACJEACJNDkBCh+G3IJkMcX6cxSMkUKVopUlKgI1s5tmGI5pU3Ndub7bQhl7ksCJEACJEACJEACESNA8dtQlMjje8iDIp13FCkvEilcXTPF8iEPMM9vQ/lyfxIgARIgARIgARKIIIE4Ry2C9TXLqvLz8yU7O1vy8vIkKyurfufAEd7qx417kQAJkAAJkAAJkEAjEuAIb5GCjdCGbkMjVRvrIQESIAESIAESIAESiAIBhj1EASqrJAESIAESIAESIAESiE0CFL+xeV3YKhIgARIgARIgARIggSgQoPiNAlRWSQIkQAIkQAIkQAIkEJsEKH5j87qwVSRAAiRAAiRAAiRAAlEgQPEbBaiskgRIgARIgARIgARIIDYJUPzG5nVhq0iABEiABEiABEiABKJAgOI3ClBZJQmQAAmQAAmQAAmQQGwSoPiNzevCVpEACZAACZAACZAACUSBAMVvFKCyShIgARIgARIgARIggdgkQPEbm9eFrSIBEiABEiABEiABEogCAYrfKEBllSRAAiRAAiRAAiRAArFJgOI3Nq8LW0UCJEACJEACJEACJBAFAhS/UYDKKkmABEiABEiABEiABGKTAMVvbF4XtooESIAESIAESIAESCAKBCh+owCVVZIACZAACZAACZAACcQmAYrf2LwubBUJkAAJkAAJkAAJkEAUCFD8RgEqqyQBEiABEiABEiABEohNAhS/sXld2CoSIAESIAESIAESIIEoEKD4jQJUVkkCJEACJEACJEACJBCbBCh+Y/O6sFUkQAIkQAIkQAIkQAJRIEDxGwWorJIESIAESIAESIAESCA2CVD8xuZ1YatIgARIgARIgARIgASiQIDiNwpQWSUJkAAJkAAJkAAJkEBsEmhS8XvHHXfIrrvuKm3atJFOnTrJ4YcfLvPnz/chddppp0lcXJzP38iRI33KlJWVyYUXXigdOnSQjIwMOfTQQ2X58uU+ZbhAAiRAAiRAAiRAAiRAAk0qfidNmiTnn3++TJs2TSZOnCiVlZWy3377SVFRkc+VOeCAA2TlypXu38cff+yzfcKECfLOO+/Ia6+9JpMnT5bCwkI55JBDpKqqyqccF0iABEiABEiABEiABFo3gThHLVYQrF271niAIYr32GMP0yx4fjdt2iTvvvtuwGbm5eVJx44d5aWXXpJjjz3WlMnNzZWePXsKRPL+++8fcD/vyvz8fMnOzhbUlZWV5d3EeRIgARIgARIgARIggRZEoEk9v/4cIT5h7du399n0zTffGFHcv39/OfPMM2XNmjXu9hkzZkhFRYXxGNuV3bp1k5122kmmTJliV3FKAiRAAiRAAiRAAiRAApIYKwzggL700ktl7NixRrjadh144IFy9NFHS+/evWXx4sVyww03yN577y0QvSkpKbJq1SpJTk6Wdu3a2V3MtHPnzmabz8rNC4gRxp81eH5pJEACJEACJEACJEACLZ9AzIjfCy64QH777TcTs+vFbkMZsA7e3OHDhxsh/NFHH8mRRx7pLeozDzGNjnKBDB3tbr755kCbuI4ESIAESIAESIAESKAFE4iJsAdkanj//ffl66+/lh49etSKu2vXrkb8Lly40JTr0qWLlJeXy8aNG332Q2gEvL+B7JprrjHxvQizwN+yZcsCFeM6EiABEiABEiABEiCBFkagScUvvLPw+L799tvy1VdfSZ8+ferEu379eiNWIYJhw4YNk6SkJJMtwu6MzBCzZs2S0aNH21U+U4RLoGOb98+nABdIgARIgARIgARIgARaJIEmDXtAmrNXXnlF3nvvPZPrF/G7MGReSEtLMynLbrrpJjnqqKMEYvevv/6Sa6+91uTzPeKII9yy48ePl8suu0xycnJMZ7nLL79cBg0aJPvuu68pw39IgARIgARIgARIgARIAASaNNVZsJjc5557TpDirKSkxAx88csvv5h0ZxDAe+21l9x6660mlZm9hKWlpXLFFVcYIY199tlnH3nsscd8ytiygaZMdRaICteRAAmQAAmQAAmQQMsj0KTiN1ZwUvzGypVgO0iABEiABEiABEggugSaNOY3uqfG2kmABEiABEiABEiABEjAlwDFry8PLpEACZAACZAACZAACbRgAhS/Lfji8tRIgARIgARIgARIgAR8CVD8+vLgEgmQAAmQAAmQAAmQQAsmQPHbgi8uT40ESIAESIAESIAESMCXAMWvLw8ukQAJkAAJkAAJkAAJtGACFL8t+OLy1EiABEiABEiABEiABHwJUPz68uASCZAACZAACZAACZBACyZA8duCLy5PjQRIgARIgARIgARIwJcAxa8vDy6RAAmQAAmQAAmQAAm0YAIUvy344vLUSIAESIAESIAESIAEfAlQ/Pry4BIJkAAJkAAJkAAJkEALJkDx24IvLk+NBEiABEiABEiABEjAlwDFry8PLpEACZAACZAACZAACbRgAhS/Lfji8tRIgARIgARIgARIgAR8CVD8+vLgEgmQAAmQAAmQAAmQQAsmQPHbgi8uT40ESIAESIAESIAESMCXAMWvLw8ukQAJkAAJkAAJkAAJtGACFL8t+OLy1EiABEiABEiABEiABHwJUPz68uASCZAACZAACZAACZBACyZA8duCLy5PjQRIgARIgARIgARIwJcAxa8vDy6RAAmQAAmQAAmQAAm0YAIUvy344vLUSIAESIAESIAESIAEfAlQ/Pry4BIJkAAJkAAJkAAJkEALJkDx24IvLk+NBEiABEiABEiABEjAlwDFry8PLpEACZAACZAACZAACbRgAhS/Lfji8tRIgARIgARIgARIgAR8CVD8+vLgEgmQAAmQAAmQAAmQQAsmQPHbgi8uT40ESIAESIAESIAESMCXAMWvLw8ukQAJkAAJkAAJkAAJtGACFL8t+OLy1EiABEiABEiABEiABHwJJPou1r30119/yXfffSeYFhcXS8eOHWXo0KEyatQoSU1NrbsCliABEiABEiABEiABEiCBJiIQsvh95ZVX5OGHH5YffvhBOnXqJN27d5e0tDTZsGGDLFq0yAjfE088Ua666irp3bt3E50OD0sCJEACJEACJEACJEACwQmEJH532WUXiY+Pl9NOO03eeOMN6dWrl0+NZWVlMnXqVHnttddk+PDh8thjj8nRRx/tU4YLJEACJEACJEACJEACJNDUBOIctboa8dFHH8nBBx9cVzGzfd26dbJ48WLZddddQyofC4Xy8/MlOztb8vLyJCsrKxaaxDaQAAmQAAmQAAmQAAlEgUBI4jcKx42pKil+Y+pysDEkQAIkQAIkQAIkEDUCYWd7+Pnnn+X33393G/Tee+/J4YcfLtdee62Ul5e76zlDAiRAAiRAAiRAAiRAArFGIGzxe/bZZ8uCBQvMefz5559y3HHHSXp6uvzvf/+TK6+8MtbOj+0hARIgARIgARIgARIgAZdA2OIXwnfnnXc2FUDw7rHHHoJMEM8//7y89dZbbsWcIQESIAESIAESIAESIIFYIxC2+EX/uOrqanMeX3zxhRx00EFmvmfPnoLObjQSIAESIAESIAESIAESiFUCYYtfpDK77bbb5KWXXpJJkya5WSCQ4aFz586xep5sFwmQAAmQAAmQAAmQAAlI2OL3wQcfFHR6u+CCC+S6666Tvn37GoxvvvmmjB49mkhJgARIgARIgARIgARIIGYJRCzVWWlpqSQkJEhSUlLMnmywhjHVWTAyXE8CJEACJEACJEACLYtASCO8hXLKqampoRRjGRIgARIgARIgARIgARJoMgIhid927dpJXFxcSI3csGFDSOVYiARIgARIgARIgARijcC4ceNMViuEeYZiyHY1YcIE2bRpUyjFWSYGCIQkfr03wPr1602Ht/33319GjRplTmHq1Kny2WefyQ033BADp8QmkAAJkAAJkAAJkAAJkEBgAiGJ31NPPdXd+6ijjpJbbrnFdHizKy+66CJ55JFHBKnPLrnkEruaUxIgARIgARIgARIgARKIKQJhZ3uAh/eAAw7Y6iTgCYb4pZEACZAACZAACZBApAkgHOHCCy80IQYIx0R61aeeekqKiork9NNPlzZt2sh2220nn3zyiXtopGTdbbfdJCUlRbp27SpXX321VFZWutux7ymnnCKZmZlm+3333eduszPl5eVmBNvu3btLRkaGjBgxQr755hu7mdNmSCBs8ZuTkyPvvPPOVqf67rvvCraFY3fccYfsuuuu5obt1KmTHH744TJ//nyfKjCoxk033STdunWTtLQ0wc0/e/ZsnzJlZWXmA9GhQwdzYx566KGyfPlynzJcIAESIAESIAESaN4EXnjhBcFv/Q8//GB+988991w5+uijTapVpGGFI+7kk0+W4uJiWbFihRmICzpj5syZ8vjjj8uzzz5rQjcthSuuuEK+/vpro2s+//xzI2pnzJhhN5sphPX3338vr732mvz222/meHACLly40KccF5oRARWXYdlzzz3nxMfHOzqym3Prrbeav4MPPtjRNGcOtoVjepOafWbNmuX8+uuvDurp1auXU1hY6FZz5513Ovo05+jQyc7vv//uHHvssY4+vTmanswtc8455zj6ROZMnDjR0Zvf2WuvvZwhQ4Y4+nTnlqltJi8vz9FL5mBKIwESIAESIAESiD0Ce+65pzN27Fi3YfiNV0+so2LXXbdy5Urze659kZxrr73WGTBggKOj0rrbH330UUe9vE5VVZVTUFDgJCcnOypq3e3ar8lRR5tz8cUXm3V//PGHox3+HRXSbhnM7LPPPs4111xj1kH7ZGdnm3n+0zwIhBTz69Xyp512mgwcOFAefvhhefvtt0VPU3bYYQfzVIRXAeHYp59+6lNcbyCBBxhPXXvssYepG53tMJjGkUceacriqQ+vOl555RU5++yzRQWreZLDiHP77ruvKfPf//5XMNwywjDwFEgjARIgARIgARJo/gQGDx7sngTGFsAb50GDBrnr7Eiza9askblz55qO+d5sVWPGjBF1sJm3wxs3bhSENNjO+6ikffv2ooLZrQ/eZOic/v37u+swgzfO4b7t9qmAC01KIGzxi9ZC5L788ssRbziELAw3HwxDJq9atUr2228/s4x/ELejT38yZcoUI34hlCsqKnzKIERip512MmUCiV/ctPizhkEuaCRAAiRAAiRAArFNwH8gLQhb7zordNXba0SrXbZnBSELw3o7b7cFmqIeiGxoDUy9hjhhWvMkUC/xi5tBXwUInqww7zV4bOtjuAkvvfRS0VcaRriiDghfmH2SMwubl5csWWIWUUZfWwiC372Gfez+3vWYR6zxzTff7L+ayyRAAiRAAiRAAi2EAN5Ka8ikjwiG4wwd49B5DboBwnnatGmiIZfmrOENXrBggXGyYcXQoUNFQySM3tl9991bCBmeRtjiFzfJCSecIBCf/k9NeJLCTVIfu+CCC0wg+eTJk7faPdCTm/86/53QtmBlNE7HCG27Dzy/CJOgkQAJkAAJkAAJtAwC5513niB0EhkioDHQof7GG280v//ad8lkeBg/fryg0xtCGOA0Q5gltllDuMOJJ55oMkIgEwTE8Lp16+Srr74y4Rba/8kW5bQZEQhb/GrnMhk+fLh89NFHJi1IMIEZDgPcmO+//758++230qNHD3fXLl26mHl4cJGixBo8ztYbjDKI2cHTmtf7izKjR4+2u/hMETqBPxoJkAAJkAAJkEDLJADv7scff2zErXaCNyGVELvXX3+9e8L33HOPiQFGlih4hC+77DLTl8gtoDPoj3TbbbeZbcggAaGMOGEKXy+l5jUfpx7SmgCYENuNHHdIGdK3b98Q9wheDIeG8EXqtG80Z16/fv18CmM74ncxcMaVV15ptkHoolPcXXfd5XZ469ixo6CT2zHHHGPKaG9PI6Jx0weK+fU5iC7A86s9Nc0Nn5WV5b+ZyyRAAiRAAiRAAiRAAi2EQNieX3R2Q7xvJMTv+eefb7I2vPfee+aJy8boQogipy+8yhgv+/bbbzfCGOIY8+np6Sb0AtcAZfEkh6c1PI2hs9zll19uXkfY7A8t5FrxNEiABEiABEiABEiABBpIIGzxC08thCaEKtKLeHtZoi3eNCR1tQ0Jp2Hjxo0zU/sPXjEgpRoMHt+SkhJB7A5CGyC+kYgaryesPfDAA5KYmGg8vyir+ffk+eef36pnpi3PKQmQAAmQAAmQAAmQQOskEHbYgzcQ3CKDhxYhCpjWt8Obrasppgx7aArqPCYJkAAJkAAJkAAJND6BsD2/yL1LIwESIAESIAESIAESIIHmSCBs8du7d+/meJ5sMwmQAAmQAAmQAAmQAAlI2OIXzBYtWmRy52HoQIQ6YLhjHQdbtttuOyIlARIgARIgARIgARIggZglsCWTc4hN/OyzzwSjpvzwww+mcxuGEZ4+fbrsuOOOMnHixBBrYTESIAESIAESIAESIAESaHwCYXd4w+gmyJ175513+rT26quvNlkYfv75Z5/1zWGBHd6aw1ViG0mABEiABEiABEig4QTCFr+pqany+++/bzUgBcbCRpqz0tLShreqkWug+G1k4DwcCZAACZAACZAACTQRgbDDHjCa2q+//rpVc7EOI6/RSIAESIAESIAEWi6BbbbZxvT7aYozxGiw6Gu0adOmqB7+r7/+MscJpHcifeCm5Bnpc2ku9YUtfs8880w566yzzPDC3333nUyePNmEQJx99tlmfXM5cbaTBEiABEiABEggOAEMFtW2bdvgBZpgy+jRo2XlypVmdNcmOHzMHxKabMyYMWbEW4yUu/322wsGAmtphgegd999t96nFXa2hxtuuMGMrnbffffJNddcYw7crVs3uemmm+Siiy6qd0O4IwmQAAmQAAm0VALV1Y7Mzs2XDcXl0j49WXbsliXx8XEt9XS3Oq+KioqtRoTdqlAIK5KTk6VLly4hlGydRTIyMuSCCy4wYaiYhxiGcxLzcFzSagiE7fmF2r7kkktk+fLlkpeXZ/4wj1Rn2EYjARIgARIgARLYQmDKH+vk1Od+kLNf+kkuf2OmmWIZ66Npn376qYwdO9Z4b3NycuSQQw4xqUpxTPta/+2335a99tpL0tPTZciQITJ16lTTJIQXnH766eY3Hr/t+IOTy1pxcbGcccYZxhnWq1cveeqpp+wmt+433nhDxo0bJ+gr9N///leqq6vllltukR49ekhKSorsvPPOgjZas2167bXXBB5e7IdMUmiLtUBhD99//73sueee5hzatWtnOuVv3LjR7hJ0ivbcdddd0rdvX9MenMe///3vgOUxeu348eOlT58+Ao/qgAED5KGHHvIpi3OdMGGCz7rDDz9cTjvtNHfdmjVr5O9//7upA3W9/PLL7jY7A20FoYpQ0qysLNl7771l5syZdnOtUyQlOP744w03hFOcdNJJhgfe1Idi4LvbbrsZsQyvP7zIS5YscXd9/PHHTVpbPISAwUsvveRuwwzuk2eeeUaOOOII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LTUhEEgwDPGLfHA0EiABEiABEiABEiABEohVAmF3eLMnUlxcLHPmzDEJlTHwBXoONldjh7fmeuXYbhIgARIgARIgARIIj0DYYQ+2eowEgtFDMIQehrbDGOI0EiABEiABEiABEiABEohlAmGLXwxr/Mgjj5hzKikpEQw9h3WDBw8W5ACmkQAJkAAJkAAJkAAJkECsEghb/H777bey++67m/N55513TNgDUpw9/PDDctttt8XqebJdJEACJEACJEACMUbgpptu4lDGjXxNTjvtNDn88MMb+aixdbiwxS86u7Vv396cxaeffipHHXWUIATi4IMPloULF8bW2bE1JEACJEACJEACMUsAneW//PLLRm0fBrh48MEHQz4mxjdAJ38MIpGammrSul5//fVBB5vwr/ibb74RZMfy/5s3b55/0YDLFKsBsTRoZdjZHnr27ClTp041Ahji97XXXjMN2Lhxo7kpGtQa7kwCJEACJEACLZFAdbXIqpkixetF0nNEugzRTPth+59aHBk7zG4sn1hSUpIZ1XaXXXaRtm3bmpFtzzzzTPPm+/bbbw+56RDRGBDMWseOHe1so0yrqqqMAG+Ug8X4QcL+5E2YMEFOPPFE6dGjh3Tr1k3GjRtnThHhEIMGDYrx02XzSIAESIAESKCRCfw5SeS/R4q8dpLIu+fVTLGM9VGysrIyueiii6RTp07GMTV27Fj58ccfzdGsJ/Kjjz6SIUOGmO0jRoyQ33//3ac1U6ZMMelMMeQtHF+or6ioyC0DDyrE3xlnnGGG1e3Vq5c89dRT7nbMXHXVVdK/f3/zhhgDYd1www0+HtNwwh4wZDHaAAGak5Nj6j711FN9XuFDkyDtKv5sOXhpHccx7cJ2DBF8ySWXuJ5YnwYHWEC7Tz/9dMMKI6wdeuihRgd99913AUoHX4Vr0aVLF/cvISEheOHNW8DnhRdekPfee89tL66fvYbekXV//fVXU8YO6/z8888bBh9++KEgKxfS0uLcrd18883m/oAgxxgO5eXldpPUdv+4hZrxTNji97zzzpNp06bJ//3f/wlGdYvf/OSKm4Mxv834TmDTSYAESIAEIk8AAvfDCSKrZ4skZ4hkdq6ZYhnroySAkZMfndAhnH7++WfBsLb777+/bNiwwT3HK664Qu69914jiiHMIOoqKirMdghhlD/yyCPlt99+k9dff938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u2JsLwmQQFMQKKksMQMylFWVNcXh6zxmrHZ4q7PhLEACJNCoBOrl+W3UFvJgJEACJEACTUoAqbng6cWURgIkQALNnUDYnt/mfsKB2k/PbyAqXEcCJNDaCcDDu7F0Y7MRvfT8tvY7ludPAqERqFdm7UWLFsn1118vxx9/vMn1i0N9+umn7EkZGnOWIgESIIGYJoBY3tVFq2Vl4cpmI3xjGigbRwIkEFMEwha/GP1l0KBBZhg/DFOIIfxgGObvxhtvjKmTY2NIgARIgARCJ4CsDWuL10puYa4gvpdGAiRAAi2RQNjiF5kebrvtNjPWd3Jysstkr732MmNduys4QwIkQAIk0CwIVFRXyLqSdbKicIUgfRmtdRPAYFYYmpgWmwSQaQuZt2j1JxB2h7fff/9dXnnlla2OiPGr169fv9V6riABEiABEohNAhhqFx3ZIHiZvz02rxFbRQIkEHkCYYvftm3bysqVK6VPnz4+rfnll1+ke/fuPuu4QAIkQAIkEHsEMPwwRC+GI6bobZzr41RXS+mcuVK1caMkaMrQ1B0GSlx82C9fG6exUThKVVWVxMXFSXwrOucoYGSVESIQ9ifvhBNOkKuuukpWrVplbuRq/UB///33cvnll8spp5wSoWaxGhIgARIggUgTgOhF9oblhculoLyAwjfSgIPUVzRtmiz955my/MILJfeaa8wUy1gfLcNv81133SV9+/aVlJQU6dWrl/z73/82h8Mb3L333lvS0tIkJydHzjrrLLf/jrc99957r3Tt2tWUOf/886WiYstIfuXl5XLllVcap1dGRoYZWe2bb75xd3/++ecFzrIPP/xQdthhB9OGJUuWSF37uRUEmYHe2HPPPQXjDGDcgf3331826gMFrKysTC666CLp1KmTpKamytixY+XHH390a0L7IMA/++wzGTp0qDl/cFizZo188sknMnDgQMnKyjKd+TGegbVx48bJhXrtJkyYYI7ZuXNneeqpp6SoqEhOP/10M7DGdtttZ+qw+0Dsjx8/3jgKwXnAgAHy0EMP2c1masNLauOMtv397383bYXTEUM40xpOIGzxiw8PPkTw8qKzG27qPfbYQ0aPHm0yQDS8SayBBEiABEggkgSqnWozOAVievPK8ih6Iwm3jrogcFdqZ/Cy+fMlXgVbooYIYlq2YIFZHy0BfI2KbIjfG264QebMmWPC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GNH42WefydChQ02ZvffeW9asWSOffPKJDBw40Azgdfzxx0txcbG7n5cdVoIHhlxGX6c2bdoI+j899dRTbvlwwh5smz766CPT3tTUVBkxYoT8/vvvbn3PP/+8Oe8PP/xQkGYW12TJkiUSynV0K+GMSyBk8YtObbX9XXLJJW6lnCEBEiCB1kQAg1JA9GKQCqQwo5GAJQCB+83L82Xd8kJJSkmQ9KxkM123osisj5YAvvTSS+X777+X999/XyZOnCjfffedGZHVtuu0004zmZqwferUqaYD5kEHHSQVFRWmyIwZM+SYY46R4447zoiwm266SW644QaBCLN2yimnSG5urkC8QShD/EFEBjOIyb322ksyMzPNoFiTJ0828wcccICUl5cH281df9ddd8nLL78szz33nDk3ZGryjye+/vrrzfbHH39cZs+eLdAmJ510kkyaNMmtBzM4n0ceeUSmTJkiy5YtM+cK0Q4BDxEKZkjjWpvhYWD48OHyyy+/yHnnnSfnnnuuzJs3r7Zdat12xRVXyL333is//vijdOrUSQ499FD3emBH8LvjjjsEw0Dj3FCmrutY6wFb8caQwx6ys7NrxYTt+CDQSIAESKC1ECiuKDad2Mqr6v7hbi1MeJ5bCCDU4efPlkh5aaVktE0xHkdsTUxOkIykeCnKKzfbu/dvF9EQCHh90QEdQm6fffYxDYJg7Natm5mHhxeiF+J49OjRZh1EJeJUISaPPvpoQd5+7AvBC+vfv7/MmTNH7rnnHiO4IPK++OILI9QgAGEQZf369TPzgf557bXXBK/pUQ6dwWBoV9u2bY2A3m+//QLt5q6DGMX4AkcccYRZB/H68ccfu9uLiopMu7/66isZNWqUWQ8PMET2k08+KRifwNptt90mY8aMMYvjx4839S5atMh4jLHyH//4h3z99dfGu2z38Z/iYQGiFwYvNLzreBDYfvvt/YuGtHzjjTfK3/72N1MW169Hjx7yzjvvGGGOlXgweeyxx9y0sqFcx5AO3AoLhSx+cYPSSIAESIAE1AOjohcZHMqqyoiDBIISQIzvxlXFkpqR5Io9WxjiLzU90WxHuU69s+ymBk///PNPI5R22203ty44qAYMGGCW586dK4mJiebVui2AMAJsxzYYpghJ8BrEIryjiDedP3++qWOXXXZxi/Tt29eEM7gr/GbgTf7jjz9MmIB3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BEggcgQofhvIEq/nILTwBe41LI8ePdq7Kibm4T2Bx/ftt9+Wr776yqSR8jYM6drwo+E9H/wQQUDa88H5aoc3nzIrV64UzSDhlhk1apR5ZY3X8dY0K4FZZ+ux6yM53WeffUQzVBgvITyF+ENs7IknnmjmkS6rOZ+fZTVmzJitUtQhNlYzQJgizf064iSKi4tFO2XZUzZTPGjC6w1rCedoTmTzP415Pvh84vOKz601vC1B2Aw+39E0K3wXLlwomqHEpOrzHi9S3y9NeY7e8+E8CZBADBJQMURrIAGb6uzZZ581qc40p6xJdfbXX381sObI737uueeazA3ffPONoz987p8KDfdgSLeE7A4qkE2qM42xDJjqTD3GJr0WUiXtvffeAVOdIc0Y0hnhT713jZrqzJ6QN9sD1rWE80MPefVsOxoD66iIcF5++WVHc/06GiZgT7vZn6eGNph0ejbVGe5HfdPiXHnllc32HJGF5JdffjF/+nPg3H///WbeZjporHvTpgHTh0WT6gxp8vB5jkSqs9rOUYWvoznBzbH0wdT9/sF3kXa2c68rsuc09PslmufoNpQzJEACzZIA4tpoESDw6KOPmryr6gl2dtllFzd1WASqjmgV+MEN9Ifcv9aQcunGG280Kc+Q+miPPfYwIthux7SkpMT8UGqWCEcHIDCiVl+5e4s469evd9TjanIGI28w5vXVqk+ZxljwF78t5fw++OADk6sV1wip9Z566ikfnM39PJFXWuO3TR5qHTzGUa+9yZHrFUnN7Rw1zCjg5w9CH9aY5wPBjXRy+Pzicwzhi7SGDbXazlEzWgQ8f3wnYT9rkfp+idY52nZySgIk0DwJxKHZ+sVDIwESIAESIAESIAESIIEWT8A3oK7Fny5PkARIgARIgARIgARIoDUToPhtzVef504CJEACJEACJEACrYwAxW8ru+A8XRIgARIgARIgARJozQQoflvz1ee5kwAJkAAJkAAJkEArI0Dx28ouOE+XBEiABEiABEiABFozAYrf1nz1ee4kQAIkQAIkQAIk0MoIUPy2sgvO0yUBEiABEiABEiCB1kyA4rc1X32ee9gEdNQ+iYuLM0Mlh71zlHaYN2+ejBw5UnQgCNl5552jdJSWU+3zzz8vbdu2bTknxDMhARIgARIIiwDFb1i4WLipCZx22mlGfOowsD5Neffdd816n5Wt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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAAH+CAYAAACV9Wa6AADWhklEQVR4AeydB2AU1fbGT3olAUKvohRRARGUqmJ59md99i7P3rD3Z332/uzlb3vWZ++KDUWKiorSEZEWeknvmf/5brjD7LKb7Ca7ySb5joZpd+7c+c3s7jdnzj03zlETGgmQAAmQAAmQAAmQAAm0AgLxreAceYokQAIkQAIkQAIkQAIkYAhQ/PJGIAESIAESIAESIAESaDUEKH5bzaXmiZIACZAACZAACZAACVD88h4gARIgARIgARIgARJoNQQoflvNpeaJkgAJkAAJkAAJkAAJUPzyHiABEiABEiABEiABEmg1BCh+W82l5omSAAmQAAmQAAmQAAlQ/PIeIAESIAESIAESIAESaDUEKH5bzaXmiZIACZAACZAACZAACdRb/D7//PMSFxfn/iUmJkrXrl3luOOOk4ULF9aL7DfffGPqwzRcmzNnjtx0003y119/bbXraaedJttss81W6xt7BdqRmZkZ0mHBFucTKUNdqHPdunWRqlI+/vjjiLYxYg2LcEXr16+Xa665RnbYYQdJT0+XrKwsGTlypDz66KNSUVFR76M1Nr/HHntM8Lmty+y94v18B5ofN25cXVWZ+yPS912dB20mBfCdhO+Eugz8LrjggrqKhbS9se+5kBrVgEKRZBOsGfhNsfc/PhuB7IwzznDLBNpe33X4jIXyOQtUf6j3V6B9uY4EWjqB+Iae4HPPPSdTp06VL774wnxBv//++zJ27FjZuHFjQ6sOa3+I35tvvjmg+L3hhhvknXfeCau+pi4Mpv/85z+buhm1Hh8/pGDekm3evHkydOhQefLJJ+XEE0+Ujz76SF577TXZZZdd5OKLL5a//e1vUlxcXC8Ejc0vVPGL+w73n/17++23zfldeOGF7jpsQ3205kWgse+55kWn9ta2adPGPDxWV1f7FCwsLJT//e9/5qHYZwMXSIAEYpZAYkNbttNOO8nw4cNNNXhCraqqkhtvvFHeffddOf300xtafUT232677SJST2NWAs8irWkJ4F4+6qijJD8/X3744Qfp37+/26CDDjpI9txzT/Om49JLL5UnnnjC3dbcZ3r06CH4s2bfpvTq1ct4vO16TkmgNRE49thj5ZlnnpEvv/zSPPTac3/99dfN797hhx8u//3vf+1qTkmABGKY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I47G93oNy1iP7ShHIwESIAESIAESIAESaHoCFL8NuAbI44t0ZvHaya2qskbsWtGLZcQCm+3M99sAytyVBEiABEiABEiABCJHgKnOGsjSpjGzeX6R1wGhDinpiczz20C23J0ESIAESIAESIAEIk0gzlGLdKXNrb78/HzJzs6WvLw8ycrKqlfzOcJbvbBxJxIgARIgARIgARJoVAL0/EYIN0IgBozsGqHaWA0JkAAJkAAJkAAJkEA0CDDmNxpUWScJkAAJkAAJkAAJkEBMEqD4jcnLwkaRAAmQAAmQAAmQAAlEgwDFbzSosk4SIAESIAESIAESIIGYJEDxG5OXhY0iARIgARIgARIgARKIBgGK32hQZZ0kQAIkQAIkQAIkQAIxSYDiNyYvCxtFAiRAAiRAAiRAAiQQDQIUv9GgyjpJgARIgARIgARIgARikgDFb0xeFjaKBEiABEiABEiABEggGgQofqNBlXWSAAmQAAmQAAmQAAnEJAGK35i8LGwUCZAACZAACZAACZBANAhQ/EaDKuskARIgARIgARIgARKISQIUvzF5WdgoEiABEiABEiABEiCBaBCg+I0GVdZJAiRAAiRAAiRAAiQQkwQofmPysrBRJEACJEACJEACJEAC0SBA8RsNqqyTBEiABEiABEiABEggJglQ/MbkZWGjSIAESIAESIAESIAEokGA4jcaVFknCZAACZAACZAACZBATBKg+I3Jy8JGkQAJkAAJkAAJkAAJRIMAxW80qLJOEiABEiABEiABEiCBmCRA8RuTl4WNIgESIAESIAESIAESiAYBit9oUGWdJEACJEACJEACJEACMUmA4jcmLwsbRQIkQAIkQAIkQAIkEA0CFL/RoMo6SYAESIAESIAESIAEYpIAxW9MXhY2igRIgARIgARIgARIIBoEKH6jQZV1kgAJkAAJkAAJkAAJxCSBJhW/jz/+uAwePFiysrLM36hRo+STTz5xQTmOIzfddJN069ZN0tLSZNy4cTJ79mx3O2bKysrkwgsvlA4dOkhGRoYceuihsnz5cp8yXCABEiABEiABEiABEiABEGhS8dujRw+588475aeffjJ/e++9txx22GGuwL377rvl/vvvl0ceeUR+/PFH6dKli/ztb3+TgoIC9+pNmDBB3nnnHXnttddk8uTJUlhYKIcccohUVVW5ZThDAiRAAiRAAiRAAiRAAiAQp95VJ5ZQtG/fXu655x4544wzjMcX4vaqq64yTYSXt3PnznLXXXfJ2WefLXl5edKxY0d56aWX5NhjjzVlcnNzpWfPnvLxxx/L/vvvH9Kp5efnS3Z2tqkPXmgaCZAACZAACZAACZBAyyTQpJ5fL1J4auG9LSoqEoQ/LF68WFatWiX77befWywlJUX23HNPmTJlilk3Y8YMqaio8CmDEImddtrJLePu7JmBiIbg9f55Ntdr1ql2ZM2SfFk6e72ZYplGAiRAAiRAAiRAAiQQWwQSm7o5v//+uxG7paWlkpmZaUIYdthhB1e8wtPrNSwvWbLErII4Tk5Olnbt2nmLGO8wtgWzO+64Q26++eZgm8Nev3zeBpnx6RJZn1sk1ZXVEp8YLzndMmTYAb2lx/btw66PO5AACZAACZAACZAACUSHQJN7fgcMGCC//vqrTJs2Tc4991w59dRTZc6cOe7ZxsXFufOYQZSG/zqfAiGUueaaa0yIA8Im8Lds2TL/KkJehvD94vk5krtwk5QWlkt5SaWZYhnrsZ1GAiRAAiRAAiRAAiQQGwSaXPzCc9u3b18ZPny4wCM7ZMgQeeihh0znNiDy9+CuWbPGeHaxDR3gysvLZePGjVh0zVvGXemZQfiEzTBhp57NIc8itGHK24ukOK9cqnU+Pj5eEtTriymWsR7bGQIRMlIWJAESIAESIAESIIGoEmhy8et/dvDsIia3T58+RtxOnDjRLQKhO2nSJBk9erRZN2zYMElKShJvmZUrV8qsWbPcMu7OUZhZs7RANuQWCqJ7E1X0xoGmOqoxxTLWYzvK0UiABEiABEiABEiABJqeQJPG/F577bVy4IEHmuwMSF+GDm/ffPONfPrppya0AZkebr/9dunXr5/5w3x6erqccMIJhhwyNIwfP14uu+wyycnJEWSKuPzyy2XQoEGy7777Rp3u6sV5Ul0Fjy8Ur9/hdBnrsR3lOm/DLBJ+hLhIAiRAAiRAAiRAAo1OoEnF7+rVq+Xkk08WeGshZDHgBYQvcvnCrrzySikpKZHzzjvPhDaMGDFCPv/8c2nTpo0L6oEHHlAva6Icc8wxpuw+++wjzz//vCQkJLhloj3jF5bsHg7rmfPBxcEZEiABEiABEiABEmhyAjGX57cpiNQ3z+/qv/LknXt/ron3TYjz6YiH8A3rFT7i8l3U85vdFKfGY5IACZAACZAACZAACXgIxFzMr6dtMT/bqVeWtNeUZnDvQuiiYxtEL6ZYxnpsRzkaCZAACZAACZAACZBA0xOg+G3ANYjTmN7RR/aV9Kxk4/WtroYI1j+dIh1benay2Y5yNBIgARIgARIgARIggaYnwLAHvQb1DXuwl69mkIu/ZP0KHeQCHeA0BCKnOwa52IaDXFhInJIACZAACZAACZBADBBo0g5vMXD+EWkCRnHr3r+drF1WoANcVEhqZpJ07NlGU57R4xsRwKyEBEiABEiABEiABCJEgOI3QiAhdDv1ZmxvhHCyGhIgARIgARIgARKICgHG/EYFKyslARIgARIgARIgARKIRQIUv7F4VdgmEiABEiABEiABEiCBqBCg+I0KVlZKAiRAAiRAAiRAAiQQiwQofmPxqrBNJEACJEACJEACJEACUSFA8RsVrKyUBEiABEiABEiABEggFglQ/MbiVWGbSIAESIAESIAESIAEokKA4jcqWFkpCZAACZAACZAACZBALBJgnt9IXRWMabxqpkjxepH0HJEuQ0Ti+WwRKbyshwRIgARIgARIgAQiQYDiNxIU/5wkMvkBkXULRaorVPQmiXToJzL2EpFt94zEEVgHCZAACZAACZAACZBABAjQNdlQiBC+H04QWT1bJDlDJLNzzRTLWI/tNBIgARIgARIgARIggZggQPHbkMuAUAd4fMsKRdp0FUlKE4lTpJhiGeuxHeVoJEACJEACJEACJEACTU6A4rchlwAxvgh1SGunojfOtyYsYz22oxyNBEiABEiABEiABEigyQlQ/DbkEqBzG2J8E1MC14L12I5yNBIgARIgARIgARIggSYnQPHbkEuArA7o3FZZFrgWrMd2lKORAAmQAAmQAAmQAAk0OQGK34ZcAqQzQ1aHko0ijuNbE5axHttRjkYCJEACJEACJEACJNDkBCh+G3IJkMcX6cxSMkUKVopUlKgI1s5tmGI5pU3Ndub7bQhl7ksCJEACJEACJEACESNA8dtQlMjje8iDIp13FCkvEilcXTPF8iEPMM9vQ/lyfxIgARIgARIgARKIIIE4Ry2C9TXLqvLz8yU7O1vy8vIkKyurfufAEd7qx417kQAJkAAJkAAJkEAjEuAIb5GCjdCGbkMjVRvrIQESIAESIAESIAESiAIBhj1EASqrJAESIAESIAESIAESiE0CFL+xeV3YKhIgARIgARIgARIggSgQoPiNAlRWSQIkQAIkQAIkQAIkEJsEKH5j87qwVSRAAiRAAiRAAiRAAlEgQPEbBaiskgRIgARIgARIgARIIDYJUPzG5nVhq0iABEiABEiABEiABKJAgOI3ClBZJQmQAAmQAAmQAAmQQGwSoPiNzevCVpEACZAACZAACZAACUSBAMVvFKCyShIgARIgARIgARIggdgkQPEbm9eFrSIBEiABEiABEiABEogCAYrfKEBllSRAAiRAAiRAAiRAArFJgOI3Nq8LW0UCJEACJEACJEACJBAFAhS/UYDKKkmABEiABEiABEiABGKTAMVvbF4XtooESIAESIAESIAESCAKBCh+owCVVZIACZAACZAACZAACcQmAYrf2LwubBUJkAAJkAAJkAAJkEAUCFD8RgEqqyQBEiABEiABEiABEohNAhS/sXld2CoSIAESIAESIAESIIEoEKD4jQJUVkkCJEACJEACJEACJBCbBCh+Y/O6sFUkQAIkQAIkQAIkQAJRIEDxGwWorJIESIAESIAESIAESCA2CVD8xuZ1YatIgARIgARIgARIgASiQIDiNwpQWSUJkAAJkAAJkAAJkEBsEmhS8XvHHXfIrrvuKm3atJFOnTrJ4YcfLvPnz/chddppp0lcXJzP38iRI33KlJWVyYUXXigdOnSQjIwMOfTQQ2X58uU+ZbhAAiRAAiRAAiRAAiRAAk0qfidNmiTnn3++TJs2TSZOnCiVlZWy3377SVFRkc+VOeCAA2TlypXu38cff+yzfcKECfLOO+/Ia6+9JpMnT5bCwkI55JBDpKqqyqccF0iABEiABEiABEiABFo3gThHLVYQrF271niAIYr32GMP0yx4fjdt2iTvvvtuwGbm5eVJx44d5aWXXpJjjz3WlMnNzZWePXsKRPL+++8fcD/vyvz8fMnOzhbUlZWV5d3EeRIgARIgARIgARIggRZEoEk9v/4cIT5h7du399n0zTffGFHcv39/OfPMM2XNmjXu9hkzZkhFRYXxGNuV3bp1k5122kmmTJliV3FKAiRAAiRAAiRAAiRAApIYKwzggL700ktl7NixRrjadh144IFy9NFHS+/evWXx4sVyww03yN577y0QvSkpKbJq1SpJTk6Wdu3a2V3MtHPnzmabz8rNC4gRxp81eH5pJEACJEACJEACJEACLZ9AzIjfCy64QH777TcTs+vFbkMZsA7e3OHDhxsh/NFHH8mRRx7pLeozDzGNjnKBDB3tbr755kCbuI4ESIAESIAESIAESKAFE4iJsAdkanj//ffl66+/lh49etSKu2vXrkb8Lly40JTr0qWLlJeXy8aNG332Q2gEvL+B7JprrjHxvQizwN+yZcsCFeM6EiABEiABEiABEiCBFkagScUvvLPw+L799tvy1VdfSZ8+ferEu379eiNWIYJhw4YNk6SkJJMtwu6MzBCzZs2S0aNH21U+U4RLoGOb98+nABdIgARIgARIgARIgARaJIEmDXtAmrNXXnlF3nvvPZPrF/G7MGReSEtLMynLbrrpJjnqqKMEYvevv/6Sa6+91uTzPeKII9yy48ePl8suu0xycnJMZ7nLL79cBg0aJPvuu68pw39IgARIgARIgARIgARIAASaNNVZsJjc5557TpDirKSkxAx88csvv5h0ZxDAe+21l9x6660mlZm9hKWlpXLFFVcYIY199tlnH3nsscd8ytiygaZMdRaICteRAAmQAAmQAAmQQMsj0KTiN1ZwUvzGypVgO0iABEiABEiABEggugSaNOY3uqfG2kmABEiABEiABEiABEjAlwDFry8PLpEACZAACZAACZAACbRgAhS/Lfji8tRIgARIgARIgARIgAR8CVD8+vLgEgmQAAmQAAmQAAmQQAsmQPHbgi8uT40ESIAESIAESIAESMCXAMWvLw8ukQAJkAAJkAAJkAAJtGACFL8t+OLy1EiABEiABEiABEiABHwJUPz68uASCZAACZAACZAACZBACyZA8duCLy5PjQRIgARIgARIgARIwJcAxa8vDy6RAAmQAAmQAAmQAAm0YAIUvy344vLUSIAESIAESIAESIAEfAlQ/Pry4BIJkAAJkAAJkAAJkEALJkDx24IvLk+NBEiABEiABEiABEjAlwDFry8PLpEACZAACZAACZAACbRgAhS/Lfji8tRIgARIgARIgARIgAR8CVD8+vLgEgmQAAmQAAmQAAmQQAsmQPHbgi8uT40ESIAESIAESIAESMCXAMWvLw8ukQAJkAAJkAAJkAAJtGACFL8t+OLy1EiABEiABEiABEiABHwJUPz68uASCZAACZAACZAACZBACyZA8duCLy5PjQRIgARIgARIgARIwJcAxa8vDy6RAAmQAAmQAAmQAAm0YAIUvy344vLUSIAESIAESIAESIAEfAlQ/Pry4BIJkAAJkAAJkAAJkEALJkDx24IvLk+NBEiABEiABEiABEjAlwDFry8PLpEACZAACZAACZAACbRgAhS/Lfji8tRIgARIgARIgARIgAR8CVD8+vLgEgmQAAmQAAmQAAmQQAsmQPHbgi8uT40ESIAESIAESIAESMCXAMWvLw8ukQAJkAAJkAAJkAAJtGACFL8t+OLy1EiABEiABEiABEiABHwJJPou1r30119/yXfffSeYFhcXS8eOHWXo0KEyatQoSU1NrbsCliABEiABEiABEiABEiCBJiIQsvh95ZVX5OGHH5YffvhBOnXqJN27d5e0tDTZsGGDLFq0yAjfE088Ua666irp3bt3E50OD0sCJEACJEACJEACJEACwQmEJH532WUXiY+Pl9NOO03eeOMN6dWrl0+NZWVlMnXqVHnttddk+PDh8thjj8nRRx/tU4YLJEACJEACJEACJEACJNDUBOIctboa8dFHH8nBBx9cVzGzfd26dbJ48WLZddddQyofC4Xy8/MlOztb8vLyJCsrKxaaxDaQAAmQAAmQAAmQAAlEgUBI4jcKx42pKil+Y+pysDEkQAIkQAIkQAIkEDUCYWd7+Pnnn+X33393G/Tee+/J4YcfLtdee62Ul5e76zlDAiRAAiRAAiRAAiRAArFGIGzxe/bZZ8uCBQvMefz5559y3HHHSXp6uvzvf/+TK6+8MtbOj+0hARIgARIgARIgARIgAZdA2OIXwnfnnXc2FUDw7rHHHoJMEM8//7y89dZbbsWcIQESIAESIAESIAESIIFYIxC2+EX/uOrqanMeX3zxhRx00EFmvmfPnoLObjQSIAESIAESIAESIAESiFUCYYtfpDK77bbb5KWXXpJJkya5WSCQ4aFz586xep5sFwmQAAmQAAmQAAmQAAlI2OL3wQcfFHR6u+CCC+S6666Tvn37GoxvvvmmjB49mkhJgARIgARIgARIgARIIGYJRCzVWWlpqSQkJEhSUlLMnmywhjHVWTAyXE8CJEACJEACJEACLYtASCO8hXLKqampoRRjGRIgARIgARIgARIgARJoMgIhid927dpJXFxcSI3csGFDSOVYiARIgARIgARIgARijcC4ceNMViuEeYZiyHY1YcIE2bRpUyjFWSYGCIQkfr03wPr1602Ht/33319GjRplTmHq1Kny2WefyQ033BADp8QmkAAJkAAJkAAJkAAJkEBgAiGJ31NPPdXd+6ijjpJbbrnFdHizKy+66CJ55JFHBKnPLrnkEruaUxIgARIgARIgARIgARKIKQJhZ3uAh/eAAw7Y6iTgCYb4pZEACZAACZAACZBApAkgHOHCCy80IQYIx0R61aeeekqKiork9NNPlzZt2sh2220nn3zyiXtopGTdbbfdJCUlRbp27SpXX321VFZWutux7ymnnCKZmZlm+3333eduszPl5eVmBNvu3btLRkaGjBgxQr755hu7mdNmSCBs8ZuTkyPvvPPOVqf67rvvCraFY3fccYfsuuuu5obt1KmTHH744TJ//nyfKjCoxk033STdunWTtLQ0wc0/e/ZsnzJlZWXmA9GhQwdzYx566KGyfPlynzJcIAESIAESIAESaN4EXnjhBcFv/Q8//GB+988991w5+uijTapVpGGFI+7kk0+W4uJiWbFihRmICzpj5syZ8vjjj8uzzz5rQjcthSuuuEK+/vpro2s+//xzI2pnzJhhN5sphPX3338vr732mvz222/meHACLly40KccF5oRARWXYdlzzz3nxMfHOzqym3Prrbeav4MPPtjRNGcOtoVjepOafWbNmuX8+uuvDurp1auXU1hY6FZz5513Ovo05+jQyc7vv//uHHvssY4+vTmanswtc8455zj6ROZMnDjR0Zvf2WuvvZwhQ4Y4+nTnlqltJi8vz9FL5mBKIwESIAESIAESiD0Ce+65pzN27Fi3YfiNV0+so2LXXbdy5Urze659kZxrr73WGTBggKOj0rrbH330UUe9vE5VVZVTUFDgJCcnOypq3e3ar8lRR5tz8cUXm3V//PGHox3+HRXSbhnM7LPPPs4111xj1kH7ZGdnm3n+0zwIhBTz69Xyp512mgwcOFAefvhhefvtt0VPU3bYYQfzVIRXAeHYp59+6lNcbyCBBxhPXXvssYepG53tMJjGkUceacriqQ+vOl555RU5++yzRQWreZLDiHP77ruvKfPf//5XMNwywjDwFEgjARIgARIgARJo/gQGDx7sngTGFsAb50GDBrnr7Eiza9askblz55qO+d5sVWPGjBF1sJm3wxs3bhSENNjO+6ikffv2ooLZrQ/eZOic/v37u+swgzfO4b7t9qmAC01KIGzxi9ZC5L788ssRbziELAw3HwxDJq9atUr2228/s4x/ELejT38yZcoUI34hlCsqKnzKIERip512MmUCiV/ctPizhkEuaCRAAiRAAiRAArFNwH8gLQhb7zordNXba0SrXbZnBSELw3o7b7cFmqIeiGxoDUy9hjhhWvMkUC/xi5tBXwUInqww7zV4bOtjuAkvvfRS0VcaRriiDghfmH2SMwubl5csWWIWUUZfWwiC372Gfez+3vWYR6zxzTff7L+ayyRAAiRAAiRAAi2EAN5Ka8ikjwiG4wwd49B5DboBwnnatGmiIZfmrOENXrBggXGyYcXQoUNFQySM3tl9991bCBmeRtjiFzfJCSecIBCf/k9NeJLCTVIfu+CCC0wg+eTJk7faPdCTm/86/53QtmBlNE7HCG27Dzy/CJOgkQAJkAAJkAAJtAwC5513niB0EhkioDHQof7GG280v//ad8lkeBg/fryg0xtCGOA0Q5gltllDuMOJJ55oMkIgEwTE8Lp16+Srr74y4Rba/8kW5bQZEQhb/GrnMhk+fLh89NFHJi1IMIEZDgPcmO+//758++230qNHD3fXLl26mHl4cJGixBo8ztYbjDKI2cHTmtf7izKjR4+2u/hMETqBPxoJkAAJkAAJkEDLJADv7scff2zErXaCNyGVELvXX3+9e8L33HOPiQFGlih4hC+77DLTl8gtoDPoj3TbbbeZbcggAaGMOGEKXy+l5jUfpx7SmgCYENuNHHdIGdK3b98Q9wheDIeG8EXqtG80Z16/fv18CmM74ncxcMaVV15ptkHoolPcXXfd5XZ469ixo6CT2zHHHGPKaG9PI6Jx0weK+fU5iC7A86s9Nc0Nn5WV5b+ZyyRAAiRAAiRAAiRAAi2EQNieX3R2Q7xvJMTv+eefb7I2vPfee+aJy8boQogipy+8yhgv+/bbbzfCGOIY8+np6Sb0AtcAZfEkh6c1PI2hs9zll19uXkfY7A8t5FrxNEiABEiABEiABEiABBpIIGzxC08thCaEKtKLeHtZoi3eNCR1tQ0Jp2Hjxo0zU/sPXjEgpRoMHt+SkhJB7A5CGyC+kYgaryesPfDAA5KYmGg8vyir+ffk+eef36pnpi3PKQmQAAmQAAmQAAmQQOskEHbYgzcQ3CKDhxYhCpjWt8Obrasppgx7aArqPCYJkAAJkAAJkAAJND6BsD2/yL1LIwESIAESIAESIAESIIHmSCBs8du7d+/meJ5sMwmQAAmQAAmQAAmQAAlI2OIXzBYtWmRy52HoQIQ6YLhjHQdbtttuOyIlARIgARIgARIgARIggZglsCWTc4hN/OyzzwSjpvzwww+mcxuGEZ4+fbrsuOOOMnHixBBrYTESIAESIAESIAESIAESaHwCYXd4w+gmyJ175513+rT26quvNlkYfv75Z5/1zWGBHd6aw1ViG0mABEiABEiABEig4QTCFr+pqany+++/bzUgBcbCRpqz0tLShreqkWug+G1k4DwcCZAACZAACZAACTQRgbDDHjCa2q+//rpVc7EOI6/RSIAESIAESIAEWi6BbbbZxvT7aYozxGiw6Gu0adOmqB7+r7/+MscJpHcifeCm5Bnpc2ku9YUtfs8880w566yzzPDC3333nUyePNmEQJx99tlmfXM5cbaTBEiABEiABEggOAEMFtW2bdvgBZpgy+jRo2XlypVmdNcmOHzMHxKabMyYMWbEW4yUu/322wsGAmtphgegd999t96nFXa2hxtuuMGMrnbffffJNddcYw7crVs3uemmm+Siiy6qd0O4IwmQAAmQAAm0VALV1Y7Mzs2XDcXl0j49WXbsliXx8XEt9XS3Oq+KioqtRoTdqlAIK5KTk6VLly4hlGydRTIyMuSCCy4wYaiYhxiGcxLzcFzSagiE7fmF2r7kkktk+fLlkpeXZ/4wj1Rn2EYjARIgARIgARLYQmDKH+vk1Od+kLNf+kkuf2OmmWIZ66Npn376qYwdO9Z4b3NycuSQQw4xqUpxTPta/+2335a99tpL0tPTZciQITJ16lTTJIQXnH766eY3Hr/t+IOTy1pxcbGcccYZxhnWq1cveeqpp+wmt+433nhDxo0bJ+gr9N///leqq6vllltukR49ekhKSorsvPPOgjZas2167bXXBB5e7IdMUmiLtUBhD99//73sueee5hzatWtnOuVv3LjR7hJ0ivbcdddd0rdvX9MenMe///3vgOUxeu348eOlT58+Ao/qgAED5KGHHvIpi3OdMGGCz7rDDz9cTjvtNHfdmjVr5O9//7upA3W9/PLL7jY7A20FoYpQ0qysLNl7771l5syZdnOtUyQlOP744w03hFOcdNJJhgfe1Idi4LvbbrsZsQyvP7zIS5YscXd9/PHHTVpbPISAwUsvveRuwwzuk2eeeUaOOOII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LTUhEEgwDPGLfHA0EiABEiABEiABEiABEohVAmF3eLMnUlxcLHPmzDEJlTHwBXoONldjh7fmeuXYbhIgARIgARIgARIIj0DYYQ+2eowEgtFDMIQehrbDGOI0EiABEiABEiABEiABEohlAmGLXwxr/Mgjj5hzKikpEQw9h3WDBw8W5ACmkQAJkAAJkAAJkAAJkECsEghb/H777bey++67m/N55513TNgDUpw9/PDDctttt8XqebJdJEACJEACJEACMUbgpptu4lDGjXxNTjvtNDn88MMb+aixdbiwxS86u7Vv396cxaeffipHHXWUIATi4IMPloULF8bW2bE1JEACJEACJEACMUsAneW//PLLRm0fBrh48MEHQz4mxjdAJ38MIpGammrSul5//fVBB5vwr/ibb74RZMfy/5s3b55/0YDLFKsBsTRoZdjZHnr27ClTp041Ahji97XXXjMN2Lhxo7kpGtQa7kwCJEACJEACLZFAdbXIqpkixetF0nNEugzRTPth+59aHBk7zG4sn1hSUpIZ1XaXXXaRtm3bmpFtzzzzTPPm+/bbbw+56RDRGBDMWseOHe1so0yrqqqMAG+Ug8X4QcL+5E2YMEFOPPFE6dGjh3Tr1k3GjRtnThHhEIMGDYrx02XzSIAESIAESKCRCfw5SeS/R4q8dpLIu+fVTLGM9VGysrIyueiii6RTp07GMTV27Fj58ccfzdGsJ/Kjjz6SIUOGmO0jRoyQ33//3ac1U6ZMMelMMeQtHF+or6ioyC0DDyrE3xlnnGGG1e3Vq5c89dRT7nbMXHXVVdK/f3/zhhgDYd1www0+HtNwwh4wZDHaAAGak5Nj6j711FN9XuFDkyDtKv5sOXhpHccx7cJ2DBF8ySWXuJ5YnwYHWEC7Tz/9dMMKI6wdeuihRgd99913AUoHX4Vr0aVLF/cvISEheOHNW8DnhRdekPfee89tL66fvYbekXV//fVXU8YO6/z8888bBh9++KEgKxfS0uLcrd18883m/oAgxxgO5eXldpPUdv+4hZrxTNji97zzzpNp06bJ//3f/wlGdYvf/OSKm4Mxv834TmDTSYAESIAEIk8AAvfDCSKrZ4skZ4hkdq6ZYhnroySAkZMfndAhnH7++WfBsLb777+/bNiwwT3HK664Qu69914jiiHMIOoqKirMdghhlD/yyCPlt99+k9dff938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u2JsLwmQQFMQKKksMQMylFWVNcXh6zxmrHZ4q7PhLEACJNCoBOrl+W3UFvJgJEACJEACTUoAqbng6cWURgIkQALNnUDYnt/mfsKB2k/PbyAqXEcCJNDaCcDDu7F0Y7MRvfT8tvY7ludPAqERqFdm7UWLFsn1118vxx9/vMn1i0N9+umn7EkZGnOWIgESIIGYJoBY3tVFq2Vl4cpmI3xjGigbRwIkEFMEwha/GP1l0KBBZhg/DFOIIfxgGObvxhtvjKmTY2NIgARIgARCJ4CsDWuL10puYa4gvpdGAiRAAi2RQNjiF5kebrvtNjPWd3Jysstkr732MmNduys4QwIkQAIk0CwIVFRXyLqSdbKicIUgfRmtdRPAYFYYmpgWmwSQaQuZt2j1JxB2h7fff/9dXnnlla2OiPGr169fv9V6riABEiABEohNAhhqFx3ZIHiZvz02rxFbRQIkEHkCYYvftm3bysqVK6VPnz4+rfnll1+ke/fuPuu4QAIkQAIkEHsEMPwwRC+GI6bobZzr41RXS+mcuVK1caMkaMrQ1B0GSlx82C9fG6exUThKVVWVxMXFSXwrOucoYGSVESIQ9ifvhBNOkKuuukpWrVplbuRq/UB///33cvnll8spp5wSoWaxGhIgARIggUgTgOhF9oblhculoLyAwjfSgIPUVzRtmiz955my/MILJfeaa8wUy1gfLcNv81133SV9+/aVlJQU6dWrl/z73/82h8Mb3L333lvS0tIkJydHzjrrLLf/jrc99957r3Tt2tWUOf/886WiYstIfuXl5XLllVcap1dGRoYZWe2bb75xd3/++ecFzrIPP/xQdthhB9OGJUuWSF37uRUEmYHe2HPPPQXjDGDcgf3331826gMFrKysTC666CLp1KmTpKamytixY+XHH390a0L7IMA/++wzGTp0qDl/cFizZo188sknMnDgQMnKyjKd+TGegbVx48bJhXrtJkyYYI7ZuXNneeqpp6SoqEhOP/10M7DGdtttZ+qw+0Dsjx8/3jgKwXnAgAHy0EMP2c1masNLauOMtv397383bYXTEUM40xpOIGzxiw8PPkTw8qKzG27qPfbYQ0aPHm0yQDS8SayBBEiABEggkgSqnWozOAVievPK8ih6Iwm3jrogcFdqZ/Cy+fMlXgVbooYIYlq2YIFZHy0BfI2KbIjfG264QebMmWPC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GNH42WefydChQ02ZvffeW9asWSOffPKJDBw40Azgdfzxx0txcbG7n5cdVoIHhlxGX6c2bdoI+j899dRTbvlwwh5smz766CPT3tTUVBkxYoT8/vvvbn3PP/+8Oe8PP/xQkGYW12TJkiUSynV0K+GMSyBk8YtObbX9XXLJJW6lnCEBEiCB1kQAg1JA9GKQCqQwo5GAJQCB+83L82Xd8kJJSkmQ9KxkM123osisj5YAvvTSS+X777+X999/XyZOnCjfffedGZHVtuu0004zmZqwferUqaYD5kEHHSQVFRWmyIwZM+SYY46R4447zoiwm266SW644QaBCLN2yimnSG5urkC8QShD/EFEBjOIyb322ksyMzPNoFiTJ0828wcccICUl5cH281df9ddd8nLL78szz33nDk3ZGryjye+/vrrzfbHH39cZs+eLdAmJ510kkyaNMmtBzM4n0ceeUSmTJkiy5YtM+cK0Q4BDxEKZkjjWpvhYWD48OHyyy+/yHnnnSfnnnuuzJs3r7Zdat12xRVXyL333is//vijdOrUSQ499FD3emBH8LvjjjsEw0Dj3FCmrutY6wFb8caQwx6ys7NrxYTt+CDQSIAESKC1ECiuKDad2Mqr6v7hbi1MeJ5bCCDU4efPlkh5aaVktE0xHkdsTUxOkIykeCnKKzfbu/dvF9EQCHh90QEdQm6fffYxDYJg7Natm5mHhxeiF+J49OjRZh1EJeJUISaPPvpoQd5+7AvBC+vfv7/MmTNH7rnnHiO4IPK++OILI9QgAGEQZf369TPzgf557bXXBK/pUQ6dwWBoV9u2bY2A3m+//QLt5q6DGMX4AkcccYRZB/H68ccfu9uLiopMu7/66isZNWqUWQ8PMET2k08+KRifwNptt90mY8aMMYvjx4839S5atMh4jLHyH//4h3z99dfGu2z38Z/iYQGiFwYvNLzreBDYfvvt/YuGtHzjjTfK3/72N1MW169Hjx7yzjvvGGGOlXgweeyxx9y0sqFcx5AO3AoLhSx+cYPSSIAESIAE1AOjohcZHMqqyoiDBIISQIzvxlXFkpqR5Io9WxjiLzU90WxHuU69s+ymBk///PNPI5R22203ty44qAYMGGCW586dK4mJiebVui2AMAJsxzYYpghJ8BrEIryjiDedP3++qWOXXXZxi/Tt29eEM7gr/GbgTf7jjz9MmIB3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BEggcgQofhvIEq/nILTwBe41LI8ePdq7Kibm4T2Bx/ftt9+Wr776yqSR8jYM6drwo+E9H/wQQUDa88H5aoc3nzIrV64UzSDhlhk1apR5ZY3X8dY0K4FZZ+ux6yM53WeffUQzVBgvITyF+ENs7IknnmjmkS6rOZ+fZTVmzJitUtQhNlYzQJgizf064iSKi4tFO2XZUzZTPGjC6w1rCedoTmTzP415Pvh84vOKz601vC1B2Aw+39E0K3wXLlwomqHEpOrzHi9S3y9NeY7e8+E8CZBADBJQMURrIAGb6uzZZ581qc40p6xJdfbXX381sObI737uueeazA3ffPONoz987p8KDfdgSLeE7A4qkE2qM42xDJjqTD3GJr0WUiXtvffeAVOdIc0Y0hnhT713jZrqzJ6QN9sD1rWE80MPefVsOxoD66iIcF5++WVHc/06GiZgT7vZn6eGNph0ejbVGe5HfdPiXHnllc32HJGF5JdffjF/+nPg3H///WbeZjporHvTpgHTh0WT6gxp8vB5jkSqs9rOUYWvoznBzbH0wdT9/sF3kXa2c68rsuc09PslmufoNpQzJEACzZIA4tpoESDw6KOPmryr6gl2dtllFzd1WASqjmgV+MEN9Ifcv9aQcunGG280Kc+Q+miPPfYwIthux7SkpMT8UGqWCEcHIDCiVl+5e4s469evd9TjanIGI28w5vXVqk+ZxljwF78t5fw++OADk6sV1wip9Z566ikfnM39PJFXWuO3TR5qHTzGUa+9yZHrFUnN7Rw1zCjg5w9CH9aY5wPBjXRy+Pzicwzhi7SGDbXazlEzWgQ8f3wnYT9rkfp+idY52nZySgIk0DwJxKHZ+sVDIwESIAESIAESIAESIIEWT8A3oK7Fny5PkARIgARIgARIgARIoDUToPhtzVef504CJEACJEACJEACrYwAxW8ru+A8XRIgARIgARIgARJozQQoflvz1ee5kwAJkAAJkAAJkEArI0Dx28ouOE+XBEiABEiABEiABFozAYrf1nz1ee4kQAIkQAIkQAIk0MoIUPy2sgvO0yUBEiABEiABEiCB1kyA4rc1X32ee9gEdNQ+iYuLM0Mlh71zlHaYN2+ejBw5UnQgCNl5552jdJSWU+3zzz8vbdu2bTknxDMhARIgARIIiwDFb1i4WLipCZx22mlGfOowsD5Neffdd816n5Wt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", "text/plain": [ "" ] diff --git a/docs/api_reference/guide_imports.json b/docs/api_reference/guide_imports.json index 9f9a7f8e6db07..ade5a724e088f 100644 --- a/docs/api_reference/guide_imports.json +++ b/docs/api_reference/guide_imports.json @@ -1 +1 @@ -{"ChatPromptTemplate": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/v0.2/docs/langserve/", "Conceptual guide": "https://python.langchain.com/v0.2/docs/concepts/", "How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to add values to a chain's state": "https://python.langchain.com/v0.2/docs/how_to/assign/", "How to do per-user retrieval": "https://python.langchain.com/v0.2/docs/how_to/qa_per_user/", "How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/", "How to create a custom LLM class": "https://python.langchain.com/v0.2/docs/how_to/custom_llm/", "How to inspect runnables": "https://python.langchain.com/v0.2/docs/how_to/inspect/", "How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to use few shot examples in chat models": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples_chat/", "How to do tool/function calling": "https://python.langchain.com/v0.2/docs/how_to/function_calling/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_parse/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_large_db/", "How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to add fallbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/fallbacks/", "How to propagate callbacks constructor": "https://python.langchain.com/v0.2/docs/how_to/callbacks_constructor/", "How to map values to a graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_mapping/", "How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to attach callbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/callbacks_attach/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling/", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to add default invocation args to a Runnable": "https://python.langchain.com/v0.2/docs/how_to/binding/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/v0.2/docs/how_to/dynamic_chain/", "How to create custom callback handlers": "https://python.langchain.com/v0.2/docs/how_to/custom_callbacks/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/v0.2/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/v0.2/docs/how_to/passthrough/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/v0.2/docs/how_to/message_history/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "How to run custom functions": "https://python.langchain.com/v0.2/docs/how_to/functions/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_high_cardinality/", "How to return structured data from a model": "https://python.langchain.com/v0.2/docs/how_to/structured_output/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/v0.2/docs/how_to/tools_prompting/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/", "How to debug your LLM apps": "https://python.langchain.com/v0.2/docs/how_to/debugging/", "How to chain runnables": "https://python.langchain.com/v0.2/docs/how_to/sequence/", "Hybrid Search": "https://python.langchain.com/v0.2/docs/how_to/hybrid/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_query_checking/", "How to use multimodal prompts": "https://python.langchain.com/v0.2/docs/how_to/multimodal_prompts/", "How to pass callbacks in at runtime": "https://python.langchain.com/v0.2/docs/how_to/callbacks_runtime/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "LangSmith LLM Runs": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_llm_runs/", "iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/", "NVIDIA NIMs ": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/nvidia_ai_endpoints/", "You.com": "https://python.langchain.com/v0.2/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/v0.2/docs/integrations/retrievers/asknews/", "Tavily Search API": "https://python.langchain.com/v0.2/docs/integrations/retrievers/tavily/", "Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/retrievers/ragatouille/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/memory/redis_chat_message_history/", "Google SQL for MySQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mysql/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_alloydb/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/aws_dynamodb/", "MongoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/mongodb_chat_message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/v0.2/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/memory/streamlit_chat_message_history/", "Google El Carro Oracle": "https://python.langchain.com/v0.2/docs/integrations/memory/google_el_carro/", "SQLite": "https://python.langchain.com/v0.2/docs/integrations/memory/sqlite/", "Google SQL for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_pg/", "Google SQL for SQL Server": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mssql/", "TiDB": "https://python.langchain.com/v0.2/docs/integrations/memory/tidb_chat_message_history/", "Kinetica SqlAssist LLM Demo": "https://python.langchain.com/v0.2/docs/integrations/chat/kinetica/", "ChatAnthropic": "https://python.langchain.com/v0.2/docs/integrations/chat/anthropic/", "Groq": "https://python.langchain.com/v0.2/docs/integrations/chat/groq/", "ChatOpenAI": "https://python.langchain.com/v0.2/docs/integrations/chat/openai/", "ChatVertexAI": "https://python.langchain.com/v0.2/docs/integrations/chat/google_vertex_ai_palm/", "JinaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/jinachat/", "ChatOllama": "https://python.langchain.com/v0.2/docs/integrations/chat/ollama/", "MistralAI": "https://python.langchain.com/v0.2/docs/integrations/chat/mistralai/", "ChatAI21": "https://python.langchain.com/v0.2/docs/integrations/chat/ai21/", "Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/", "Cohere": "https://python.langchain.com/v0.2/docs/integrations/providers/cohere/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/chat/edenai/", "vLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/vllm/", "Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/chat/yuan2/", "Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/", "ChatPerplexity": "https://python.langchain.com/v0.2/docs/integrations/chat/perplexity/", "ChatUpstage": "https://python.langchain.com/v0.2/docs/integrations/chat/upstage/", "NVIDIA NIMs": "https://python.langchain.com/v0.2/docs/integrations/chat/nvidia_ai_endpoints/", "Context": "https://python.langchain.com/v0.2/docs/integrations/callbacks/context/", "Fiddler": "https://python.langchain.com/v0.2/docs/integrations/callbacks/fiddler/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_summary/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "OpenAI metadata tagger": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openai_metadata_tagger/", "Figma": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/figma/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Build an Extraction Chain": "https://python.langchain.com/v0.2/docs/tutorials/extraction/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/", "Classify Text into Labels": "https://python.langchain.com/v0.2/docs/tutorials/classification/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/", "Build a Simple LLM Application": "https://python.langchain.com/v0.2/docs/tutorials/llm_chain/", "Vector stores and retrievers": "https://python.langchain.com/v0.2/docs/tutorials/retrievers/"}, "ChatAnthropic": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/v0.2/docs/langserve/", "How to use callbacks in async environments": "https://python.langchain.com/v0.2/docs/how_to/callbacks_async/", "How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/", "How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/", "How to parse XML output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_xml/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_parse/", "How to add fallbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/fallbacks/", "How to propagate callbacks constructor": "https://python.langchain.com/v0.2/docs/how_to/callbacks_constructor/", "How to stream chat model responses": "https://python.langchain.com/v0.2/docs/how_to/chat_streaming/", "How to attach callbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/callbacks_attach/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/v0.2/docs/how_to/dynamic_chain/", "How to create custom callback handlers": "https://python.langchain.com/v0.2/docs/how_to/custom_callbacks/", "How to configure runtime chain internals": "https://python.langchain.com/v0.2/docs/how_to/configure/", "How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/", "Response metadata": "https://python.langchain.com/v0.2/docs/how_to/response_metadata/", "How to pass callbacks in at runtime": "https://python.langchain.com/v0.2/docs/how_to/callbacks_runtime/", "Anthropic": "https://python.langchain.com/v0.2/docs/integrations/platforms/anthropic/", "ChatAnthropic": "https://python.langchain.com/v0.2/docs/integrations/chat/anthropic/", "Log10": "https://python.langchain.com/v0.2/docs/integrations/providers/log10/", "Python": "https://python.langchain.com/v0.2/docs/integrations/toolkits/python/", "PlayWright Browser": "https://python.langchain.com/v0.2/docs/integrations/toolkits/playwright/", "Build an Agent": "https://python.langchain.com/v0.2/docs/tutorials/agents/"}, "ChatOpenAI": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/v0.2/docs/langserve/", "How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to add values to a chain's state": "https://python.langchain.com/v0.2/docs/how_to/assign/", "How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/", "How to inspect runnables": "https://python.langchain.com/v0.2/docs/how_to/inspect/", "How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to use few shot examples in chat models": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples_chat/", "How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to add fallbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/fallbacks/", "How to map values to a graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_mapping/", "How to pass multimodal data directly to models": "https://python.langchain.com/v0.2/docs/how_to/multimodal_inputs/", "How to use the output-fixing parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_fixing/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling/", "How to convert tools to OpenAI Functions": "https://python.langchain.com/v0.2/docs/how_to/tools_as_openai_functions/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to add default invocation args to a Runnable": "https://python.langchain.com/v0.2/docs/how_to/binding/", "How to invoke runnables in parallel": "https://python.langchain.com/v0.2/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/v0.2/docs/how_to/passthrough/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to configure runtime chain internals": "https://python.langchain.com/v0.2/docs/how_to/configure/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "How to construct knowledge graphs": "https://python.langchain.com/v0.2/docs/how_to/graph_constructing/", "How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/", "How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/", "How to run custom functions": "https://python.langchain.com/v0.2/docs/how_to/functions/", "How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_high_cardinality/", "How to get log probabilities": "https://python.langchain.com/v0.2/docs/how_to/logprobs/", "How to parse YAML output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_yaml/", "Response metadata": "https://python.langchain.com/v0.2/docs/how_to/response_metadata/", "How to parse JSON output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_json/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/", "Hybrid Search": "https://python.langchain.com/v0.2/docs/how_to/hybrid/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "How to use multimodal prompts": "https://python.langchain.com/v0.2/docs/how_to/multimodal_prompts/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "WeChat": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/wechat/", "Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "LangSmith LLM Runs": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_llm_runs/", "Slack": "https://python.langchain.com/v0.2/docs/integrations/toolkits/slack/", "WhatsApp": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/whatsapp/", "LangSmith Chat Datasets": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_dataset/", "iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/discord/", "RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/", "You.com": "https://python.langchain.com/v0.2/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/v0.2/docs/integrations/tools/asknews/", "LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/", "Outline": "https://python.langchain.com/v0.2/docs/integrations/retrievers/outline/", "Wikipedia": "https://python.langchain.com/v0.2/docs/integrations/retrievers/wikipedia/", "SEC filing": "https://python.langchain.com/v0.2/docs/integrations/retrievers/sec_filings/", "Tavily Search API": "https://python.langchain.com/v0.2/docs/integrations/retrievers/tavily/", "Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/retrievers/ragatouille/", "Arxiv": "https://python.langchain.com/v0.2/docs/integrations/retrievers/arxiv/", "Rememberizer": "https://python.langchain.com/v0.2/docs/integrations/retrievers/rememberizer/", "Milvus Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/milvus_hybrid_search/", "Kay.ai": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kay/", "FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/tencentvectordb/", "MyScale": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/myscale_self_query/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/", "ChatGPT Plugins": "https://python.langchain.com/v0.2/docs/integrations/tools/chatgpt_plugins/", "Connery Action Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/connery/", "Tavily Search": "https://python.langchain.com/v0.2/docs/integrations/tools/tavily_search/", "Infobip": "https://python.langchain.com/v0.2/docs/integrations/tools/infobip/", "E2B Data Analysis": "https://python.langchain.com/v0.2/docs/integrations/tools/e2b_data_analysis/", "Human as a tool": "https://python.langchain.com/v0.2/docs/integrations/tools/human_tools/", "Azure Container Apps dynamic sessions": "https://python.langchain.com/v0.2/docs/integrations/tools/azure_dynamic_sessions/", "Yahoo Finance News": "https://python.langchain.com/v0.2/docs/integrations/tools/yahoo_finance_news/", "Semantic Scholar API Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/semanticscholar/", "Passio NutritionAI": "https://python.langchain.com/v0.2/docs/integrations/tools/passio_nutrition_ai/", "Bearly Code Interpreter": "https://python.langchain.com/v0.2/docs/integrations/tools/bearly/", "ArXiv": "https://python.langchain.com/v0.2/docs/integrations/tools/arxiv/", "Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/", "You.com Search": "https://python.langchain.com/v0.2/docs/integrations/tools/you/", "Shell (bash)": "https://python.langchain.com/v0.2/docs/integrations/tools/bash/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/memory/redis_chat_message_history/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/aws_dynamodb/", "MongoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/mongodb_chat_message_history/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/memory/xata_chat_message_history/", "Remembrall": "https://python.langchain.com/v0.2/docs/integrations/memory/remembrall/", "SQL (SQLAlchemy)": "https://python.langchain.com/v0.2/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/memory/streamlit_chat_message_history/", "SQLite": "https://python.langchain.com/v0.2/docs/integrations/memory/sqlite/", "TiDB": "https://python.langchain.com/v0.2/docs/integrations/memory/tidb_chat_message_history/", "ChatOpenAI": "https://python.langchain.com/v0.2/docs/integrations/chat/openai/", "vLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/vllm/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Context": "https://python.langchain.com/v0.2/docs/integrations/callbacks/context/", "Label Studio": "https://python.langchain.com/v0.2/docs/integrations/callbacks/labelstudio/", "PromptLayer": "https://python.langchain.com/v0.2/docs/integrations/callbacks/promptlayer/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "Trubrics": "https://python.langchain.com/v0.2/docs/integrations/callbacks/trubrics/", "Infino": "https://python.langchain.com/v0.2/docs/integrations/callbacks/infino/", "CnosDB": "https://python.langchain.com/v0.2/docs/integrations/providers/cnosdb/", "Log10": "https://python.langchain.com/v0.2/docs/integrations/providers/log10/", "Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/", "Arthur": "https://python.langchain.com/v0.2/docs/integrations/providers/arthur_tracking/", "Dataherald": "https://python.langchain.com/v0.2/docs/integrations/providers/dataherald/", "Log, Trace, and Monitor": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/index/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_summary/", "Connery Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/connery/", "CSV": "https://python.langchain.com/v0.2/docs/integrations/toolkits/csv/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Python": "https://python.langchain.com/v0.2/docs/integrations/toolkits/python/", "PowerBI Dataset": "https://python.langchain.com/v0.2/docs/integrations/toolkits/powerbi/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Gmail": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gmail/", "Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/", "Airbyte Question Answering": "https://python.langchain.com/v0.2/docs/integrations/toolkits/airbyte_structured_qa/", "Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/", "Spark SQL": "https://python.langchain.com/v0.2/docs/integrations/toolkits/spark_sql/", "AINetwork": "https://python.langchain.com/v0.2/docs/integrations/toolkits/ainetwork/", "# Cogniswitch Tools": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cogniswitch/", "Pandas Dataframe": "https://python.langchain.com/v0.2/docs/integrations/toolkits/pandas/", "Robocorp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/robocorp/", "MultiOn": "https://python.langchain.com/v0.2/docs/integrations/toolkits/multion/", "Amadeus": "https://python.langchain.com/v0.2/docs/integrations/toolkits/amadeus/", "OpenAPI": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi/", "Polygon IO Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/polygon/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "Hippo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hippo/", "Momento Vector Index (MVI)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/momento_vector_index/", "Neo4j Vector Index": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/neo4jvector/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "KDB.AI": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kdbai/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/", "OpenAI metadata tagger": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openai_metadata_tagger/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/", "Figma": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/figma/", "Browserbase": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/browserbase/", "Memgraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/memgraph/", "RDFLib": "https://python.langchain.com/v0.2/docs/integrations/graphs/rdflib_sparql/", "NebulaGraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/nebula_graph/", "HugeGraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/hugegraph/", "Diffbot": "https://python.langchain.com/v0.2/docs/integrations/graphs/diffbot/", "Ontotext GraphDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/ontotext/", "Apache AGE": "https://python.langchain.com/v0.2/docs/integrations/graphs/apache_age/", "Neo4j": "https://python.langchain.com/v0.2/docs/integrations/graphs/neo4j_cypher/", "ArangoDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/arangodb/", "Amazon Neptune with Cypher": "https://python.langchain.com/v0.2/docs/integrations/graphs/amazon_neptune_open_cypher/", "Kuzu": "https://python.langchain.com/v0.2/docs/integrations/graphs/kuzu_db/", "FalkorDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/falkordb/", "Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/", "Classify Text into Labels": "https://python.langchain.com/v0.2/docs/tutorials/classification/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/", "Build a Simple LLM Application": "https://python.langchain.com/v0.2/docs/tutorials/llm_chain/", "Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/", "Build a Question Answering application over a Graph Database": "https://python.langchain.com/v0.2/docs/tutorials/graph/"}, "SystemMessage": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/v0.2/docs/langserve/", "How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/", "How to compose prompts together": "https://python.langchain.com/v0.2/docs/how_to/prompts_composition/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "solar.md": "https://python.langchain.com/v0.2/docs/integrations/chat/solar/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "ChatFireworks": "https://python.langchain.com/v0.2/docs/integrations/chat/fireworks/", "ChatOctoAI": "https://python.langchain.com/v0.2/docs/integrations/chat/octoai/", "LlamaEdge": "https://python.langchain.com/v0.2/docs/integrations/chat/llama_edge/", "Google AI chat models": "https://python.langchain.com/v0.2/docs/integrations/chat/google_generative_ai/", "ChatKonko": "https://python.langchain.com/v0.2/docs/integrations/chat/konko/", "GigaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/gigachat/", "JinaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/jinachat/", "ChatEverlyAI": "https://python.langchain.com/v0.2/docs/integrations/chat/everlyai/", "ChatFriendli": "https://python.langchain.com/v0.2/docs/integrations/chat/friendli/", "ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/", "Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/", "vLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/vllm/", "Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/chat/yuan2/", "ChatTongyi": "https://python.langchain.com/v0.2/docs/integrations/chat/tongyi/", "MoonshotChat": "https://python.langchain.com/v0.2/docs/integrations/chat/moonshot/", "ChatPremAI": "https://python.langchain.com/v0.2/docs/integrations/chat/premai/", "ChatAnyscale": "https://python.langchain.com/v0.2/docs/integrations/chat/anyscale/", "ChatYandexGPT": "https://python.langchain.com/v0.2/docs/integrations/chat/yandex/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Context": "https://python.langchain.com/v0.2/docs/integrations/callbacks/context/", "Label Studio": "https://python.langchain.com/v0.2/docs/integrations/callbacks/labelstudio/", "Trubrics": "https://python.langchain.com/v0.2/docs/integrations/callbacks/trubrics/", "MLflow Deployments for LLMs": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow/", "MLflow AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_ai_gateway/", "PremAI": "https://python.langchain.com/v0.2/docs/integrations/providers/premai/", "Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Robocorp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/robocorp/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/v0.2/docs/integrations/llms/javelin/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/", "Build a Simple LLM Application": "https://python.langchain.com/v0.2/docs/tutorials/llm_chain/"}, "HumanMessage": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/v0.2/docs/langserve/", "Conceptual guide": "https://python.langchain.com/v0.2/docs/concepts/", "Build an Agent": "https://python.langchain.com/v0.2/docs/tutorials/agents/", "How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to use callbacks in async environments": "https://python.langchain.com/v0.2/docs/how_to/callbacks_async/", "How to do tool/function calling": "https://python.langchain.com/v0.2/docs/how_to/function_calling/", "How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to pass multimodal data directly to models": "https://python.langchain.com/v0.2/docs/how_to/multimodal_inputs/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling/", "How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/", "How to convert tools to OpenAI Functions": "https://python.langchain.com/v0.2/docs/how_to/tools_as_openai_functions/", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/v0.2/docs/how_to/message_history/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How to return structured data from a model": "https://python.langchain.com/v0.2/docs/how_to/structured_output/", "How to compose prompts together": "https://python.langchain.com/v0.2/docs/how_to/prompts_composition/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "WeChat": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/wechat/", "Discord": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/discord/", "Zep Open Source": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_memorystore/", "Zep Cloud": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_cloud_memorystore/", "Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Imagen": "https://python.langchain.com/v0.2/docs/integrations/tools/google_imagen/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/", "solar.md": "https://python.langchain.com/v0.2/docs/integrations/chat/solar/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "AzureMLChatOnlineEndpoint": "https://python.langchain.com/v0.2/docs/integrations/chat/azureml_chat_endpoint/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/v0.2/docs/integrations/chat/alibaba_cloud_pai_eas/", "Chat with Coze Bot": "https://python.langchain.com/v0.2/docs/integrations/chat/coze/", "ChatFireworks": "https://python.langchain.com/v0.2/docs/integrations/chat/fireworks/", "ChatOctoAI": "https://python.langchain.com/v0.2/docs/integrations/chat/octoai/", "DeepInfra": "https://python.langchain.com/v0.2/docs/integrations/chat/deepinfra/", "ChatAnthropic": "https://python.langchain.com/v0.2/docs/integrations/chat/anthropic/", "ChatLiteLLM": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm/", "LlamaEdge": "https://python.langchain.com/v0.2/docs/integrations/chat/llama_edge/", "Google AI chat models": "https://python.langchain.com/v0.2/docs/integrations/chat/google_generative_ai/", "OllamaFunctions": "https://python.langchain.com/v0.2/docs/integrations/chat/ollama_functions/", "VolcEngineMaasChat": "https://python.langchain.com/v0.2/docs/integrations/chat/volcengine_maas/", "ChatKonko": "https://python.langchain.com/v0.2/docs/integrations/chat/konko/", "ChatVertexAI": "https://python.langchain.com/v0.2/docs/integrations/chat/google_vertex_ai_palm/", "ChatBedrock": "https://python.langchain.com/v0.2/docs/integrations/chat/bedrock/", "MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/", "GigaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/gigachat/", "JinaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/jinachat/", "ChatOllama": "https://python.langchain.com/v0.2/docs/integrations/chat/ollama/", "AzureChatOpenAI": "https://python.langchain.com/v0.2/docs/integrations/chat/azure_chat_openai/", "ChatEverlyAI": "https://python.langchain.com/v0.2/docs/integrations/chat/everlyai/", "GPTRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/gpt_router/", "ChatLiteLLMRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm_router/", "ChatFriendli": "https://python.langchain.com/v0.2/docs/integrations/chat/friendli/", "MistralAI": "https://python.langchain.com/v0.2/docs/integrations/chat/mistralai/", "ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/", "Chat with Baichuan-192K": "https://python.langchain.com/v0.2/docs/integrations/chat/baichuan/", "QianfanChatEndpoint": "https://python.langchain.com/v0.2/docs/integrations/chat/baidu_qianfan_endpoint/", "Cohere": "https://python.langchain.com/v0.2/docs/integrations/llms/cohere/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/chat/edenai/", "ErnieBotChat": "https://python.langchain.com/v0.2/docs/integrations/chat/ernie/", "vLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/vllm/", "Tencent Hunyuan": "https://python.langchain.com/v0.2/docs/integrations/chat/tencent_hunyuan/", "MiniMaxChat": "https://python.langchain.com/v0.2/docs/integrations/chat/minimax/", "Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/chat/yuan2/", "ChatTongyi": "https://python.langchain.com/v0.2/docs/integrations/chat/tongyi/", "PromptLayerChatOpenAI": "https://python.langchain.com/v0.2/docs/integrations/chat/promptlayer_chatopenai/", "SparkLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/sparkllm/", "MoonshotChat": "https://python.langchain.com/v0.2/docs/integrations/chat/moonshot/", "Dappier AI": "https://python.langchain.com/v0.2/docs/integrations/chat/dappier/", "Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/", "ChatPremAI": "https://python.langchain.com/v0.2/docs/integrations/chat/premai/", "ChatAnyscale": "https://python.langchain.com/v0.2/docs/integrations/chat/anyscale/", "ChatYandexGPT": "https://python.langchain.com/v0.2/docs/integrations/chat/yandex/", "NVIDIA NIMs": "https://python.langchain.com/v0.2/docs/integrations/chat/nvidia_ai_endpoints/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Context": "https://python.langchain.com/v0.2/docs/integrations/callbacks/context/", "Label Studio": "https://python.langchain.com/v0.2/docs/integrations/callbacks/labelstudio/", "PromptLayer": "https://python.langchain.com/v0.2/docs/integrations/callbacks/promptlayer/", "Trubrics": "https://python.langchain.com/v0.2/docs/integrations/callbacks/trubrics/", "Log10": "https://python.langchain.com/v0.2/docs/integrations/providers/log10/", "MLflow Deployments for LLMs": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow/", "MLflow AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_ai_gateway/", "-> content='Hello! How can I assist you today?'": "https://python.langchain.com/v0.2/docs/integrations/providers/databricks/", "Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/", "PremAI": "https://python.langchain.com/v0.2/docs/integrations/providers/premai/", "Arthur": "https://python.langchain.com/v0.2/docs/integrations/providers/arthur_tracking/", "Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "Browserbase": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/browserbase/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/", "Databricks": "https://python.langchain.com/v0.2/docs/integrations/llms/databricks/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/v0.2/docs/integrations/llms/javelin/", "Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/", "Chat Bot Feedback Template": "https://python.langchain.com/v0.2/docs/templates/chat-bot-feedback/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/", "Build a Simple LLM Application": "https://python.langchain.com/v0.2/docs/tutorials/llm_chain/"}, "RunnableMap": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/v0.2/docs/langserve/"}, "RunnableLambda": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/v0.2/docs/langserve/", "How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/", "How to run custom functions": "https://python.langchain.com/v0.2/docs/how_to/functions/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_summary/", "Vector stores and retrievers": "https://python.langchain.com/v0.2/docs/tutorials/retrievers/"}, "PromptTemplate": {"Conceptual guide": "https://python.langchain.com/v0.2/docs/concepts/", "How to better prompt when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_prompting/", "How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/v0.2/docs/how_to/output_parser_structured/", "How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/", "How to select examples by n-gram overlap": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_ngram/", "How to select examples by length": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_length_based/", "How to use example selectors": "https://python.langchain.com/v0.2/docs/how_to/example_selectors/", "How to use few shot examples": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples/", "How to select examples by similarity": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_similarity/", "How to parse XML output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_xml/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/v0.2/docs/how_to/long_context_reorder/", "How to add fallbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/fallbacks/", "Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "How to configure runtime chain internals": "https://python.langchain.com/v0.2/docs/how_to/configure/", "How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/", "How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/", "How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "How to parse YAML output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_yaml/", "How to compose prompts together": "https://python.langchain.com/v0.2/docs/how_to/prompts_composition/", "How to partially format prompt templates": "https://python.langchain.com/v0.2/docs/how_to/prompts_partial/", "How to parse JSON output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_json/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_mmr/", "How to track token usage for LLMs": "https://python.langchain.com/v0.2/docs/how_to/llm_token_usage_tracking/", "Clarifai": "https://python.langchain.com/v0.2/docs/integrations/llms/clarifai/", "RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/", "Google Drive": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_drive/", "Milvus Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/milvus_hybrid_search/", "Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/", "NVIDIA Riva: ASR and TTS": "https://python.langchain.com/v0.2/docs/integrations/tools/nvidia_riva/", "Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/", "Dall-E Image Generator": "https://python.langchain.com/v0.2/docs/integrations/tools/dalle_image_generator/", "Mot\u00f6rhead": "https://python.langchain.com/v0.2/docs/integrations/memory/motorhead_memory/", "OllamaFunctions": "https://python.langchain.com/v0.2/docs/integrations/chat/ollama_functions/", "Context": "https://python.langchain.com/v0.2/docs/integrations/callbacks/context/", "SageMaker Tracking": "https://python.langchain.com/v0.2/docs/integrations/callbacks/sagemaker_tracking/", "Argilla": "https://python.langchain.com/v0.2/docs/integrations/callbacks/argilla/", "DSPy": "https://python.langchain.com/v0.2/docs/integrations/providers/dspy/", "Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/", "MLflow AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_ai_gateway/", "Rebuff": "https://python.langchain.com/v0.2/docs/integrations/providers/rebuff/", "Prediction Guard": "https://python.langchain.com/v0.2/docs/integrations/llms/predictionguard/", "MLflow": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_tracking/", "Shale Protocol": "https://python.langchain.com/v0.2/docs/integrations/providers/shaleprotocol/", "Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/", "Ray Serve": "https://python.langchain.com/v0.2/docs/integrations/providers/ray_serve/", "Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "Amazon Document DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/documentdb/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/mongodb_atlas/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "AirbyteLoader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte/", "Memgraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/memgraph/", "Apache AGE": "https://python.langchain.com/v0.2/docs/integrations/graphs/apache_age/", "Neo4j": "https://python.langchain.com/v0.2/docs/integrations/graphs/neo4j_cypher/", "Baseten": "https://python.langchain.com/v0.2/docs/integrations/llms/baseten/", "StochasticAI": "https://python.langchain.com/v0.2/docs/integrations/llms/stochasticai/", "Solar": "https://python.langchain.com/v0.2/docs/integrations/llms/solar/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/", "IPEX-LLM": "https://python.langchain.com/v0.2/docs/integrations/llms/ipex_llm/", "Banana": "https://python.langchain.com/v0.2/docs/integrations/llms/banana/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/v0.2/docs/integrations/llms/alibabacloud_pai_eas_endpoint/", "OpenLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/openllm/", "SageMakerEndpoint": "https://python.langchain.com/v0.2/docs/integrations/llms/sagemaker/", "Fireworks": "https://python.langchain.com/v0.2/docs/integrations/llms/fireworks/", "OctoAI": "https://python.langchain.com/v0.2/docs/integrations/llms/octoai/", "Writer": "https://python.langchain.com/v0.2/docs/integrations/llms/writer/", "Modal": "https://python.langchain.com/v0.2/docs/integrations/llms/modal/", "TextGen": "https://python.langchain.com/v0.2/docs/integrations/llms/textgen/", "Xorbits Inference (Xinference)": "https://python.langchain.com/v0.2/docs/integrations/llms/xinference/", "Nebula (Symbl.ai)": "https://python.langchain.com/v0.2/docs/integrations/llms/symblai_nebula/", "DeepInfra": "https://python.langchain.com/v0.2/docs/integrations/llms/deepinfra/", "AnthropicLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/anthropic/", "NLP Cloud": "https://python.langchain.com/v0.2/docs/integrations/llms/nlpcloud/", "GPT4All": "https://python.langchain.com/v0.2/docs/integrations/llms/gpt4all/", "ForefrontAI": "https://python.langchain.com/v0.2/docs/integrations/llms/forefrontai/", "MosaicML": "https://python.langchain.com/v0.2/docs/integrations/llms/mosaicml/", "Volc Engine Maas": "https://python.langchain.com/v0.2/docs/integrations/llms/volcengine_maas/", "CerebriumAI": "https://python.langchain.com/v0.2/docs/integrations/llms/cerebriumai/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/llms/openai/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/", "Predibase": "https://python.langchain.com/v0.2/docs/integrations/llms/predibase/", "GigaChat": "https://python.langchain.com/v0.2/docs/integrations/llms/gigachat/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_generative_ai/", "Llama.cpp": "https://python.langchain.com/v0.2/docs/integrations/llms/llamacpp/", "Hugging Face Local Pipelines": "https://python.langchain.com/v0.2/docs/integrations/llms/huggingface_pipelines/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/", "Titan Takeoff": "https://python.langchain.com/v0.2/docs/integrations/llms/titan_takeoff/", "Aphrodite Engine": "https://python.langchain.com/v0.2/docs/integrations/llms/aphrodite/", "AI21LLM": "https://python.langchain.com/v0.2/docs/integrations/llms/ai21/", "Cohere": "https://python.langchain.com/v0.2/docs/integrations/llms/cohere/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/llms/edenai/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/v0.2/docs/integrations/llms/javelin/", "IBM watsonx.ai": "https://python.langchain.com/v0.2/docs/integrations/llms/ibm_watsonx/", "C Transformers": "https://python.langchain.com/v0.2/docs/integrations/llms/ctransformers/", "vLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/vllm/", "Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/", "Manifest": "https://python.langchain.com/v0.2/docs/integrations/llms/manifest/", "ExLlamaV2": "https://python.langchain.com/v0.2/docs/integrations/llms/exllamav2/", "Minimax": "https://python.langchain.com/v0.2/docs/integrations/llms/minimax/", "Tongyi Qwen": "https://python.langchain.com/v0.2/docs/integrations/llms/tongyi/", "Huggingface Endpoints": "https://python.langchain.com/v0.2/docs/integrations/llms/huggingface_endpoint/", "MLX Local Pipelines": "https://python.langchain.com/v0.2/docs/integrations/llms/mlx_pipelines/", "Runhouse": "https://python.langchain.com/v0.2/docs/integrations/llms/runhouse/", "Anyscale": "https://python.langchain.com/v0.2/docs/integrations/llms/anyscale/", "YandexGPT": "https://python.langchain.com/v0.2/docs/integrations/llms/yandex/", "GooseAI": "https://python.langchain.com/v0.2/docs/integrations/llms/gooseai/", "OpenLM": "https://python.langchain.com/v0.2/docs/integrations/llms/openlm/", "Aleph Alpha": "https://python.langchain.com/v0.2/docs/integrations/llms/aleph_alpha/", "Cloudflare Workers AI": "https://python.langchain.com/v0.2/docs/integrations/llms/cloudflare_workersai/", "CTranslate2": "https://python.langchain.com/v0.2/docs/integrations/llms/ctranslate2/", "Google AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_ai/", "PipelineAI": "https://python.langchain.com/v0.2/docs/integrations/llms/pipelineai/", "ChatGLM": "https://python.langchain.com/v0.2/docs/integrations/llms/chatglm/", "Gradient": "https://python.langchain.com/v0.2/docs/integrations/llms/gradient/", "Petals": "https://python.langchain.com/v0.2/docs/integrations/llms/petals/", "OpenVINO": "https://python.langchain.com/v0.2/docs/integrations/llms/openvino/", "Intel Weight-Only Quantization": "https://python.langchain.com/v0.2/docs/integrations/llms/weight_only_quantization/", "Replicate": "https://python.langchain.com/v0.2/docs/integrations/llms/replicate/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/", "Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/", "Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "MessagesPlaceholder": {"Conceptual guide": "https://python.langchain.com/v0.2/docs/concepts/", "How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/v0.2/docs/how_to/message_history/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/memory/redis_chat_message_history/", "Google SQL for MySQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mysql/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_alloydb/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/aws_dynamodb/", "MongoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/mongodb_chat_message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/v0.2/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/memory/streamlit_chat_message_history/", "Google El Carro Oracle": "https://python.langchain.com/v0.2/docs/integrations/memory/google_el_carro/", "SQLite": "https://python.langchain.com/v0.2/docs/integrations/memory/sqlite/", "Google SQL for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_pg/", "Google SQL for SQL Server": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mssql/", "TiDB": "https://python.langchain.com/v0.2/docs/integrations/memory/tidb_chat_message_history/", "Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/", "Build an Extraction Chain": "https://python.langchain.com/v0.2/docs/tutorials/extraction/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "CSVLoader": {"Conceptual guide": "https://python.langchain.com/v0.2/docs/concepts/", "How to load CSVs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_csv/", "ChatGPT plugin": "https://python.langchain.com/v0.2/docs/integrations/retrievers/chatgpt-plugin/", "Aerospike": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/aerospike/", "CSV": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/csv/", "Pebblo Safe DocumentLoader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/pebblo/"}, "BaseChatModel": {"Contribute Integrations": "https://python.langchain.com/v0.2/docs/contributing/integrations/", "How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "deprecated": {"Contribute Integrations": "https://python.langchain.com/v0.2/docs/contributing/integrations/"}, "UnstructuredMarkdownLoader": {"langchain": "https://python.langchain.com/v0.2/docs/changes/changelog/langchain/", "How to load Markdown": "https://python.langchain.com/v0.2/docs/how_to/document_loader_markdown/", "Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/", "StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/"}, "TavilySearchResults": {"Build an Agent": "https://python.langchain.com/v0.2/docs/tutorials/agents/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to debug your LLM apps": "https://python.langchain.com/v0.2/docs/how_to/debugging/", "Tavily Search": "https://python.langchain.com/v0.2/docs/integrations/tools/tavily_search/", "ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/", "Cohere": "https://python.langchain.com/v0.2/docs/integrations/providers/cohere/"}, "WebBaseLoader": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/", "RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/", "Infino": "https://python.langchain.com/v0.2/docs/integrations/callbacks/infino/", "Zep Cloud": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zep_cloud/", "Zep": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zep/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Merge Documents Loader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/merge_doc/", "WebBaseLoader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/web_base/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/", "Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "FAISS": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "How to better prompt when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_prompting/", "How to add values to a chain's state": "https://python.langchain.com/v0.2/docs/how_to/assign/", "How to inspect runnables": "https://python.langchain.com/v0.2/docs/how_to/inspect/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_large_db/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/v0.2/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/v0.2/docs/how_to/passthrough/", "How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "How to use a time-weighted vector store retriever": "https://python.langchain.com/v0.2/docs/how_to/time_weighted_vectorstore/", "How to create and query vector stores": "https://python.langchain.com/v0.2/docs/how_to/vectorstores/", "How to use a vectorstore as a retriever": "https://python.langchain.com/v0.2/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/v0.2/docs/how_to/caching_embeddings/", "How to combine results from multiple retrievers": "https://python.langchain.com/v0.2/docs/how_to/ensemble_retriever/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_mmr/", "NVIDIA NIMs ": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/nvidia_ai_endpoints/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere-reranker/", "FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/providers/ragatouille/", "Facebook - Meta": "https://python.langchain.com/v0.2/docs/integrations/providers/facebook/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Faiss (Async)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss_async/", "Faiss": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss/", "VoyageAI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/", "OpenVINO Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openvino_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_generative_ai/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/"}, "OpenAIEmbeddings": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "How to better prompt when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_prompting/", "How to add values to a chain's state": "https://python.langchain.com/v0.2/docs/how_to/assign/", "How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/", "How to do per-user retrieval": "https://python.langchain.com/v0.2/docs/how_to/qa_per_user/", "How to use few shot examples": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples/", "How to inspect runnables": "https://python.langchain.com/v0.2/docs/how_to/inspect/", "How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to use few shot examples in chat models": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples_chat/", "How to select examples by similarity": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_similarity/", "Text embedding models": "https://python.langchain.com/v0.2/docs/how_to/embed_text/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_large_db/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to use the LangChain indexing API": "https://python.langchain.com/v0.2/docs/how_to/indexing/", "How to split text based on semantic similarity": "https://python.langchain.com/v0.2/docs/how_to/semantic-chunker/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/v0.2/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/v0.2/docs/how_to/passthrough/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "How to use a time-weighted vector store retriever": "https://python.langchain.com/v0.2/docs/how_to/time_weighted_vectorstore/", "How to create and query vector stores": "https://python.langchain.com/v0.2/docs/how_to/vectorstores/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/", "How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "How to use the Parent Document Retriever": "https://python.langchain.com/v0.2/docs/how_to/parent_document_retriever/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_high_cardinality/", "How to use a vectorstore as a retriever": "https://python.langchain.com/v0.2/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/v0.2/docs/how_to/caching_embeddings/", "How to combine results from multiple retrievers": "https://python.langchain.com/v0.2/docs/how_to/ensemble_retriever/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_mmr/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/", "Hybrid Search": "https://python.langchain.com/v0.2/docs/how_to/hybrid/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/", "Azure OpenAI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/azureopenai/", "Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azuresearch/", "RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kinetica/", "JaguarDB Vector Database": "https://python.langchain.com/v0.2/docs/integrations/retrievers/jaguar/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/", "SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/singlestoredb/", "kNN": "https://python.langchain.com/v0.2/docs/integrations/retrievers/knn/", "DocArray": "https://python.langchain.com/v0.2/docs/integrations/retrievers/docarray_retriever/", "SVM": "https://python.langchain.com/v0.2/docs/integrations/retrievers/svm/", "Pinecone Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/pinecone_hybrid_search/", "Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "Milvus Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/milvus_hybrid_search/", "FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/", "Milvus": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/milvus/", "PGVector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/databricks_vector_search/", "DingoDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dingo/", "OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/opensearch/", "Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/elasticsearch/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/chroma/", "Timescale Vector (Postgres) ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/supabase/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/redis/", "MyScale": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/myscale/", "Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/mongodb_atlas/", "Qdrant": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/qdrant/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/xata/", "Confident": "https://python.langchain.com/v0.2/docs/integrations/callbacks/confident/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/providers/ragatouille/", "Upstash Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/upstash/", "Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Cassandra": "https://python.langchain.com/v0.2/docs/integrations/stores/cassandra/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "LanceDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lancedb/", "Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/", "Kinetica Vectorstore API": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kinetica/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "Hippo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hippo/", "Rockset": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/rockset/", "Zilliz": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zilliz/", "Azure Cosmos DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azure_cosmos_db/", "viking DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vikingdb/", "Couchbase ": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/couchbase/", "Typesense": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/typesense/", "Momento Vector Index (MVI)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/momento_vector_index/", "TiDB Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tidb_vector/", "Activeloop Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/activeloop_deeplake/", "Neo4j Vector Index": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lantern/", "DuckDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/duckdb/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/alibabacloud_opensearch/", "StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/", "scikit-learn": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sklearn/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/", "DocArray HnswSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_hnsw/", "ClickHouse": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/clickhouse/", "Tigris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tigris/", "China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/ecloud_vector_search/", "Faiss (Async)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss_async/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "USearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/usearch/", "KDB.AI": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kdbai/", "DocArray InMemorySearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_in_memory/", "Postgres Embedding": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgembedding/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Faiss": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss/", "Epsilla": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/epsilla/", "Amazon Document DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/documentdb/", "AnalyticDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/analyticdb/", "Hologres": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hologres/", "Meilisearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/meilisearch/", "RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/", "Psychic": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/psychic/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/", "Vector stores and retrievers": "https://python.langchain.com/v0.2/docs/tutorials/retrievers/"}, "RecursiveCharacterTextSplitter": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to split code": "https://python.langchain.com/v0.2/docs/how_to/code_splitter/", "How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to recursively split text by characters": "https://python.langchain.com/v0.2/docs/how_to/recursive_text_splitter/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "How to split text by tokens ": "https://python.langchain.com/v0.2/docs/how_to/split_by_token/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/", "How to use the Parent Document Retriever": "https://python.langchain.com/v0.2/docs/how_to/parent_document_retriever/", "How to split Markdown by Headers": "https://python.langchain.com/v0.2/docs/how_to/markdown_header_metadata_splitter/", "How to split by HTML header ": "https://python.langchain.com/v0.2/docs/how_to/HTML_header_metadata_splitter/", "How to split by HTML sections": "https://python.langchain.com/v0.2/docs/how_to/HTML_section_aware_splitter/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/", "LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere-reranker/", "Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/providers/ragatouille/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Google Vertex AI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "viking DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vikingdb/", "Zep Cloud": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zep_cloud/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "Zep": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zep/", "Vearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vearch/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/mongodb_atlas/", "VoyageAI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/", "OpenVINO Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openvino_rerank/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/", "Source Code": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/source_code/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/"}, "create_retriever_tool": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/memory/xata_chat_message_history/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/"}, "create_tool_calling_agent": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to use tools in a chain": "https://python.langchain.com/v0.2/docs/how_to/tools_chain/", "How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/", "How to debug your LLM apps": "https://python.langchain.com/v0.2/docs/how_to/debugging/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "Azure Container Apps dynamic sessions": "https://python.langchain.com/v0.2/docs/integrations/tools/azure_dynamic_sessions/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "AgentExecutor": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to use tools in a chain": "https://python.langchain.com/v0.2/docs/how_to/tools_chain/", "How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to debug your LLM apps": "https://python.langchain.com/v0.2/docs/how_to/debugging/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "Tavily Search": "https://python.langchain.com/v0.2/docs/integrations/tools/tavily_search/", "Infobip": "https://python.langchain.com/v0.2/docs/integrations/tools/infobip/", "AskNews": "https://python.langchain.com/v0.2/docs/integrations/tools/asknews/", "Azure Container Apps dynamic sessions": "https://python.langchain.com/v0.2/docs/integrations/tools/azure_dynamic_sessions/", "Semantic Scholar API Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/semanticscholar/", "Passio NutritionAI": "https://python.langchain.com/v0.2/docs/integrations/tools/passio_nutrition_ai/", "Memorize": "https://python.langchain.com/v0.2/docs/integrations/tools/memorize/", "ArXiv": "https://python.langchain.com/v0.2/docs/integrations/tools/arxiv/", "Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/", "You.com Search": "https://python.langchain.com/v0.2/docs/integrations/tools/you/", "Ionic Shopping Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/ionic_shopping/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/", "ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/callbacks/streamlit/", "Cohere": "https://python.langchain.com/v0.2/docs/integrations/providers/cohere/", "Dataherald": "https://python.langchain.com/v0.2/docs/integrations/providers/dataherald/", "Log, Trace, and Monitor": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/index/", "Python": "https://python.langchain.com/v0.2/docs/integrations/toolkits/python/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Gmail": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gmail/", "Slack": "https://python.langchain.com/v0.2/docs/integrations/toolkits/slack/", "Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/", "Robocorp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/robocorp/", "MultiOn": "https://python.langchain.com/v0.2/docs/integrations/toolkits/multion/", "Amadeus": "https://python.langchain.com/v0.2/docs/integrations/toolkits/amadeus/", "Azure AI Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_ai_services/", "Polygon IO Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/polygon/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "AIMessage": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to do tool/function calling": "https://python.langchain.com/v0.2/docs/how_to/function_calling/", "How to add a human-in-the-loop for tools": "https://python.langchain.com/v0.2/docs/how_to/tools_human/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_parse/", "How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling/", "How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How to return structured data from a model": "https://python.langchain.com/v0.2/docs/how_to/structured_output/", "How to compose prompts together": "https://python.langchain.com/v0.2/docs/how_to/prompts_composition/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "Twitter (via Apify)": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/twitter/", "Zep Open Source": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_memorystore/", "Zep Cloud": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_cloud_memorystore/", "Google Imagen": "https://python.langchain.com/v0.2/docs/integrations/tools/google_imagen/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/", "ChatAnthropic": "https://python.langchain.com/v0.2/docs/integrations/chat/anthropic/", "ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/", "Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/chat/yuan2/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/", "ChatGLM": "https://python.langchain.com/v0.2/docs/integrations/llms/chatglm/", "Chat Bot Feedback Template": "https://python.langchain.com/v0.2/docs/templates/chat-bot-feedback/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "ChatMessageHistory": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "BaseChatMessageHistory": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "RunnableWithMessageHistory": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/v0.2/docs/how_to/message_history/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/memory/redis_chat_message_history/", "Google SQL for MySQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mysql/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_alloydb/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/aws_dynamodb/", "MongoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/mongodb_chat_message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/v0.2/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/memory/streamlit_chat_message_history/", "Google El Carro Oracle": "https://python.langchain.com/v0.2/docs/integrations/memory/google_el_carro/", "SQLite": "https://python.langchain.com/v0.2/docs/integrations/memory/sqlite/", "Google SQL for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_pg/", "Google SQL for SQL Server": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mssql/", "TiDB": "https://python.langchain.com/v0.2/docs/integrations/memory/tidb_chat_message_history/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "Neo4jGraph": {"How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to map values to a graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_mapping/", "How to construct knowledge graphs": "https://python.langchain.com/v0.2/docs/how_to/graph_constructing/", "How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "Neo4j": "https://python.langchain.com/v0.2/docs/integrations/graphs/neo4j_cypher/", "Diffbot": "https://python.langchain.com/v0.2/docs/integrations/graphs/diffbot/", "Build a Question Answering application over a Graph Database": "https://python.langchain.com/v0.2/docs/tutorials/graph/"}, "AsyncCallbackManagerForToolRun": {"How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to create custom tools": "https://python.langchain.com/v0.2/docs/how_to/custom_tools/"}, "CallbackManagerForToolRun": {"How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to create custom tools": "https://python.langchain.com/v0.2/docs/how_to/custom_tools/"}, "BaseTool": {"How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to create custom tools": "https://python.langchain.com/v0.2/docs/how_to/custom_tools/"}, "format_to_openai_function_messages": {"How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/"}, "OpenAIFunctionsAgentOutputParser": {"How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/"}, "convert_to_openai_function": {"How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to convert tools to OpenAI Functions": "https://python.langchain.com/v0.2/docs/how_to/tools_as_openai_functions/"}, "BSHTMLLoader": {"How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to load HTML": "https://python.langchain.com/v0.2/docs/how_to/document_loader_html/"}, "TokenTextSplitter": {"How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to split text by tokens ": "https://python.langchain.com/v0.2/docs/how_to/split_by_token/", "Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/azure_ai_search/", "Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/", "StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/"}, "Document": {"How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "How to create a custom Document Loader": "https://python.langchain.com/v0.2/docs/how_to/document_loader_custom/", "How to use the LangChain indexing API": "https://python.langchain.com/v0.2/docs/how_to/indexing/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to create a custom Retriever": "https://python.langchain.com/v0.2/docs/how_to/custom_retriever/", "How to construct knowledge graphs": "https://python.langchain.com/v0.2/docs/how_to/graph_constructing/", "How to use a time-weighted vector store retriever": "https://python.langchain.com/v0.2/docs/how_to/time_weighted_vectorstore/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "How to load Markdown": "https://python.langchain.com/v0.2/docs/how_to/document_loader_markdown/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Oracle AI Vector Search: Generate Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/oracleai/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kinetica/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "ChatGPT plugin": "https://python.langchain.com/v0.2/docs/integrations/retrievers/chatgpt-plugin/", "Cohere RAG": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere/", "Weaviate Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/weaviate-hybrid/", "BM25": "https://python.langchain.com/v0.2/docs/integrations/retrievers/bm25/", "Qdrant Sparse Vector": "https://python.langchain.com/v0.2/docs/integrations/retrievers/qdrant-sparse/", "Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/elasticsearch/", "TF-IDF": "https://python.langchain.com/v0.2/docs/integrations/retrievers/tf_idf/", "Milvus": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/milvus/", "PGVector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/weaviate_self_query/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "DashVector": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dashvector/", "Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/opensearch_self_query/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/chroma_self_query/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/", "Timescale Vector (Postgres) ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/redis_self_query/", "MyScale": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/myscale_self_query/", "Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/mongodb_atlas/", "Qdrant": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/qdrant_self_query/", "Oracle AI Vector Search: Generate Summary": "https://python.langchain.com/v0.2/docs/integrations/tools/oracleai/", "Apify": "https://python.langchain.com/v0.2/docs/integrations/tools/apify/", "Cohere": "https://python.langchain.com/v0.2/docs/integrations/providers/cohere/", "Kinetica Vectorstore API": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kinetica/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "PGVector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgvector/", "SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/singlestoredb/", "Annoy": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/annoy/", "Oracle AI Vector Search: Vector Store": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/oracle/", "Neo4j Vector Index": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lantern/", "Google Firestore (Native Mode)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_firestore/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Faiss (Async)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss_async/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "PGVecto.rs": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgvecto_rs/", "Postgres Embedding": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgembedding/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Faiss": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss/", "Nuclia": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/nuclia_transformer/", "AI21SemanticTextSplitter": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/ai21_semantic_text_splitter/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "OpenAI metadata tagger": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openai_metadata_tagger/", "Doctran: extract properties": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/doctran_extract_properties/", "Google Translate": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_translate/", "Doctran: interrogate documents": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/doctran_interrogate_document/", "Doctran: language translation": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/doctran_translate_document/", "TensorFlow Datasets": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/tensorflow_datasets/", "Google Cloud SQL for MySQL": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_cloud_sql_mysql/", "Airbyte Salesforce (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_salesforce/", "Airbyte CDK (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_cdk/", "Airbyte Stripe (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_stripe/", "Copy Paste": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/copypaste/", "Airbyte Typeform (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_typeform/", "Apify Dataset": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/apify_dataset/", "Google Firestore in Datastore Mode": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_datastore/", "Oracle AI Vector Search: Document Processing": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/oracleai/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/", "Airbyte Hubspot (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_hubspot/", "Airbyte Gong (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_gong/", "Google Memorystore for Redis": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_memorystore_redis/", "Google Bigtable": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_bigtable/", "Google Cloud SQL for SQL server": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_cloud_sql_mssql/", "Google El Carro for Oracle Workloads": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_el_carro/", "Airbyte Shopify (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_shopify/", "Airbyte Zendesk Support (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_zendesk_support/", "Google Spanner": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_spanner/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/v0.2/docs/integrations/graphs/azure_cosmosdb_gremlin/", "SageMakerEndpoint": "https://python.langchain.com/v0.2/docs/integrations/llms/sagemaker/", "self-query-qdrant": "https://python.langchain.com/v0.2/docs/templates/self-query-qdrant/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/", "Vector stores and retrievers": "https://python.langchain.com/v0.2/docs/tutorials/retrievers/"}, "CharacterTextSplitter": {"How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to split by character": "https://python.langchain.com/v0.2/docs/how_to/character_text_splitter/", "How to use the LangChain indexing API": "https://python.langchain.com/v0.2/docs/how_to/indexing/", "How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "How to create and query vector stores": "https://python.langchain.com/v0.2/docs/how_to/vectorstores/", "How to split text by tokens ": "https://python.langchain.com/v0.2/docs/how_to/split_by_token/", "How to use a vectorstore as a retriever": "https://python.langchain.com/v0.2/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/v0.2/docs/how_to/caching_embeddings/", "Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azuresearch/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kinetica/", "JaguarDB Vector Database": "https://python.langchain.com/v0.2/docs/integrations/retrievers/jaguar/", "SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/singlestoredb/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/", "Confident": "https://python.langchain.com/v0.2/docs/integrations/callbacks/confident/", "Upstash Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/upstash/", "VDMS": "https://python.langchain.com/v0.2/docs/integrations/providers/vdms/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "LanceDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lancedb/", "Kinetica Vectorstore API": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kinetica/", "SQLite-VSS": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sqlitevss/", "Vald": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vald/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "DashVector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dashvector/", "Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/databricks_vector_search/", "ScaNN": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/scann/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/xata/", "Hippo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hippo/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vectara/", "Vespa": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vespa/", "Rockset": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/rockset/", "DingoDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dingo/", "Zilliz": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zilliz/", "Azure Cosmos DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azure_cosmos_db/", "Annoy": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/annoy/", "Couchbase ": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/couchbase/", "Typesense": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/typesense/", "Momento Vector Index (MVI)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/momento_vector_index/", "TiDB Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tidb_vector/", "Relyt": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/relyt/", "Activeloop Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/activeloop_deeplake/", "vlite": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vlite/", "Neo4j Vector Index": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lantern/", "Tair": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tair/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/chroma/", "DuckDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/duckdb/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/alibabacloud_opensearch/", "Clarifai": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/clarifai/", "scikit-learn": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sklearn/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/", "DocArray HnswSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_hnsw/", "MyScale": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/myscale/", "TileDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tiledb/", "ClickHouse": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/clickhouse/", "Google Memorystore for Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_memorystore_redis/", "Qdrant": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/qdrant/", "Tigris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tigris/", "China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/ecloud_vector_search/", "Bagel": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/bagel/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiducloud_vector_search/", "AwaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/awadb/", "Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/supabase/", "SurrealDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/surrealdb/", "OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/opensearch/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pinecone/", "Faiss (Async)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss_async/", "BagelDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/bageldb/", "ManticoreSearch VectorStore": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/manticore_search/", "USearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/usearch/", "Milvus": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/milvus/", "Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/elasticsearch/", "PGVecto.rs": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgvecto_rs/", "Marqo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/marqo/", "DocArray InMemorySearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_in_memory/", "Postgres Embedding": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgembedding/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vdms/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Faiss": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss/", "Epsilla": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/epsilla/", "Amazon Document DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/documentdb/", "SemaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/semadb/", "AnalyticDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/analyticdb/", "Hologres": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hologres/", "Baidu VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiduvectordb/", "Meilisearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/meilisearch/", "Psychic": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/psychic/", "Manifest": "https://python.langchain.com/v0.2/docs/integrations/llms/manifest/", "Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/"}, "PyPDFLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Google Vertex AI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "KDB.AI": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kdbai/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/mongodb_atlas/", "Merge Documents Loader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/merge_doc/", "Google Cloud Storage File": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_cloud_storage_file/"}, "PyMuPDFLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/"}, "MathpixPDFLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/"}, "UnstructuredPDFLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/"}, "OnlinePDFLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/"}, "PyPDFium2Loader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/"}, "PDFMinerLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/"}, "PDFMinerPDFasHTMLLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/"}, "PyPDFDirectoryLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/"}, "PDFPlumberLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/"}, "AmazonTextractPDFLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Amazon Textract ": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/amazon_textract/"}, "AzureAIDocumentIntelligenceLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "How to load Microsoft Office files": "https://python.langchain.com/v0.2/docs/how_to/document_loader_office_file/", "Microsoft Word": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_word/", "Microsoft Excel": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_excel/", "Microsoft PowerPoint": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_powerpoint/", "Azure AI Document Intelligence": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/azure_document_intelligence/"}, "SQLDatabase": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_prompting/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_large_db/", "How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_query_checking/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "CnosDB": "https://python.langchain.com/v0.2/docs/integrations/providers/cnosdb/", "Rebuff": "https://python.langchain.com/v0.2/docs/integrations/providers/rebuff/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/"}, "create_sql_query_chain": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_prompting/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_large_db/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_query_checking/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/"}, "FewShotPromptTemplate": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_prompting/", "How to select examples by n-gram overlap": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_ngram/", "How to select examples by length": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_length_based/", "How to use example selectors": "https://python.langchain.com/v0.2/docs/how_to/example_selectors/", "How to use few shot examples": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples/", "How to select examples by similarity": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_similarity/", "How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_mmr/", "Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "SemanticSimilarityExampleSelector": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_prompting/", "How to use few shot examples": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples/", "How to use few shot examples in chat models": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples_chat/", "How to select examples by similarity": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_similarity/", "How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_mmr/"}, "PydanticOutputParser": {"How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/v0.2/docs/how_to/output_parser_structured/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_parse/", "How to use the output-fixing parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_fixing/", "How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/", "How to return structured data from a model": "https://python.langchain.com/v0.2/docs/how_to/structured_output/", "Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "OpenAI": {"How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/v0.2/docs/how_to/output_parser_structured/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/v0.2/docs/how_to/long_context_reorder/", "How to add fallbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/fallbacks/", "How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/", "How to stream responses from an LLM": "https://python.langchain.com/v0.2/docs/how_to/streaming_llm/", "How to cache LLM responses": "https://python.langchain.com/v0.2/docs/how_to/llm_caching/", "How to track token usage for LLMs": "https://python.langchain.com/v0.2/docs/how_to/llm_token_usage_tracking/", "Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Milvus": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/milvus_self_query/", "PGVector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/opensearch_self_query/", "Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/elasticsearch_self_query/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/chroma_self_query/", "Timescale Vector (Postgres) ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/redis_self_query/", "Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/mongodb_atlas/", "Qdrant": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/qdrant_self_query/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/llms/openai/", "Google Jobs": "https://python.langchain.com/v0.2/docs/integrations/tools/google_jobs/", "Google Serper": "https://python.langchain.com/v0.2/docs/integrations/tools/google_serper/", "Human as a tool": "https://python.langchain.com/v0.2/docs/integrations/tools/human_tools/", "Google Finance": "https://python.langchain.com/v0.2/docs/integrations/tools/google_finance/", "AWS Lambda": "https://python.langchain.com/v0.2/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/v0.2/docs/integrations/tools/google_drive/", "OpenWeatherMap": "https://python.langchain.com/v0.2/docs/integrations/tools/openweathermap/", "Search Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/search_tools/", "Eleven Labs Text2Speech": "https://python.langchain.com/v0.2/docs/integrations/tools/eleven_labs_tts/", "Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/", "NVIDIA Riva: ASR and TTS": "https://python.langchain.com/v0.2/docs/integrations/tools/nvidia_riva/", "Lemon Agent": "https://python.langchain.com/v0.2/docs/integrations/tools/lemonai/", "GraphQL": "https://python.langchain.com/v0.2/docs/integrations/tools/graphql/", "SearchApi": "https://python.langchain.com/v0.2/docs/integrations/providers/searchapi/", "Gradio": "https://python.langchain.com/v0.2/docs/integrations/tools/gradio_tools/", "SceneXplain": "https://python.langchain.com/v0.2/docs/integrations/tools/sceneXplain/", "Dall-E Image Generator": "https://python.langchain.com/v0.2/docs/integrations/tools/dalle_image_generator/", "Ionic Shopping Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/ionic_shopping/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/", "Mot\u00f6rhead": "https://python.langchain.com/v0.2/docs/integrations/memory/motorhead_memory/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/", "Confident": "https://python.langchain.com/v0.2/docs/integrations/callbacks/confident/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Fiddler": "https://python.langchain.com/v0.2/docs/integrations/callbacks/fiddler/", "SageMaker Tracking": "https://python.langchain.com/v0.2/docs/integrations/callbacks/sagemaker_tracking/", "Label Studio": "https://python.langchain.com/v0.2/docs/integrations/callbacks/labelstudio/", "Comet Tracing": "https://python.langchain.com/v0.2/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/v0.2/docs/integrations/callbacks/argilla/", "PromptLayer": "https://python.langchain.com/v0.2/docs/integrations/callbacks/promptlayer/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/callbacks/streamlit/", "Trubrics": "https://python.langchain.com/v0.2/docs/integrations/callbacks/trubrics/", "Infino": "https://python.langchain.com/v0.2/docs/integrations/callbacks/infino/", "DSPy": "https://python.langchain.com/v0.2/docs/integrations/providers/dspy/", "Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/", "Log10": "https://python.langchain.com/v0.2/docs/integrations/providers/log10/", "LangChain Decorators \u2728": "https://python.langchain.com/v0.2/docs/integrations/providers/langchain_decorators/", "Rebuff": "https://python.langchain.com/v0.2/docs/integrations/providers/rebuff/", "MLflow": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_tracking/", "Serper - Google Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/google_serper/", "Helicone": "https://python.langchain.com/v0.2/docs/integrations/providers/helicone/", "Shale Protocol": "https://python.langchain.com/v0.2/docs/integrations/providers/shaleprotocol/", "WhyLabs": "https://python.langchain.com/v0.2/docs/integrations/providers/whylabs_profiling/", "WandB Tracing": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/v0.2/docs/integrations/providers/clearml_tracking/", "Ray Serve": "https://python.langchain.com/v0.2/docs/integrations/providers/ray_serve/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/", "CSV": "https://python.langchain.com/v0.2/docs/integrations/toolkits/csv/", "Xorbits": "https://python.langchain.com/v0.2/docs/integrations/toolkits/xorbits/", "Jira": "https://python.langchain.com/v0.2/docs/integrations/toolkits/jira/", "Spark Dataframe": "https://python.langchain.com/v0.2/docs/integrations/toolkits/spark/", "Azure Cognitive Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_cognitive_services/", "Natural Language APIs": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi_nla/", "Steam Game Recommendation & Game Details": "https://python.langchain.com/v0.2/docs/integrations/toolkits/steam/", "JSON": "https://python.langchain.com/v0.2/docs/integrations/toolkits/json/", "ClickUp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/clickup/", "Office365": "https://python.langchain.com/v0.2/docs/integrations/toolkits/office365/", "Pandas Dataframe": "https://python.langchain.com/v0.2/docs/integrations/toolkits/pandas/", "NASA": "https://python.langchain.com/v0.2/docs/integrations/toolkits/nasa/", "Azure AI Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_ai_services/", "OpenAPI": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi/", "Gitlab": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gitlab/", "Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/", "Marqo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/marqo/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Amazon Document DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/documentdb/", "VoyageAI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/voyageai-reranker/", "Psychic": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/psychic/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/", "Amazon Textract ": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/amazon_textract/", "NetworkX": "https://python.langchain.com/v0.2/docs/integrations/graphs/networkx/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/", "Layerup Security": "https://python.langchain.com/v0.2/docs/integrations/llms/layerup_security/", "Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "SimpleJsonOutputParser": {"How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/v0.2/docs/how_to/output_parser_structured/"}, "AsyncCallbackHandler": {"How to use callbacks in async environments": "https://python.langchain.com/v0.2/docs/how_to/callbacks_async/", "Bedrock": "https://python.langchain.com/v0.2/docs/integrations/llms/bedrock/"}, "BaseCallbackHandler": {"How to use callbacks in async environments": "https://python.langchain.com/v0.2/docs/how_to/callbacks_async/", "How to propagate callbacks constructor": "https://python.langchain.com/v0.2/docs/how_to/callbacks_constructor/", "How to attach callbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/callbacks_attach/", "How to create custom callback handlers": "https://python.langchain.com/v0.2/docs/how_to/custom_callbacks/", "How to pass callbacks in at runtime": "https://python.langchain.com/v0.2/docs/how_to/callbacks_runtime/"}, "LLMResult": {"How to use callbacks in async environments": "https://python.langchain.com/v0.2/docs/how_to/callbacks_async/", "How to propagate callbacks constructor": "https://python.langchain.com/v0.2/docs/how_to/callbacks_constructor/", "How to attach callbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/callbacks_attach/", "How to pass callbacks in at runtime": "https://python.langchain.com/v0.2/docs/how_to/callbacks_runtime/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "RunnableParallel": {"How to add values to a chain's state": "https://python.langchain.com/v0.2/docs/how_to/assign/", "How to invoke runnables in parallel": "https://python.langchain.com/v0.2/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/v0.2/docs/how_to/passthrough/", "How to add message history": "https://python.langchain.com/v0.2/docs/how_to/message_history/", "How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/", "How to chain runnables": "https://python.langchain.com/v0.2/docs/how_to/sequence/", "Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/"}, "RunnablePassthrough": {"How to add values to a chain's state": "https://python.langchain.com/v0.2/docs/how_to/assign/", "How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/", "How to do per-user retrieval": "https://python.langchain.com/v0.2/docs/how_to/qa_per_user/", "How to inspect runnables": "https://python.langchain.com/v0.2/docs/how_to/inspect/", "How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to do tool/function calling": "https://python.langchain.com/v0.2/docs/how_to/function_calling/", "How to add a human-in-the-loop for tools": "https://python.langchain.com/v0.2/docs/how_to/tools_human/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_large_db/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to map values to a graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_mapping/", "How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling/", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to add default invocation args to a Runnable": "https://python.langchain.com/v0.2/docs/how_to/binding/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/v0.2/docs/how_to/dynamic_chain/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/v0.2/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/v0.2/docs/how_to/passthrough/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_high_cardinality/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/v0.2/docs/how_to/tools_prompting/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/", "Hybrid Search": "https://python.langchain.com/v0.2/docs/how_to/hybrid/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "NVIDIA NIMs ": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/nvidia_ai_endpoints/", "You.com": "https://python.langchain.com/v0.2/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/v0.2/docs/integrations/retrievers/asknews/", "Tavily Search API": "https://python.langchain.com/v0.2/docs/integrations/retrievers/tavily/", "Milvus Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/milvus_hybrid_search/", "Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "DSPy": "https://python.langchain.com/v0.2/docs/integrations/providers/dspy/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_summary/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_generative_ai/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/", "Vector stores and retrievers": "https://python.langchain.com/v0.2/docs/tutorials/retrievers/"}, "StrOutputParser": {"How to add values to a chain's state": "https://python.langchain.com/v0.2/docs/how_to/assign/", "How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/", "How to do per-user retrieval": "https://python.langchain.com/v0.2/docs/how_to/qa_per_user/", "How to inspect runnables": "https://python.langchain.com/v0.2/docs/how_to/inspect/", "How to add fallbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/fallbacks/", "How to map values to a graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_mapping/", "How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to add default invocation args to a Runnable": "https://python.langchain.com/v0.2/docs/how_to/binding/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/v0.2/docs/how_to/dynamic_chain/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/v0.2/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/v0.2/docs/how_to/passthrough/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "How to run custom functions": "https://python.langchain.com/v0.2/docs/how_to/functions/", "How to chain runnables": "https://python.langchain.com/v0.2/docs/how_to/sequence/", "Hybrid Search": "https://python.langchain.com/v0.2/docs/how_to/hybrid/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_query_checking/", "Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/", "NVIDIA NIMs ": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/nvidia_ai_endpoints/", "You.com": "https://python.langchain.com/v0.2/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/v0.2/docs/integrations/retrievers/asknews/", "Tavily Search API": "https://python.langchain.com/v0.2/docs/integrations/retrievers/tavily/", "Milvus Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/milvus_hybrid_search/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "ChatOllama": "https://python.langchain.com/v0.2/docs/integrations/chat/ollama/", "Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/", "NVIDIA NIMs": "https://python.langchain.com/v0.2/docs/integrations/chat/nvidia_ai_endpoints/", "Fiddler": "https://python.langchain.com/v0.2/docs/integrations/callbacks/fiddler/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "DSPy": "https://python.langchain.com/v0.2/docs/integrations/providers/dspy/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_summary/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "Volc Engine Maas": "https://python.langchain.com/v0.2/docs/integrations/llms/volcengine_maas/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_generative_ai/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/", "AI21LLM": "https://python.langchain.com/v0.2/docs/integrations/llms/ai21/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/", "Build a Simple LLM Application": "https://python.langchain.com/v0.2/docs/tutorials/llm_chain/"}, "RunnableBranch": {"How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/"}, "cosine_similarity": {"How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/"}, "tool": {"How to use tools in a chain": "https://python.langchain.com/v0.2/docs/how_to/tools_chain/", "How to do tool/function calling": "https://python.langchain.com/v0.2/docs/how_to/function_calling/", "How to add a human-in-the-loop for tools": "https://python.langchain.com/v0.2/docs/how_to/tools_human/", "How to create custom tools": "https://python.langchain.com/v0.2/docs/how_to/custom_tools/", "How to pass multimodal data directly to models": "https://python.langchain.com/v0.2/docs/how_to/multimodal_inputs/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling/", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/v0.2/docs/how_to/tools_prompting/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "ChatTongyi": "https://python.langchain.com/v0.2/docs/integrations/chat/tongyi/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Log, Trace, and Monitor": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/index/", "JSONFormer": "https://python.langchain.com/v0.2/docs/integrations/llms/jsonformer_experimental/"}, "ConfigurableField": {"How to do per-user retrieval": "https://python.langchain.com/v0.2/docs/how_to/qa_per_user/", "How to configure runtime chain internals": "https://python.langchain.com/v0.2/docs/how_to/configure/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/", "How to combine results from multiple retrievers": "https://python.langchain.com/v0.2/docs/how_to/ensemble_retriever/", "Hybrid Search": "https://python.langchain.com/v0.2/docs/how_to/hybrid/"}, "NGramOverlapExampleSelector": {"How to select examples by n-gram overlap": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_ngram/"}, "get_openai_callback": {"How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/", "How to run custom functions": "https://python.langchain.com/v0.2/docs/how_to/functions/", "How to track token usage for LLMs": "https://python.langchain.com/v0.2/docs/how_to/llm_token_usage_tracking/", "AzureChatOpenAI": "https://python.langchain.com/v0.2/docs/integrations/chat/azure_chat_openai/"}, "load_tools": {"How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/", "Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "ChatGPT Plugins": "https://python.langchain.com/v0.2/docs/integrations/tools/chatgpt_plugins/", "Google Jobs": "https://python.langchain.com/v0.2/docs/integrations/tools/google_jobs/", "Human as a tool": "https://python.langchain.com/v0.2/docs/integrations/tools/human_tools/", "Google Finance": "https://python.langchain.com/v0.2/docs/integrations/tools/google_finance/", "AWS Lambda": "https://python.langchain.com/v0.2/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/v0.2/docs/integrations/tools/google_drive/", "Requests": "https://python.langchain.com/v0.2/docs/integrations/tools/requests/", "OpenWeatherMap": "https://python.langchain.com/v0.2/docs/integrations/providers/openweathermap/", "Memorize": "https://python.langchain.com/v0.2/docs/integrations/tools/memorize/", "Search Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/search_tools/", "Eleven Labs Text2Speech": "https://python.langchain.com/v0.2/docs/integrations/tools/eleven_labs_tts/", "ArXiv": "https://python.langchain.com/v0.2/docs/integrations/tools/arxiv/", "GraphQL": "https://python.langchain.com/v0.2/docs/integrations/tools/graphql/", "SceneXplain": "https://python.langchain.com/v0.2/docs/integrations/tools/sceneXplain/", "Dall-E Image Generator": "https://python.langchain.com/v0.2/docs/integrations/tools/dalle_image_generator/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "SageMaker Tracking": "https://python.langchain.com/v0.2/docs/integrations/callbacks/sagemaker_tracking/", "Comet Tracing": "https://python.langchain.com/v0.2/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/v0.2/docs/integrations/callbacks/argilla/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/callbacks/streamlit/", "SerpAPI": "https://python.langchain.com/v0.2/docs/integrations/providers/serpapi/", "SearchApi": "https://python.langchain.com/v0.2/docs/integrations/providers/searchapi/", "Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/", "Golden": "https://python.langchain.com/v0.2/docs/integrations/providers/golden/", "Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/", "Wolfram Alpha": "https://python.langchain.com/v0.2/docs/integrations/providers/wolfram_alpha/", "MLflow": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_tracking/", "DataForSEO": "https://python.langchain.com/v0.2/docs/integrations/providers/dataforseo/", "SearxNG Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/searx/", "Serper - Google Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/google_serper/", "Stack Exchange": "https://python.langchain.com/v0.2/docs/integrations/providers/stackexchange/", "Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/", "WandB Tracing": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/v0.2/docs/integrations/providers/clearml_tracking/", "Dataherald": "https://python.langchain.com/v0.2/docs/integrations/providers/dataherald/", "Amazon API Gateway": "https://python.langchain.com/v0.2/docs/integrations/llms/amazon_api_gateway/"}, "get_bedrock_anthropic_callback": {"How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/"}, "CallbackManagerForLLMRun": {"How to create a custom LLM class": "https://python.langchain.com/v0.2/docs/how_to/custom_llm/", "How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "LLM": {"How to create a custom LLM class": "https://python.langchain.com/v0.2/docs/how_to/custom_llm/"}, "GenerationChunk": {"How to create a custom LLM class": "https://python.langchain.com/v0.2/docs/how_to/custom_llm/"}, "BaseLoader": {"How to create a custom Document Loader": "https://python.langchain.com/v0.2/docs/how_to/document_loader_custom/", "How to use the LangChain indexing API": "https://python.langchain.com/v0.2/docs/how_to/indexing/"}, "BaseBlobParser": {"How to create a custom Document Loader": "https://python.langchain.com/v0.2/docs/how_to/document_loader_custom/"}, "Blob": {"How to create a custom Document Loader": "https://python.langchain.com/v0.2/docs/how_to/document_loader_custom/", "Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Cloud Document AI": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_docai/"}, "FileSystemBlobLoader": {"How to create a custom Document Loader": "https://python.langchain.com/v0.2/docs/how_to/document_loader_custom/"}, "GenericLoader": {"How to create a custom Document Loader": "https://python.langchain.com/v0.2/docs/how_to/document_loader_custom/", "Grobid": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/grobid/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/", "Source Code": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/source_code/"}, "LengthBasedExampleSelector": {"How to select examples by length": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_length_based/"}, "BaseExampleSelector": {"How to use example selectors": "https://python.langchain.com/v0.2/docs/how_to/example_selectors/"}, "Language": {"How to split code": "https://python.langchain.com/v0.2/docs/how_to/code_splitter/", "Source Code": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/source_code/"}, "Chroma": {"How to use few shot examples": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples/", "How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to use few shot examples in chat models": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples_chat/", "How to select examples by similarity": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_similarity/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/v0.2/docs/how_to/long_context_reorder/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "How to create and query vector stores": "https://python.langchain.com/v0.2/docs/how_to/vectorstores/", "How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/", "How to use the Parent Document Retriever": "https://python.langchain.com/v0.2/docs/how_to/parent_document_retriever/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_high_cardinality/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/", "RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/", "LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/chroma/", "Confident": "https://python.langchain.com/v0.2/docs/integrations/callbacks/confident/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Psychic": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/psychic/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/", "Vector stores and retrievers": "https://python.langchain.com/v0.2/docs/tutorials/retrievers/"}, "PydanticToolsParser": {"How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to do tool/function calling": "https://python.langchain.com/v0.2/docs/how_to/function_calling/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_large_db/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/"}, "chain": {"How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/v0.2/docs/how_to/dynamic_chain/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "How to run custom functions": "https://python.langchain.com/v0.2/docs/how_to/functions/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/"}, "RecursiveJsonSplitter": {"How to split JSON data": "https://python.langchain.com/v0.2/docs/how_to/recursive_json_splitter/"}, "FewShotChatMessagePromptTemplate": {"How to use few shot examples in chat models": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples_chat/", "Fiddler": "https://python.langchain.com/v0.2/docs/integrations/callbacks/fiddler/"}, "ToolMessage": {"How to do tool/function calling": "https://python.langchain.com/v0.2/docs/how_to/function_calling/", "How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling/", "How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to return structured data from a model": "https://python.langchain.com/v0.2/docs/how_to/structured_output/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "ChatAnthropic": "https://python.langchain.com/v0.2/docs/integrations/chat/anthropic/"}, "XMLOutputParser": {"How to parse XML output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_xml/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/"}, "Runnable": {"How to add a human-in-the-loop for tools": "https://python.langchain.com/v0.2/docs/how_to/tools_human/", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/v0.2/docs/how_to/dynamic_chain/"}, "StructuredTool": {"How to create custom tools": "https://python.langchain.com/v0.2/docs/how_to/custom_tools/", "Infobip": "https://python.langchain.com/v0.2/docs/integrations/tools/infobip/"}, "ToolException": {"How to create custom tools": "https://python.langchain.com/v0.2/docs/how_to/custom_tools/"}, "HuggingFaceEmbeddings": {"Text embedding models": "https://python.langchain.com/v0.2/docs/how_to/embed_text/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/v0.2/docs/how_to/long_context_reorder/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/platforms/huggingface/", "Sentence Transformers on Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/sentence_transformers/", "LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/", "Snowflake": "https://python.langchain.com/v0.2/docs/integrations/providers/snowflake/", "VDMS": "https://python.langchain.com/v0.2/docs/integrations/providers/vdms/", "Vald": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vald/", "ScaNN": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/scann/", "Annoy": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/annoy/", "Oracle AI Vector Search: Vector Store": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/oracle/", "TileDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tiledb/", "SurrealDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/surrealdb/", "Faiss (Async)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss_async/", "Aerospike": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/aerospike/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vdms/", "Faiss": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss/", "Infinispan": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/infinispanvs/", "SemaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/semadb/", "Vearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vearch/", "Cross Encoder Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/cross_encoder_reranker/", "self-query-qdrant": "https://python.langchain.com/v0.2/docs/templates/self-query-qdrant/"}, "LongContextReorder": {"How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/v0.2/docs/how_to/long_context_reorder/", "LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/"}, "create_stuff_documents_chain": {"How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/v0.2/docs/how_to/long_context_reorder/", "How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/retrievers/ragatouille/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "BaseMessage": {"How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to propagate callbacks constructor": "https://python.langchain.com/v0.2/docs/how_to/callbacks_constructor/", "How to attach callbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/callbacks_attach/", "How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/", "How to pass callbacks in at runtime": "https://python.langchain.com/v0.2/docs/how_to/callbacks_runtime/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "WeChat": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/wechat/", "Discord": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/discord/", "Chat Bot Feedback Template": "https://python.langchain.com/v0.2/docs/templates/chat-bot-feedback/"}, "DatetimeOutputParser": {"How to add fallbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/fallbacks/"}, "CypherQueryCorrector": {"How to map values to a graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_mapping/"}, "Schema": {"How to map values to a graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_mapping/"}, "set_llm_cache": {"How to cache chat model responses": "https://python.langchain.com/v0.2/docs/how_to/chat_model_caching/", "How to cache LLM responses": "https://python.langchain.com/v0.2/docs/how_to/llm_caching/", "Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "DSPy": "https://python.langchain.com/v0.2/docs/integrations/providers/dspy/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/providers/mongodb_atlas/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/providers/astradb/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/providers/redis/", "Cassandra": "https://python.langchain.com/v0.2/docs/integrations/providers/cassandra/", "Momento": "https://python.langchain.com/v0.2/docs/integrations/providers/momento/"}, "InMemoryCache": {"How to cache chat model responses": "https://python.langchain.com/v0.2/docs/how_to/chat_model_caching/", "How to cache LLM responses": "https://python.langchain.com/v0.2/docs/how_to/llm_caching/", "Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/"}, "SQLiteCache": {"How to cache chat model responses": "https://python.langchain.com/v0.2/docs/how_to/chat_model_caching/", "How to cache LLM responses": "https://python.langchain.com/v0.2/docs/how_to/llm_caching/", "Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "DSPy": "https://python.langchain.com/v0.2/docs/integrations/providers/dspy/"}, "create_sql_agent": {"How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "CnosDB": "https://python.langchain.com/v0.2/docs/integrations/providers/cnosdb/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/"}, "PythonAstREPLTool": {"How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/"}, "JsonOutputKeyToolsParser": {"How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/"}, "create_pandas_dataframe_agent": {"How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "Airbyte Question Answering": "https://python.langchain.com/v0.2/docs/integrations/toolkits/airbyte_structured_qa/", "Pandas Dataframe": "https://python.langchain.com/v0.2/docs/integrations/toolkits/pandas/"}, "create_retrieval_chain": {"How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/retrievers/ragatouille/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "create_history_aware_retriever": {"How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "OutputFixingParser": {"How to use the output-fixing parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_fixing/", "How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/"}, "FunctionMessage": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "AIMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/", "How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "FunctionMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "HumanMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "SystemMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "ToolMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "AsyncCallbackManagerForLLMRun": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "SimpleChatModel": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "ChatGeneration": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/", "How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/"}, "ChatGenerationChunk": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "ChatResult": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "run_in_executor": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "MoveFileTool": {"How to convert tools to OpenAI Functions": "https://python.langchain.com/v0.2/docs/how_to/tools_as_openai_functions/"}, "RunnableConfig": {"How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to run custom functions": "https://python.langchain.com/v0.2/docs/how_to/functions/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/v0.2/docs/how_to/tools_prompting/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/"}, "ToolCall": {"How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/"}, "SQLRecordManager": {"How to use the LangChain indexing API": "https://python.langchain.com/v0.2/docs/how_to/indexing/"}, "index": {"How to use the LangChain indexing API": "https://python.langchain.com/v0.2/docs/how_to/indexing/"}, "create_openai_tools_agent": {"How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "Log, Trace, and Monitor": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/index/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Slack": "https://python.langchain.com/v0.2/docs/integrations/toolkits/slack/", "Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/"}, "SemanticChunker": {"How to split text based on semantic similarity": "https://python.langchain.com/v0.2/docs/how_to/semantic-chunker/"}, "JsonOutputParser": {"How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/v0.2/docs/how_to/tools_prompting/", "How to parse JSON output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_json/"}, "InMemoryByteStore": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "Caching": "https://python.langchain.com/v0.2/docs/how_to/caching_embeddings/", "InMemoryByteStore": "https://python.langchain.com/v0.2/docs/integrations/stores/in_memory/"}, "TextLoader": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "How to load documents from a directory": "https://python.langchain.com/v0.2/docs/how_to/document_loader_directory/", "How to create and query vector stores": "https://python.langchain.com/v0.2/docs/how_to/vectorstores/", "How to use the Parent Document Retriever": "https://python.langchain.com/v0.2/docs/how_to/parent_document_retriever/", "How to use a vectorstore as a retriever": "https://python.langchain.com/v0.2/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/v0.2/docs/how_to/caching_embeddings/", "Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azuresearch/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kinetica/", "JaguarDB Vector Database": "https://python.langchain.com/v0.2/docs/integrations/retrievers/jaguar/", "LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere-reranker/", "SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/singlestoredb/", "FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "Confident": "https://python.langchain.com/v0.2/docs/integrations/callbacks/confident/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "Upstash Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/upstash/", "VDMS": "https://python.langchain.com/v0.2/docs/integrations/providers/vdms/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/", "LanceDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lancedb/", "Kinetica Vectorstore API": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kinetica/", "SQLite-VSS": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sqlitevss/", "Vald": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vald/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "DashVector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dashvector/", "Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/databricks_vector_search/", "ScaNN": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/scann/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/xata/", "Hippo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hippo/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vectara/", "Vespa": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vespa/", "Rockset": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/rockset/", "DingoDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dingo/", "Zilliz": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zilliz/", "Azure Cosmos DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azure_cosmos_db/", "viking DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vikingdb/", "Annoy": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/annoy/", "Couchbase ": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/couchbase/", "Typesense": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/typesense/", "Momento Vector Index (MVI)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/momento_vector_index/", "TiDB Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tidb_vector/", "Relyt": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/relyt/", "Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/atlas/", "Activeloop Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/activeloop_deeplake/", "vlite": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vlite/", "Neo4j Vector Index": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lantern/", "Tair": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tair/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/chroma/", "DuckDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/duckdb/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/alibabacloud_opensearch/", "Clarifai": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/clarifai/", "scikit-learn": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sklearn/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/", "DocArray HnswSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_hnsw/", "MyScale": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/myscale/", "TileDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tiledb/", "ClickHouse": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/clickhouse/", "Google Memorystore for Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_memorystore_redis/", "Qdrant": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/qdrant/", "Tigris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tigris/", "China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/ecloud_vector_search/", "Bagel": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/bagel/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiducloud_vector_search/", "AwaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/awadb/", "Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/supabase/", "SurrealDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/surrealdb/", "OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/opensearch/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pinecone/", "Faiss (Async)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss_async/", "BagelDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/bageldb/", "ManticoreSearch VectorStore": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/manticore_search/", "USearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/usearch/", "Milvus": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/milvus/", "Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/elasticsearch/", "PGVecto.rs": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgvecto_rs/", "Marqo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/marqo/", "DocArray InMemorySearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_in_memory/", "Postgres Embedding": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgembedding/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vdms/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Faiss": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss/", "Epsilla": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/epsilla/", "Amazon Document DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/documentdb/", "SemaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/semadb/", "AnalyticDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/analyticdb/", "Hologres": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hologres/", "Baidu VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiduvectordb/", "Vearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vearch/", "Meilisearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/meilisearch/", "VoyageAI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/", "OpenVINO Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openvino_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/"}, "MultiVectorRetriever": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/"}, "SearchType": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "Zep Open Source": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_memorystore/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/"}, "SQLChatMessageHistory": {"How to add message history": "https://python.langchain.com/v0.2/docs/how_to/message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/v0.2/docs/integrations/memory/sql_chat_message_history/", "SQLite": "https://python.langchain.com/v0.2/docs/integrations/providers/sqlite/"}, "ConfigurableFieldSpec": {"How to add message history": "https://python.langchain.com/v0.2/docs/how_to/message_history/"}, "Ollama": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/v0.2/docs/how_to/tools_prompting/", "Ollama": "https://python.langchain.com/v0.2/docs/integrations/llms/ollama/"}, "CallbackManager": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "ChatLiteLLM": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm/", "GPTRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/gpt_router/", "ChatLiteLLMRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm_router/", "ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/", "Llama.cpp": "https://python.langchain.com/v0.2/docs/integrations/llms/llamacpp/", "Titan Takeoff": "https://python.langchain.com/v0.2/docs/integrations/llms/titan_takeoff/"}, "StreamingStdOutCallbackHandler": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "DeepInfra": "https://python.langchain.com/v0.2/docs/integrations/chat/deepinfra/", "ChatLiteLLM": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm/", "ChatEverlyAI": "https://python.langchain.com/v0.2/docs/integrations/chat/everlyai/", "GPTRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/gpt_router/", "ChatLiteLLMRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm_router/", "ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/", "Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/chat/yuan2/", "GPT4All": "https://python.langchain.com/v0.2/docs/integrations/llms/gpt4all/", "Arthur": "https://python.langchain.com/v0.2/docs/integrations/providers/arthur_tracking/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/", "TextGen": "https://python.langchain.com/v0.2/docs/integrations/llms/textgen/", "Bedrock": "https://python.langchain.com/v0.2/docs/integrations/llms/bedrock/", "Llama.cpp": "https://python.langchain.com/v0.2/docs/integrations/llms/llamacpp/", "Titan Takeoff": "https://python.langchain.com/v0.2/docs/integrations/llms/titan_takeoff/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/llms/edenai/", "C Transformers": "https://python.langchain.com/v0.2/docs/integrations/llms/ctransformers/", "ExLlamaV2": "https://python.langchain.com/v0.2/docs/integrations/llms/exllamav2/", "Huggingface Endpoints": "https://python.langchain.com/v0.2/docs/integrations/llms/huggingface_endpoint/", "Replicate": "https://python.langchain.com/v0.2/docs/integrations/llms/replicate/"}, "LlamaCpp": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/", "Llama.cpp": "https://python.langchain.com/v0.2/docs/integrations/llms/llamacpp/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/"}, "GPT4All": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "PromptLayer": "https://python.langchain.com/v0.2/docs/integrations/callbacks/promptlayer/", "GPT4All": "https://python.langchain.com/v0.2/docs/integrations/llms/gpt4all/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/"}, "Llamafile": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "Llamafile": "https://python.langchain.com/v0.2/docs/integrations/llms/llamafile/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/"}, "LLMChain": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "Clarifai": "https://python.langchain.com/v0.2/docs/integrations/llms/clarifai/", "RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/", "Memorize": "https://python.langchain.com/v0.2/docs/integrations/tools/memorize/", "Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/", "Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/", "Dall-E Image Generator": "https://python.langchain.com/v0.2/docs/integrations/tools/dalle_image_generator/", "Mot\u00f6rhead": "https://python.langchain.com/v0.2/docs/integrations/memory/motorhead_memory/", "Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/", "Context": "https://python.langchain.com/v0.2/docs/integrations/callbacks/context/", "SageMaker Tracking": "https://python.langchain.com/v0.2/docs/integrations/callbacks/sagemaker_tracking/", "Argilla": "https://python.langchain.com/v0.2/docs/integrations/callbacks/argilla/", "Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/", "MLflow Deployments for LLMs": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow/", "MLflow AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_ai_gateway/", "Rebuff": "https://python.langchain.com/v0.2/docs/integrations/providers/rebuff/", "Prediction Guard": "https://python.langchain.com/v0.2/docs/integrations/llms/predictionguard/", "MLflow": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_tracking/", "Shale Protocol": "https://python.langchain.com/v0.2/docs/integrations/providers/shaleprotocol/", "Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/", "Ray Serve": "https://python.langchain.com/v0.2/docs/integrations/providers/ray_serve/", "Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Baseten": "https://python.langchain.com/v0.2/docs/integrations/llms/baseten/", "StochasticAI": "https://python.langchain.com/v0.2/docs/integrations/llms/stochasticai/", "Solar": "https://python.langchain.com/v0.2/docs/integrations/llms/solar/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/", "IPEX-LLM": "https://python.langchain.com/v0.2/docs/integrations/llms/ipex_llm/", "Banana": "https://python.langchain.com/v0.2/docs/integrations/llms/banana/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/v0.2/docs/integrations/llms/alibabacloud_pai_eas_endpoint/", "OpenLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/openllm/", "OctoAI": "https://python.langchain.com/v0.2/docs/integrations/llms/octoai/", "Writer": "https://python.langchain.com/v0.2/docs/integrations/llms/writer/", "Modal": "https://python.langchain.com/v0.2/docs/integrations/llms/modal/", "TextGen": "https://python.langchain.com/v0.2/docs/integrations/llms/textgen/", "Xorbits Inference (Xinference)": "https://python.langchain.com/v0.2/docs/integrations/llms/xinference/", "Nebula (Symbl.ai)": "https://python.langchain.com/v0.2/docs/integrations/llms/symblai_nebula/", "DeepInfra": "https://python.langchain.com/v0.2/docs/integrations/llms/deepinfra/", "NLP Cloud": "https://python.langchain.com/v0.2/docs/integrations/llms/nlpcloud/", "GPT4All": "https://python.langchain.com/v0.2/docs/integrations/llms/gpt4all/", "ForefrontAI": "https://python.langchain.com/v0.2/docs/integrations/llms/forefrontai/", "MosaicML": "https://python.langchain.com/v0.2/docs/integrations/llms/mosaicml/", "CerebriumAI": "https://python.langchain.com/v0.2/docs/integrations/llms/cerebriumai/", "Predibase": "https://python.langchain.com/v0.2/docs/integrations/llms/predibase/", "GigaChat": "https://python.langchain.com/v0.2/docs/integrations/llms/gigachat/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_generative_ai/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/", "Aphrodite Engine": "https://python.langchain.com/v0.2/docs/integrations/llms/aphrodite/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/llms/edenai/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/v0.2/docs/integrations/llms/javelin/", "C Transformers": "https://python.langchain.com/v0.2/docs/integrations/llms/ctransformers/", "vLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/vllm/", "Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/", "Minimax": "https://python.langchain.com/v0.2/docs/integrations/llms/minimax/", "Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/llms/yuan2/", "Huggingface Endpoints": "https://python.langchain.com/v0.2/docs/integrations/llms/huggingface_endpoint/", "Runhouse": "https://python.langchain.com/v0.2/docs/integrations/llms/runhouse/", "Anyscale": "https://python.langchain.com/v0.2/docs/integrations/llms/anyscale/", "YandexGPT": "https://python.langchain.com/v0.2/docs/integrations/llms/yandex/", "GooseAI": "https://python.langchain.com/v0.2/docs/integrations/llms/gooseai/", "OpenLM": "https://python.langchain.com/v0.2/docs/integrations/llms/openlm/", "Cloudflare Workers AI": "https://python.langchain.com/v0.2/docs/integrations/llms/cloudflare_workersai/", "CTranslate2": "https://python.langchain.com/v0.2/docs/integrations/llms/ctranslate2/", "PipelineAI": "https://python.langchain.com/v0.2/docs/integrations/llms/pipelineai/", "ChatGLM": "https://python.langchain.com/v0.2/docs/integrations/llms/chatglm/", "Gradient": "https://python.langchain.com/v0.2/docs/integrations/llms/gradient/", "Petals": "https://python.langchain.com/v0.2/docs/integrations/llms/petals/", "Replicate": "https://python.langchain.com/v0.2/docs/integrations/llms/replicate/", "Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/"}, "ConditionalPromptSelector": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/"}, "HubRunnable": {"How to configure runtime chain internals": "https://python.langchain.com/v0.2/docs/how_to/configure/"}, "ContextualCompressionRetriever": {"How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere-reranker/", "FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/providers/ragatouille/", "VoyageAI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/", "OpenVINO Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openvino_rerank/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/"}, "LLMChainExtractor": {"How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/"}, "LLMChainFilter": {"How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/"}, "EmbeddingsFilter": {"How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/"}, "DocumentCompressorPipeline": {"How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/"}, "EmbeddingsRedundantFilter": {"How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/"}, "Comparator": {"How to construct filters for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_constructing_filters/"}, "Comparison": {"How to construct filters for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_constructing_filters/"}, "Operation": {"How to construct filters for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_constructing_filters/"}, "Operator": {"How to construct filters for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_constructing_filters/"}, "StructuredQuery": {"How to construct filters for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_constructing_filters/"}, "ChromaTranslator": {"How to construct filters for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_constructing_filters/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/"}, "ElasticsearchTranslator": {"How to construct filters for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_constructing_filters/"}, "WikipediaQueryRun": {"How to use built-in tools and toolkits": "https://python.langchain.com/v0.2/docs/how_to/tools_builtin/", "Wikipedia": "https://python.langchain.com/v0.2/docs/integrations/tools/wikipedia/"}, "WikipediaAPIWrapper": {"How to use built-in tools and toolkits": "https://python.langchain.com/v0.2/docs/how_to/tools_builtin/", "Wikipedia": "https://python.langchain.com/v0.2/docs/integrations/tools/wikipedia/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/"}, "CallbackManagerForRetrieverRun": {"How to create a custom Retriever": "https://python.langchain.com/v0.2/docs/how_to/custom_retriever/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/"}, "BaseRetriever": {"How to create a custom Retriever": "https://python.langchain.com/v0.2/docs/how_to/custom_retriever/"}, "LLMGraphTransformer": {"How to construct knowledge graphs": "https://python.langchain.com/v0.2/docs/how_to/graph_constructing/"}, "RetryOutputParser": {"How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/"}, "TimeWeightedVectorStoreRetriever": {"How to use a time-weighted vector store retriever": "https://python.langchain.com/v0.2/docs/how_to/time_weighted_vectorstore/"}, "InMemoryDocstore": {"How to use a time-weighted vector store retriever": "https://python.langchain.com/v0.2/docs/how_to/time_weighted_vectorstore/", "Annoy": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/annoy/"}, "mock_now": {"How to use a time-weighted vector store retriever": "https://python.langchain.com/v0.2/docs/how_to/time_weighted_vectorstore/"}, "RunnableGenerator": {"How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/"}, "OutputParserException": {"How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/"}, "BaseOutputParser": {"How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/", "How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/"}, "BaseGenerationOutputParser": {"How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/"}, "Generation": {"How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/"}, "DirectoryLoader": {"How to load documents from a directory": "https://python.langchain.com/v0.2/docs/how_to/document_loader_directory/", "Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/azure_ai_search/", "Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/", "StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/"}, "PythonLoader": {"How to load documents from a directory": "https://python.langchain.com/v0.2/docs/how_to/document_loader_directory/"}, "LanceDB": {"How to create and query vector stores": "https://python.langchain.com/v0.2/docs/how_to/vectorstores/", "LanceDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lancedb/"}, "SpacyTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/v0.2/docs/how_to/split_by_token/", "spaCy": "https://python.langchain.com/v0.2/docs/integrations/providers/spacy/", "Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/atlas/"}, "SentenceTransformersTokenTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/v0.2/docs/how_to/split_by_token/"}, "NLTKTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/v0.2/docs/how_to/split_by_token/"}, "KonlpyTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/v0.2/docs/how_to/split_by_token/"}, "WikipediaRetriever": {"How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "Wikipedia": "https://python.langchain.com/v0.2/docs/integrations/providers/wikipedia/"}, "UnstructuredHTMLLoader": {"How to load HTML": "https://python.langchain.com/v0.2/docs/how_to/document_loader_html/", "Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/"}, "MultiQueryRetriever": {"How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_summary/"}, "GraphCypherQAChain": {"How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "Neo4j": "https://python.langchain.com/v0.2/docs/integrations/graphs/neo4j_cypher/", "Memgraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/memgraph/", "Diffbot": "https://python.langchain.com/v0.2/docs/integrations/graphs/diffbot/", "Apache AGE": "https://python.langchain.com/v0.2/docs/integrations/graphs/apache_age/", "Build a Question Answering application over a Graph Database": "https://python.langchain.com/v0.2/docs/tutorials/graph/"}, "Neo4jVector": {"How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "Neo4j": "https://python.langchain.com/v0.2/docs/integrations/providers/neo4j/", "Neo4j Vector Index": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/neo4jvector/"}, "ParentDocumentRetriever": {"How to use the Parent Document Retriever": "https://python.langchain.com/v0.2/docs/how_to/parent_document_retriever/"}, "InMemoryStore": {"How to use the Parent Document Retriever": "https://python.langchain.com/v0.2/docs/how_to/parent_document_retriever/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/"}, "YamlOutputParser": {"How to parse YAML output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_yaml/"}, "PipelinePromptTemplate": {"How to compose prompts together": "https://python.langchain.com/v0.2/docs/how_to/prompts_composition/"}, "CacheBackedEmbeddings": {"Caching": "https://python.langchain.com/v0.2/docs/how_to/caching_embeddings/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/stores/astradb/", "Cassandra": "https://python.langchain.com/v0.2/docs/integrations/stores/cassandra/"}, "LocalFileStore": {"Caching": "https://python.langchain.com/v0.2/docs/how_to/caching_embeddings/", "LocalFileStore": "https://python.langchain.com/v0.2/docs/integrations/stores/file_system/"}, "render_text_description": {"How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/v0.2/docs/how_to/tools_prompting/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/"}, "RunnableSerializable": {"LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/"}, "Run": {"LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/"}, "MarkdownHeaderTextSplitter": {"How to split Markdown by Headers": "https://python.langchain.com/v0.2/docs/how_to/markdown_header_metadata_splitter/"}, "HTMLHeaderTextSplitter": {"How to split by HTML header ": "https://python.langchain.com/v0.2/docs/how_to/HTML_header_metadata_splitter/"}, "EnsembleRetriever": {"How to combine results from multiple retrievers": "https://python.langchain.com/v0.2/docs/how_to/ensemble_retriever/"}, "BM25Retriever": {"How to combine results from multiple retrievers": "https://python.langchain.com/v0.2/docs/how_to/ensemble_retriever/", "BM25": "https://python.langchain.com/v0.2/docs/integrations/retrievers/bm25/", "Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/"}, "ChatVertexAI": {"Response metadata": "https://python.langchain.com/v0.2/docs/how_to/response_metadata/", "Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google SQL for MySQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mysql/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_alloydb/", "Google El Carro Oracle": "https://python.langchain.com/v0.2/docs/integrations/memory/google_el_carro/", "Google SQL for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_pg/", "Google SQL for SQL Server": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mssql/", "ChatVertexAI": "https://python.langchain.com/v0.2/docs/integrations/chat/google_vertex_ai_palm/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "ChatMistralAI": {"Response metadata": "https://python.langchain.com/v0.2/docs/how_to/response_metadata/", "MistralAI": "https://python.langchain.com/v0.2/docs/integrations/providers/mistralai/", "Build an Extraction Chain": "https://python.langchain.com/v0.2/docs/tutorials/extraction/"}, "ChatGroq": {"Response metadata": "https://python.langchain.com/v0.2/docs/how_to/response_metadata/", "Groq": "https://python.langchain.com/v0.2/docs/integrations/chat/groq/"}, "ChatFireworks": {"Response metadata": "https://python.langchain.com/v0.2/docs/how_to/response_metadata/", "ChatFireworks": "https://python.langchain.com/v0.2/docs/integrations/chat/fireworks/"}, "set_verbose": {"How to debug your LLM apps": "https://python.langchain.com/v0.2/docs/how_to/debugging/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/"}, "set_debug": {"How to debug your LLM apps": "https://python.langchain.com/v0.2/docs/how_to/debugging/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/", "TextGen": "https://python.langchain.com/v0.2/docs/integrations/llms/textgen/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/"}, "MaxMarginalRelevanceExampleSelector": {"How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_mmr/"}, "AttributeInfo": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "Milvus": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/milvus_self_query/", "PGVector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/weaviate_self_query/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "DashVector": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dashvector/", "Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/opensearch_self_query/", "Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/elasticsearch_self_query/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/chroma_self_query/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/tencentvectordb/", "Timescale Vector (Postgres) ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/redis_self_query/", "MyScale": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/myscale_self_query/", "Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/mongodb_atlas/", "Qdrant": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/qdrant_self_query/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/", "self-query-qdrant": "https://python.langchain.com/v0.2/docs/templates/self-query-qdrant/"}, "SelfQueryRetriever": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "Milvus": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/milvus_self_query/", "PGVector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/weaviate_self_query/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "DashVector": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dashvector/", "Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/opensearch_self_query/", "Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/elasticsearch_self_query/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/providers/chroma/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/tencentvectordb/", "Timescale Vector (Postgres) ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/redis_self_query/", "MyScale": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/myscale_self_query/", "Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/mongodb_atlas/", "Qdrant": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/qdrant_self_query/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/providers/astradb/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/"}, "StructuredQueryOutputParser": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/"}, "get_query_constructor_prompt": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/"}, "Cassandra": {"Hybrid Search": "https://python.langchain.com/v0.2/docs/how_to/hybrid/", "Cassandra": "https://python.langchain.com/v0.2/docs/integrations/providers/cassandra/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/"}, "HTMLSectionSplitter": {"How to split by HTML sections": "https://python.langchain.com/v0.2/docs/how_to/HTML_section_aware_splitter/"}, "JSONLoader": {"How to load JSON": "https://python.langchain.com/v0.2/docs/how_to/document_loader_json/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/"}, "UpstashRedisCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Upstash Vector": "https://python.langchain.com/v0.2/docs/integrations/providers/upstash/"}, "RedisCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/providers/redis/"}, "RedisSemanticCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/providers/redis/"}, "GPTCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/"}, "MomentoCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Momento": "https://python.langchain.com/v0.2/docs/integrations/providers/momento/"}, "SQLAlchemyCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/"}, "CassandraCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Cassandra": "https://python.langchain.com/v0.2/docs/integrations/providers/cassandra/"}, "CassandraSemanticCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Cassandra": "https://python.langchain.com/v0.2/docs/integrations/providers/cassandra/"}, "AzureCosmosDBSemanticCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/"}, "CosmosDBSimilarityType": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Azure Cosmos DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azure_cosmos_db/"}, "CosmosDBVectorSearchType": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Azure Cosmos DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azure_cosmos_db/"}, "load_summarize_chain": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Infino": "https://python.langchain.com/v0.2/docs/integrations/callbacks/infino/", "LarkSuite (FeiShu)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/larksuite/", "Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/"}, "OpenSearchSemanticCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/"}, "map_ai_messages": {"WeChat": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/wechat/", "Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "GMail": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/gmail/", "Slack": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/slack/", "WhatsApp": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/whatsapp/", "iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/discord/"}, "merge_chat_runs": {"WeChat": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/wechat/", "Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "Slack": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/slack/", "WhatsApp": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/whatsapp/", "iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/discord/"}, "ChatSession": {"WeChat": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/wechat/", "Slack": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/slack/", "WhatsApp": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/whatsapp/", "iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/discord/"}, "FolderFacebookMessengerChatLoader": {"Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "Facebook - Meta": "https://python.langchain.com/v0.2/docs/integrations/providers/facebook/"}, "SingleFileFacebookMessengerChatLoader": {"Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "Facebook - Meta": "https://python.langchain.com/v0.2/docs/integrations/providers/facebook/"}, "convert_messages_for_finetuning": {"Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "LangSmith LLM Runs": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_llm_runs/", "LangSmith Chat Datasets": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_dataset/", "iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/"}, "convert_message_to_dict": {"Twitter (via Apify)": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/twitter/"}, "convert_pydantic_to_openai_function": {"LangSmith LLM Runs": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_llm_runs/"}, "PydanticOutputFunctionsParser": {"LangSmith LLM Runs": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_llm_runs/"}, "LangSmithRunChatLoader": {"LangSmith LLM Runs": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_llm_runs/"}, "GMailLoader": {"GMail": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/gmail/"}, "SlackChatLoader": {"Slack": "https://python.langchain.com/v0.2/docs/integrations/providers/slack/"}, "WhatsAppChatLoader": {"WhatsApp": "https://python.langchain.com/v0.2/docs/integrations/providers/whatsapp/", "Facebook - Meta": "https://python.langchain.com/v0.2/docs/integrations/providers/facebook/", "WhatsApp Chat": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/whatsapp_chat/"}, "LangSmithDatasetChatLoader": {"LangSmith Chat Datasets": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_dataset/"}, "IMessageChatLoader": {"iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/"}, "TelegramChatLoader": {"Telegram": "https://python.langchain.com/v0.2/docs/integrations/providers/telegram/"}, "BookendEmbeddings": {"Bookend AI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/bookend/"}, "SolarEmbeddings": {"Solar": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/solar/"}, "HuggingFaceBgeEmbeddings": {"BGE on Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/bge_huggingface/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/platforms/huggingface/"}, "QuantizedBiEncoderEmbeddings": {"Embedding Documents using Optimized and Quantized Embedders": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/optimum_intel/", "Intel": "https://python.langchain.com/v0.2/docs/integrations/providers/intel/"}, "FireworksEmbeddings": {"FireworksEmbeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/fireworks/"}, "XinferenceEmbeddings": {"Xorbits inference (Xinference)": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/xinference/"}, "LLMRailsEmbeddings": {"LLMRails": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/llm_rails/"}, "DeepInfraEmbeddings": {"DeepInfra": "https://python.langchain.com/v0.2/docs/integrations/providers/deepinfra/"}, "HuggingFaceInferenceAPIEmbeddings": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/huggingfacehub/"}, "HuggingFaceEndpointEmbeddings": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/huggingfacehub/", "Text Embeddings Inference": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/text_embeddings_inference/"}, "GoogleGenerativeAIEmbeddings": {"Google Generative AI Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/google_generative_ai/", "Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/"}, "GPT4AllEmbeddings": {"GPT4All": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/gpt4all/", "ManticoreSearch VectorStore": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/manticore_search/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/"}, "MosaicMLInstructorEmbeddings": {"MosaicML": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/mosaicml/"}, "QuantizedBgeEmbeddings": {"Intel\u00ae Extension for Transformers Quantized Text Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/itrex/", "Intel": "https://python.langchain.com/v0.2/docs/integrations/providers/intel/"}, "VertexAIEmbeddings": {"Google Vertex AI PaLM ": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/google_vertex_ai_palm/", "Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Cloud SQL for MySQL": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_cloud_sql_mysql/", "Google Vertex AI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_alloydb/", "Google Firestore (Native Mode)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_firestore/", "Google BigQuery Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_bigquery_vector_search/", "Google Spanner": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_spanner/", "Google Cloud SQL for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_cloud_sql_pg/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/"}, "BedrockEmbeddings": {"Bedrock": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/bedrock/", "AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/"}, "GigaChatEmbeddings": {"GigaChat": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/gigachat/", "Salute Devices": "https://python.langchain.com/v0.2/docs/integrations/providers/salute_devices/"}, "OllamaEmbeddings": {"Ollama": "https://python.langchain.com/v0.2/docs/integrations/providers/ollama/"}, "OCIGenAIEmbeddings": {"Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/oci_generative_ai/", "Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/v0.2/docs/integrations/providers/oci/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_generative_ai/"}, "FastEmbedEmbeddings": {"FastEmbed by Qdrant": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/fastembed/"}, "LlamaCppEmbeddings": {"Llama-cpp": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/llamacpp/", "Llama.cpp": "https://python.langchain.com/v0.2/docs/integrations/providers/llamacpp/"}, "NLPCloudEmbeddings": {"NLP Cloud": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/nlp_cloud/", "NLPCloud": "https://python.langchain.com/v0.2/docs/integrations/providers/nlpcloud/"}, "LaserEmbeddings": {"LASER Language-Agnostic SEntence Representations Embeddings by Meta AI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/laser/", "Facebook - Meta": "https://python.langchain.com/v0.2/docs/integrations/providers/facebook/"}, "OpenCLIPEmbeddings": {"OpenClip": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/open_clip/", "SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/singlestoredb/"}, "TitanTakeoffEmbed": {"Titan Takeoff": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/titan_takeoff/"}, "MistralAIEmbeddings": {"MistralAI": "https://python.langchain.com/v0.2/docs/integrations/providers/mistralai/"}, "SpacyEmbeddings": {"SpaCy": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/spacy_embedding/", "spaCy": "https://python.langchain.com/v0.2/docs/integrations/providers/spacy/"}, "BaichuanTextEmbeddings": {"Baichuan Text Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/baichuan/", "Baichuan": "https://python.langchain.com/v0.2/docs/integrations/providers/baichuan/"}, "TogetherEmbeddings": {"TogetherEmbeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/together/"}, "HuggingFaceInstructEmbeddings": {"Instruct Embeddings on Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/instruct_embeddings/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/platforms/huggingface/"}, "OracleEmbeddings": {"Oracle AI Vector Search: Generate Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/oracleai/", "OracleAI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/providers/oracleai/"}, "QianfanEmbeddingsEndpoint": {"Baidu Qianfan": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/baidu_qianfan_endpoint/", "ERNIE": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/ernie/", "Baidu": "https://python.langchain.com/v0.2/docs/integrations/providers/baidu/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiducloud_vector_search/"}, "EdenAiEmbeddings": {"EDEN AI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/edenai/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "JohnSnowLabsEmbeddings": {"John Snow Labs": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/johnsnowlabs_embedding/"}, "ErnieEmbeddings": {"ERNIE": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/ernie/"}, "ClarifaiEmbeddings": {"Clarifai": "https://python.langchain.com/v0.2/docs/integrations/providers/clarifai/"}, "AzureOpenAIEmbeddings": {"Azure OpenAI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/azureopenai/", "Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azuresearch/", "Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/"}, "InfinityEmbeddings": {"Infinity": "https://python.langchain.com/v0.2/docs/integrations/providers/infinity/"}, "InfinityEmbeddingsLocal": {"Infinity": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/infinity/"}, "AwaEmbeddings": {"AwaDB": "https://python.langchain.com/v0.2/docs/integrations/providers/awadb/"}, "VolcanoEmbeddings": {"Volc Engine": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/volcengine/"}, "MiniMaxEmbeddings": {"MiniMax": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/minimax/", "Minimax": "https://python.langchain.com/v0.2/docs/integrations/providers/minimax/"}, "FakeEmbeddings": {"Fake Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/fake/", "DocArray": "https://python.langchain.com/v0.2/docs/integrations/retrievers/docarray_retriever/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vectara/", "Relyt": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/relyt/", "Tair": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tair/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/", "Google Memorystore for Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_memorystore_redis/", "PGVecto.rs": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgvecto_rs/", "Baidu VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiduvectordb/"}, "ClovaEmbeddings": {"Clova Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/clova/"}, "NeMoEmbeddings": {"NVIDIA NeMo embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/nemo/"}, "SparkLLMTextEmbeddings": {"SparkLLM Text Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/sparkllm/"}, "PremAIEmbeddings": {"PremAI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/premai/"}, "KNNRetriever": {"Voyage AI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/voyageai/", "kNN": "https://python.langchain.com/v0.2/docs/integrations/retrievers/knn/"}, "SelfHostedEmbeddings": {"Self Hosted": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/self-hosted/"}, "SelfHostedHuggingFaceEmbeddings": {"Self Hosted": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/self-hosted/"}, "SelfHostedHuggingFaceInstructEmbeddings": {"Self Hosted": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/self-hosted/"}, "AnyscaleEmbeddings": {"Anyscale": "https://python.langchain.com/v0.2/docs/integrations/providers/anyscale/"}, "EmbaasEmbeddings": {"Embaas": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/embaas/"}, "YandexGPTEmbeddings": {"YandexGPT": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/yandex/"}, "JinaEmbeddings": {"Jina": "https://python.langchain.com/v0.2/docs/integrations/providers/jina/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/"}, "AlephAlphaAsymmetricSemanticEmbedding": {"Aleph Alpha": "https://python.langchain.com/v0.2/docs/integrations/providers/aleph_alpha/"}, "AlephAlphaSymmetricSemanticEmbedding": {"Aleph Alpha": "https://python.langchain.com/v0.2/docs/integrations/providers/aleph_alpha/"}, "CloudflareWorkersAIEmbeddings": {"Cloudflare Workers AI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/cloudflare_workersai/", "Cloudflare": "https://python.langchain.com/v0.2/docs/integrations/providers/cloudflare/"}, "DashScopeEmbeddings": {"DashScope": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/dashscope/", "DashVector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dashvector/"}, "TensorflowHubEmbeddings": {"TensorFlow Hub": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/tensorflowhub/"}, "LlamafileEmbeddings": {"llamafile": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/llamafile/"}, "GradientEmbeddings": {"Gradient": "https://python.langchain.com/v0.2/docs/integrations/providers/gradient/"}, "ModelScopeEmbeddings": {"ModelScope": "https://python.langchain.com/v0.2/docs/integrations/providers/modelscope/"}, "SagemakerEndpointEmbeddings": {"SageMaker": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/sagemaker-endpoint/", "AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/"}, "EmbeddingsContentHandler": {"SageMaker": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/sagemaker-endpoint/"}, "DocArrayInMemorySearch": {"UpstageEmbeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/upstage/", "DocArray InMemorySearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_in_memory/"}, "SambaStudioEmbeddings": {"SambaNova": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/sambanova/"}, "OpenVINOEmbeddings": {"OpenVINO": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/openvino/", "OpenVINO Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openvino_rerank/"}, "OpenVINOBgeEmbeddings": {"OpenVINO": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/openvino/"}, "LocalAIEmbeddings": {"LocalAI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/localai/"}, "AzureAISearchRetriever": {"Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/azure_ai_search/", "Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/"}, "AzureSearch": {"Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azuresearch/"}, "RePhraseQueryRetriever": {"RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/"}, "YouSearchAPIWrapper": {"You.com": "https://python.langchain.com/v0.2/docs/integrations/retrievers/you-retriever/", "You.com Search": "https://python.langchain.com/v0.2/docs/integrations/tools/you/"}, "YouRetriever": {"You.com": "https://python.langchain.com/v0.2/docs/integrations/retrievers/you-retriever/"}, "Kinetica": {"Kinetica Vectorstore based Retriever": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kinetica/", "Kinetica": "https://python.langchain.com/v0.2/docs/integrations/providers/kinetica/", "Kinetica Vectorstore API": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kinetica/"}, "KineticaSettings": {"Kinetica Vectorstore based Retriever": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kinetica/", "Kinetica Vectorstore API": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kinetica/", "Kinetica": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/kinetica/"}, "Jaguar": {"JaguarDB Vector Database": "https://python.langchain.com/v0.2/docs/integrations/retrievers/jaguar/", "Jaguar": "https://python.langchain.com/v0.2/docs/integrations/providers/jaguar/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/"}, "BaseStore": {"Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/"}, "VectorStore": {"Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/"}, "AskNewsRetriever": {"AskNews": "https://python.langchain.com/v0.2/docs/integrations/retrievers/asknews/"}, "LLMLinguaCompressor": {"LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/"}, "RetrievalQA": {"LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/", "Bedrock (Knowledge Bases)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/bedrock/", "Cohere reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere-reranker/", "Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "Confident": "https://python.langchain.com/v0.2/docs/integrations/callbacks/confident/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/", "ScaNN": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/scann/", "Google Vertex AI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "Momento Vector Index (MVI)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/momento_vector_index/", "Activeloop Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/activeloop_deeplake/", "StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/", "KDB.AI": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kdbai/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Amazon Document DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/documentdb/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/mongodb_atlas/", "VoyageAI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/"}, "ElasticSearchBM25Retriever": {"ElasticSearch BM25": "https://python.langchain.com/v0.2/docs/integrations/retrievers/elastic_search_bm25/"}, "OutlineRetriever": {"Outline": "https://python.langchain.com/v0.2/docs/integrations/providers/outline/"}, "ConversationalRetrievalChain": {"Outline": "https://python.langchain.com/v0.2/docs/integrations/retrievers/outline/", "Wikipedia": "https://python.langchain.com/v0.2/docs/integrations/retrievers/wikipedia/", "SEC filing": "https://python.langchain.com/v0.2/docs/integrations/retrievers/sec_filings/", "Arxiv": "https://python.langchain.com/v0.2/docs/integrations/retrievers/arxiv/", "Rememberizer": "https://python.langchain.com/v0.2/docs/integrations/retrievers/rememberizer/", "Kay.ai": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kay/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/"}, "ZepMemory": {"Zep Open Source": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_memorystore/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/"}, "SearchScope": {"Zep Open Source": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_memorystore/"}, "ZepRetriever": {"Zep Open Source": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_memorystore/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/"}, "VespaRetriever": {"Vespa": "https://python.langchain.com/v0.2/docs/integrations/providers/vespa/"}, "AmazonKendraRetriever": {"Amazon Kendra": "https://python.langchain.com/v0.2/docs/integrations/retrievers/amazon_kendra_retriever/"}, "AmazonKnowledgeBasesRetriever": {"Bedrock (Knowledge Bases)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/bedrock/"}, "Bedrock": {"Bedrock (Knowledge Bases)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/bedrock/", "Bedrock": "https://python.langchain.com/v0.2/docs/integrations/llms/bedrock/"}, "CohereEmbeddings": {"Cohere reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere-reranker/"}, "Cohere": {"Cohere reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere-reranker/", "self-query-qdrant": "https://python.langchain.com/v0.2/docs/templates/self-query-qdrant/"}, "ZepCloudMemory": {"Zep Cloud": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_cloud_memorystore/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/"}, "ZepCloudRetriever": {"Zep Cloud": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_cloud_memorystore/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/", "Zep": "https://python.langchain.com/v0.2/docs/integrations/providers/zep/"}, "NeuralDBRetriever": {"**NeuralDB**": "https://python.langchain.com/v0.2/docs/integrations/retrievers/thirdai_neuraldb/"}, "SingleStoreDB": {"SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/singlestoredb/"}, "MetalRetriever": {"Metal": "https://python.langchain.com/v0.2/docs/integrations/providers/metal/"}, "BreebsRetriever": {"BREEBS (Open Knowledge)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/breebs/"}, "ChatGPTPluginRetriever": {"ChatGPT plugin": "https://python.langchain.com/v0.2/docs/integrations/retrievers/chatgpt-plugin/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/"}, "KayAiRetriever": {"SEC filing": "https://python.langchain.com/v0.2/docs/integrations/retrievers/sec_filings/", "Kay.ai": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kay/"}, "CohereRagRetriever": {"Cohere RAG": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere/", "Cohere": "https://python.langchain.com/v0.2/docs/integrations/providers/cohere/"}, "DriaRetriever": {"Dria": "https://python.langchain.com/v0.2/docs/integrations/retrievers/dria_index/"}, "DocArrayRetriever": {"DocArray": "https://python.langchain.com/v0.2/docs/integrations/retrievers/docarray_retriever/"}, "SVMRetriever": {"SVM": "https://python.langchain.com/v0.2/docs/integrations/retrievers/svm/"}, "TavilySearchAPIRetriever": {"Tavily Search API": "https://python.langchain.com/v0.2/docs/integrations/retrievers/tavily/"}, "PineconeHybridSearchRetriever": {"Pinecone Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/pinecone_hybrid_search/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/providers/pinecone/"}, "DeepLake": {"Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "Activeloop Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/activeloop_deeplake/"}, "AsyncHtmlLoader": {"Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "HTML to text": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/html2text/", "Markdownify": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/markdownify/", "AsyncHtml": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/async_html/"}, "Html2TextTransformer": {"Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "HTML to text": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/html2text/", "Async Chromium": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/async_chromium/"}, "create_structured_output_chain": {"Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/"}, "HumanMessagePromptTemplate": {"Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "JinaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/jinachat/", "Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/", "vLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/vllm/", "Context": "https://python.langchain.com/v0.2/docs/integrations/callbacks/context/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Figma": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/figma/"}, "PubMedRetriever": {"PubMed": "https://python.langchain.com/v0.2/docs/integrations/providers/pubmed/"}, "WeaviateHybridSearchRetriever": {"Weaviate Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/weaviate-hybrid/"}, "EmbedchainRetriever": {"Embedchain": "https://python.langchain.com/v0.2/docs/integrations/retrievers/embedchain/"}, "ArxivRetriever": {"Arxiv": "https://python.langchain.com/v0.2/docs/integrations/providers/arxiv/"}, "QdrantSparseVectorRetriever": {"Qdrant Sparse Vector": "https://python.langchain.com/v0.2/docs/integrations/retrievers/qdrant-sparse/"}, "DeterministicFakeEmbedding": {"Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/elasticsearch_retriever/"}, "Embeddings": {"Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/elasticsearch_retriever/", "Infinispan": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/infinispanvs/"}, "RememberizerRetriever": {"Rememberizer": "https://python.langchain.com/v0.2/docs/integrations/retrievers/rememberizer/"}, "ArceeRetriever": {"Arcee": "https://python.langchain.com/v0.2/docs/integrations/providers/arcee/"}, "FlashrankRerank": {"FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/"}, "ChaindeskRetriever": {"Chaindesk": "https://python.langchain.com/v0.2/docs/integrations/providers/chaindesk/"}, "MergerRetriever": {"LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/"}, "EmbeddingsClusteringFilter": {"LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/"}, "TFIDFRetriever": {"TF-IDF": "https://python.langchain.com/v0.2/docs/integrations/retrievers/tf_idf/"}, "GoogleVertexAIMultiTurnSearchRetriever": {"Google Vertex AI Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/google_vertex_ai_search/"}, "GoogleVertexAISearchRetriever": {"Google Vertex AI Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/google_vertex_ai_search/", "Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/"}, "PGVector": {"PGVector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pgvector_self_query/", "PGVector": "https://python.langchain.com/v0.2/docs/integrations/providers/pgvector/"}, "Weaviate": {"Weaviate": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/weaviate_self_query/"}, "Vectara": {"Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vectara/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/"}, "DashVector": {"DashVector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dashvector/"}, "Tongyi": {"DashVector": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dashvector/", "Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/", "Tongyi Qwen": "https://python.langchain.com/v0.2/docs/integrations/llms/tongyi/"}, "DatabricksVectorSearch": {"Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/databricks_vector_search/"}, "Dingo": {"DingoDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dingo/"}, "OpenSearchVectorSearch": {"OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/opensearch/", "AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/"}, "ConnectionParams": {"Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/", "Baidu VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiduvectordb/"}, "MetaField": {"Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/"}, "TencentVectorDB": {"Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/", "Tencent": "https://python.langchain.com/v0.2/docs/integrations/providers/tencent/"}, "TimescaleVector": {"Timescale Vector (Postgres) ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/"}, "AstraDB": {"Astra DB (Cassandra)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/astradb/"}, "SupabaseVectorStore": {"Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/supabase/"}, "Redis": {"Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/redis/"}, "MyScale": {"MyScale": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/myscale/"}, "MongoDBAtlasVectorSearch": {"MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/mongodb_atlas/"}, "Qdrant": {"Qdrant": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/qdrant/"}, "AzureMLOnlineEndpoint": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/"}, "AzureOpenAI": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/", "Azure OpenAI": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_openai/"}, "AzureChatOpenAI": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/", "AzureChatOpenAI": "https://python.langchain.com/v0.2/docs/integrations/chat/azure_chat_openai/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/v0.2/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "AzureAIDataLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure AI Data": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/azure_ai_data/"}, "AzureBlobStorageContainerLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure Blob Storage Container": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/azure_blob_storage_container/"}, "AzureBlobStorageFileLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure Blob Storage File": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/azure_blob_storage_file/"}, "OneDriveLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Microsoft OneDrive": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_onedrive/"}, "UnstructuredWordDocumentLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Microsoft Word": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_word/"}, "UnstructuredExcelLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Microsoft Excel": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_excel/"}, "SharePointLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Microsoft SharePoint": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_sharepoint/"}, "UnstructuredPowerPointLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Microsoft PowerPoint": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_powerpoint/"}, "OneNoteLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Microsoft OneNote": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_onenote/"}, "AzureCosmosDBVectorSearch": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure Cosmos DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azure_cosmos_db/"}, "O365Toolkit": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Office365": "https://python.langchain.com/v0.2/docs/integrations/toolkits/office365/"}, "PowerBIToolkit": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "PowerBI Dataset": "https://python.langchain.com/v0.2/docs/integrations/toolkits/powerbi/"}, "PowerBIDataset": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "PowerBI Dataset": "https://python.langchain.com/v0.2/docs/integrations/toolkits/powerbi/"}, "GremlinGraph": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/v0.2/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "GraphDocument": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/v0.2/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "Node": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/v0.2/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "Relationship": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/v0.2/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "BingSearchAPIWrapper": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Bing Search": "https://python.langchain.com/v0.2/docs/integrations/tools/bing_search/"}, "PresidioAnonymizer": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/"}, "PresidioReversibleAnonymizer": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/"}, "AmazonAPIGateway": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Amazon API Gateway": "https://python.langchain.com/v0.2/docs/integrations/llms/amazon_api_gateway/"}, "ContentHandlerBase": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/"}, "S3DirectoryLoader": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "AWS S3 Directory": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/aws_s3_directory/"}, "S3FileLoader": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "AWS S3 File": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/aws_s3_file/"}, "AthenaLoader": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Athena": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/athena/"}, "DynamoDBChatMessageHistory": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "AWS DynamoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/aws_dynamodb/"}, "NeptuneGraph": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Amazon Neptune with Cypher": "https://python.langchain.com/v0.2/docs/integrations/graphs/amazon_neptune_open_cypher/"}, "NeptuneAnalyticsGraph": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Amazon Neptune with Cypher": "https://python.langchain.com/v0.2/docs/integrations/graphs/amazon_neptune_open_cypher/"}, "NeptuneOpenCypherQAChain": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Amazon Neptune with Cypher": "https://python.langchain.com/v0.2/docs/integrations/graphs/amazon_neptune_open_cypher/"}, "NeptuneRdfGraph": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Amazon Neptune with SPARQL": "https://python.langchain.com/v0.2/docs/integrations/graphs/amazon_neptune_sparql/"}, "NeptuneSparqlQAChain": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Amazon Neptune with SPARQL": "https://python.langchain.com/v0.2/docs/integrations/graphs/amazon_neptune_sparql/"}, "SageMakerCallbackHandler": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "SageMaker Tracking": "https://python.langchain.com/v0.2/docs/integrations/callbacks/sagemaker_tracking/"}, "AmazonComprehendModerationChain": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/"}, "ChatHuggingFace": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/"}, "HuggingFacePipeline": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/platforms/huggingface/", "Hugging Face Local Pipelines": "https://python.langchain.com/v0.2/docs/integrations/llms/huggingface_pipelines/", "LM Format Enforcer": "https://python.langchain.com/v0.2/docs/integrations/llms/lmformatenforcer_experimental/", "RELLM": "https://python.langchain.com/v0.2/docs/integrations/llms/rellm_experimental/", "JSONFormer": "https://python.langchain.com/v0.2/docs/integrations/llms/jsonformer_experimental/", "OpenVINO": "https://python.langchain.com/v0.2/docs/integrations/llms/openvino/"}, "HuggingFaceHubEmbeddings": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/platforms/huggingface/"}, "HuggingFaceDatasetLoader": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/platforms/huggingface/", "HuggingFace dataset": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/hugging_face_dataset/"}, "load_huggingface_tool": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/platforms/huggingface/", "HuggingFace Hub Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/huggingface_tools/"}, "ChatGPTLoader": {"OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/", "ChatGPT Data": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/chatgpt_loader/"}, "DallEAPIWrapper": {"OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/", "Dall-E Image Generator": "https://python.langchain.com/v0.2/docs/integrations/tools/dalle_image_generator/"}, "OpenAIModerationChain": {"OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/"}, "GoogleGenerativeAI": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_ai/"}, "VertexAIModelGarden": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "ChatGoogleGenerativeAI": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google AI chat models": "https://python.langchain.com/v0.2/docs/integrations/chat/google_generative_ai/"}, "VectorSearchVectorStore": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Vertex AI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_vertex_ai_vector_search/"}, "ScaNN": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "ScaNN": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/scann/"}, "GoogleDocumentAIWarehouseRetriever": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/"}, "GoogleFinanceQueryRun": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Finance": "https://python.langchain.com/v0.2/docs/integrations/tools/google_finance/"}, "GoogleFinanceAPIWrapper": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Finance": "https://python.langchain.com/v0.2/docs/integrations/tools/google_finance/"}, "GoogleJobsQueryRun": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Jobs": "https://python.langchain.com/v0.2/docs/integrations/tools/google_jobs/"}, "GoogleLensQueryRun": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Lens": "https://python.langchain.com/v0.2/docs/integrations/tools/google_lens/"}, "GoogleLensAPIWrapper": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Lens": "https://python.langchain.com/v0.2/docs/integrations/tools/google_lens/"}, "GooglePlacesTool": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Places": "https://python.langchain.com/v0.2/docs/integrations/tools/google_places/"}, "GoogleScholarQueryRun": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Scholar": "https://python.langchain.com/v0.2/docs/integrations/tools/google_scholar/"}, "GoogleScholarAPIWrapper": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Scholar": "https://python.langchain.com/v0.2/docs/integrations/tools/google_scholar/"}, "GoogleTrendsQueryRun": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Trends": "https://python.langchain.com/v0.2/docs/integrations/tools/google_trends/"}, "GoogleTrendsAPIWrapper": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Trends": "https://python.langchain.com/v0.2/docs/integrations/tools/google_trends/"}, "SearchApiAPIWrapper": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "SearchApi": "https://python.langchain.com/v0.2/docs/integrations/providers/searchapi/"}, "SerpAPIWrapper": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "SerpAPI": "https://python.langchain.com/v0.2/docs/integrations/providers/serpapi/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/"}, "GoogleSerperAPIWrapper": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Serper": "https://python.langchain.com/v0.2/docs/integrations/tools/google_serper/", "Serper - Google Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/google_serper/"}, "YouTubeSearchTool": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "YouTube": "https://python.langchain.com/v0.2/docs/integrations/tools/youtube/"}, "YoutubeAudioLoader": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/"}, "OpenAIWhisperParser": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/"}, "YoutubeLoader": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "YouTube": "https://python.langchain.com/v0.2/docs/integrations/providers/youtube/", "YouTube transcripts": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_transcript/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/"}, "AnthropicLLM": {"Anthropic": "https://python.langchain.com/v0.2/docs/integrations/platforms/anthropic/", "AnthropicLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/anthropic/"}, "AIPluginTool": {"ChatGPT Plugins": "https://python.langchain.com/v0.2/docs/integrations/tools/chatgpt_plugins/"}, "AgentType": {"ChatGPT Plugins": "https://python.langchain.com/v0.2/docs/integrations/tools/chatgpt_plugins/", "Connery Action Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/connery/", "Google Jobs": "https://python.langchain.com/v0.2/docs/integrations/tools/google_jobs/", "Google Serper": "https://python.langchain.com/v0.2/docs/integrations/tools/google_serper/", "E2B Data Analysis": "https://python.langchain.com/v0.2/docs/integrations/tools/e2b_data_analysis/", "Human as a tool": "https://python.langchain.com/v0.2/docs/integrations/tools/human_tools/", "Yahoo Finance News": "https://python.langchain.com/v0.2/docs/integrations/tools/yahoo_finance_news/", "Google Finance": "https://python.langchain.com/v0.2/docs/integrations/tools/google_finance/", "AWS Lambda": "https://python.langchain.com/v0.2/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/v0.2/docs/integrations/tools/google_drive/", "OpenWeatherMap": "https://python.langchain.com/v0.2/docs/integrations/tools/openweathermap/", "Memorize": "https://python.langchain.com/v0.2/docs/integrations/tools/memorize/", "Search Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/search_tools/", "Eleven Labs Text2Speech": "https://python.langchain.com/v0.2/docs/integrations/tools/eleven_labs_tts/", "Bearly Code Interpreter": "https://python.langchain.com/v0.2/docs/integrations/tools/bearly/", "Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/", "GraphQL": "https://python.langchain.com/v0.2/docs/integrations/tools/graphql/", "SearchApi": "https://python.langchain.com/v0.2/docs/integrations/providers/searchapi/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/tools/edenai_tools/", "Shell (bash)": "https://python.langchain.com/v0.2/docs/integrations/tools/bash/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/memory/xata_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Comet Tracing": "https://python.langchain.com/v0.2/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/v0.2/docs/integrations/callbacks/argilla/", "Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/", "MLflow": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_tracking/", "Serper - Google Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/google_serper/", "Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/", "WandB Tracing": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/v0.2/docs/integrations/providers/clearml_tracking/", "Connery Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/connery/", "CSV": "https://python.langchain.com/v0.2/docs/integrations/toolkits/csv/", "Jira": "https://python.langchain.com/v0.2/docs/integrations/toolkits/jira/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Azure Cognitive Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_cognitive_services/", "Natural Language APIs": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi_nla/", "Steam Game Recommendation & Game Details": "https://python.langchain.com/v0.2/docs/integrations/toolkits/steam/", "Airbyte Question Answering": "https://python.langchain.com/v0.2/docs/integrations/toolkits/airbyte_structured_qa/", "Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/", "ClickUp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/clickup/", "AINetwork": "https://python.langchain.com/v0.2/docs/integrations/toolkits/ainetwork/", "PlayWright Browser": "https://python.langchain.com/v0.2/docs/integrations/toolkits/playwright/", "Office365": "https://python.langchain.com/v0.2/docs/integrations/toolkits/office365/", "Pandas Dataframe": "https://python.langchain.com/v0.2/docs/integrations/toolkits/pandas/", "NASA": "https://python.langchain.com/v0.2/docs/integrations/toolkits/nasa/", "Gitlab": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gitlab/", "Amazon API Gateway": "https://python.langchain.com/v0.2/docs/integrations/llms/amazon_api_gateway/"}, "initialize_agent": {"ChatGPT Plugins": "https://python.langchain.com/v0.2/docs/integrations/tools/chatgpt_plugins/", "Connery Action Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/connery/", "Google Jobs": "https://python.langchain.com/v0.2/docs/integrations/tools/google_jobs/", "Google Serper": "https://python.langchain.com/v0.2/docs/integrations/tools/google_serper/", "E2B Data Analysis": "https://python.langchain.com/v0.2/docs/integrations/tools/e2b_data_analysis/", "Human as a tool": "https://python.langchain.com/v0.2/docs/integrations/tools/human_tools/", "Yahoo Finance News": "https://python.langchain.com/v0.2/docs/integrations/tools/yahoo_finance_news/", "Google Finance": "https://python.langchain.com/v0.2/docs/integrations/tools/google_finance/", "AWS Lambda": "https://python.langchain.com/v0.2/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/v0.2/docs/integrations/tools/google_drive/", "OpenWeatherMap": "https://python.langchain.com/v0.2/docs/integrations/tools/openweathermap/", "Memorize": "https://python.langchain.com/v0.2/docs/integrations/tools/memorize/", "Search Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/search_tools/", "Eleven Labs Text2Speech": "https://python.langchain.com/v0.2/docs/integrations/tools/eleven_labs_tts/", "Bearly Code Interpreter": "https://python.langchain.com/v0.2/docs/integrations/tools/bearly/", "Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/", "GraphQL": "https://python.langchain.com/v0.2/docs/integrations/tools/graphql/", "SearchApi": "https://python.langchain.com/v0.2/docs/integrations/providers/searchapi/", "Gradio": "https://python.langchain.com/v0.2/docs/integrations/tools/gradio_tools/", "SceneXplain": "https://python.langchain.com/v0.2/docs/integrations/tools/sceneXplain/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/tools/edenai_tools/", "Dall-E Image Generator": "https://python.langchain.com/v0.2/docs/integrations/tools/dalle_image_generator/", "Shell (bash)": "https://python.langchain.com/v0.2/docs/integrations/tools/bash/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/memory/xata_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "SageMaker Tracking": "https://python.langchain.com/v0.2/docs/integrations/callbacks/sagemaker_tracking/", "Comet Tracing": "https://python.langchain.com/v0.2/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/v0.2/docs/integrations/callbacks/argilla/", "Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/", "MLflow": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_tracking/", "Serper - Google Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/google_serper/", "Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/", "WandB Tracing": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/v0.2/docs/integrations/providers/clearml_tracking/", "Connery Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/connery/", "Jira": "https://python.langchain.com/v0.2/docs/integrations/toolkits/jira/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Azure Cognitive Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_cognitive_services/", "Natural Language APIs": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi_nla/", "Steam Game Recommendation & Game Details": "https://python.langchain.com/v0.2/docs/integrations/toolkits/steam/", "Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/", "ClickUp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/clickup/", "AINetwork": "https://python.langchain.com/v0.2/docs/integrations/toolkits/ainetwork/", "PlayWright Browser": "https://python.langchain.com/v0.2/docs/integrations/toolkits/playwright/", "Office365": "https://python.langchain.com/v0.2/docs/integrations/toolkits/office365/", "NASA": "https://python.langchain.com/v0.2/docs/integrations/toolkits/nasa/", "Gitlab": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gitlab/", "Amazon API Gateway": "https://python.langchain.com/v0.2/docs/integrations/llms/amazon_api_gateway/"}, "DataForSeoAPIWrapper": {"DataForSEO": "https://python.langchain.com/v0.2/docs/integrations/providers/dataforseo/"}, "Tool": {"DataForSEO": "https://python.langchain.com/v0.2/docs/integrations/tools/dataforseo/", "Python REPL": "https://python.langchain.com/v0.2/docs/integrations/tools/python/", "Google Serper": "https://python.langchain.com/v0.2/docs/integrations/tools/google_serper/", "SerpAPI": "https://python.langchain.com/v0.2/docs/integrations/tools/serpapi/", "SearchApi": "https://python.langchain.com/v0.2/docs/integrations/providers/searchapi/", "Google Search": "https://python.langchain.com/v0.2/docs/integrations/tools/google_search/", "Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/", "Ionic Shopping Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/ionic_shopping/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/", "Serper - Google Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/google_serper/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/"}, "ConneryService": {"Connery Action Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/connery/", "Connery Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/connery/"}, "DataheraldAPIWrapper": {"Dataherald": "https://python.langchain.com/v0.2/docs/integrations/providers/dataherald/"}, "SearxSearchWrapper": {"SearxNG Search": "https://python.langchain.com/v0.2/docs/integrations/tools/searx_search/", "SearxNG Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/searx/"}, "PythonREPL": {"Python REPL": "https://python.langchain.com/v0.2/docs/integrations/tools/python/"}, "GoogleJobsAPIWrapper": {"Google Jobs": "https://python.langchain.com/v0.2/docs/integrations/tools/google_jobs/"}, "create_openai_functions_agent": {"Tavily Search": "https://python.langchain.com/v0.2/docs/integrations/tools/tavily_search/", "Infobip": "https://python.langchain.com/v0.2/docs/integrations/tools/infobip/", "AskNews": "https://python.langchain.com/v0.2/docs/integrations/tools/asknews/", "Semantic Scholar API Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/semanticscholar/", "Passio NutritionAI": "https://python.langchain.com/v0.2/docs/integrations/tools/passio_nutrition_ai/", "You.com Search": "https://python.langchain.com/v0.2/docs/integrations/tools/you/", "Python": "https://python.langchain.com/v0.2/docs/integrations/toolkits/python/", "Gmail": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gmail/", "MultiOn": "https://python.langchain.com/v0.2/docs/integrations/toolkits/multion/", "Polygon IO Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/polygon/"}, "InfobipAPIWrapper": {"Infobip": "https://python.langchain.com/v0.2/docs/integrations/tools/infobip/"}, "AskNewsSearch": {"AskNews": "https://python.langchain.com/v0.2/docs/integrations/tools/asknews/"}, "E2BDataAnalysisTool": {"E2B Data Analysis": "https://python.langchain.com/v0.2/docs/integrations/tools/e2b_data_analysis/"}, "HumanInputRun": {"Human as a tool": "https://python.langchain.com/v0.2/docs/integrations/tools/human_tools/"}, "NucliaUnderstandingAPI": {"Nuclia Understanding": "https://python.langchain.com/v0.2/docs/integrations/tools/nuclia/", "Nuclia": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/nuclia/"}, "YahooFinanceNewsTool": {"Yahoo Finance News": "https://python.langchain.com/v0.2/docs/integrations/tools/yahoo_finance_news/"}, "WikidataAPIWrapper": {"Wikidata": "https://python.langchain.com/v0.2/docs/integrations/tools/wikidata/"}, "WikidataQueryRun": {"Wikidata": "https://python.langchain.com/v0.2/docs/integrations/tools/wikidata/"}, "TwilioAPIWrapper": {"Twilio": "https://python.langchain.com/v0.2/docs/integrations/tools/twilio/"}, "IFTTTWebhook": {"IFTTT WebHooks": "https://python.langchain.com/v0.2/docs/integrations/tools/ifttt/"}, "SemanticScholarQueryRun": {"Semantic Scholar API Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/semanticscholar/"}, "AlphaVantageAPIWrapper": {"Alpha Vantage": "https://python.langchain.com/v0.2/docs/integrations/tools/alpha_vantage/"}, "GoogleCloudTextToSpeechTool": {"Google Cloud Text-to-Speech": "https://python.langchain.com/v0.2/docs/integrations/tools/google_cloud_texttospeech/"}, "OracleSummary": {"Oracle AI Vector Search: Generate Summary": "https://python.langchain.com/v0.2/docs/integrations/tools/oracleai/", "OracleAI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/providers/oracleai/"}, "StackExchangeAPIWrapper": {"StackExchange": "https://python.langchain.com/v0.2/docs/integrations/tools/stackexchange/", "Stack Exchange": "https://python.langchain.com/v0.2/docs/integrations/providers/stackexchange/"}, "TextRequestsWrapper": {"Requests": "https://python.langchain.com/v0.2/docs/integrations/tools/requests/"}, "JsonRequestsWrapper": {"Requests": "https://python.langchain.com/v0.2/docs/integrations/tools/requests/"}, "OpenWeatherMapAPIWrapper": {"OpenWeatherMap": "https://python.langchain.com/v0.2/docs/integrations/providers/openweathermap/"}, "get_from_env": {"Passio NutritionAI": "https://python.langchain.com/v0.2/docs/integrations/tools/passio_nutrition_ai/"}, "NutritionAI": {"Passio NutritionAI": "https://python.langchain.com/v0.2/docs/integrations/tools/passio_nutrition_ai/"}, "NutritionAIAPI": {"Passio NutritionAI": "https://python.langchain.com/v0.2/docs/integrations/tools/passio_nutrition_ai/"}, "PubmedQueryRun": {"PubMed": "https://python.langchain.com/v0.2/docs/integrations/tools/pubmed/"}, "ConversationBufferMemory": {"Memorize": "https://python.langchain.com/v0.2/docs/integrations/tools/memorize/", "Gradio": "https://python.langchain.com/v0.2/docs/integrations/tools/gradio_tools/", "SceneXplain": "https://python.langchain.com/v0.2/docs/integrations/tools/sceneXplain/", "Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/memory/xata_chat_message_history/", "Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/", "NVIDIA NIMs": "https://python.langchain.com/v0.2/docs/integrations/chat/nvidia_ai_endpoints/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/", "Bedrock": "https://python.langchain.com/v0.2/docs/integrations/llms/bedrock/"}, "GradientLLM": {"Memorize": "https://python.langchain.com/v0.2/docs/integrations/tools/memorize/", "Gradient": "https://python.langchain.com/v0.2/docs/integrations/llms/gradient/"}, "ElevenLabsText2SpeechTool": {"Eleven Labs Text2Speech": "https://python.langchain.com/v0.2/docs/integrations/tools/eleven_labs_tts/", "ElevenLabs": "https://python.langchain.com/v0.2/docs/integrations/providers/elevenlabs/"}, "BearlyInterpreterTool": {"Bearly Code Interpreter": "https://python.langchain.com/v0.2/docs/integrations/tools/bearly/"}, "VectorstoreIndexCreator": {"Apify": "https://python.langchain.com/v0.2/docs/integrations/tools/apify/", "HuggingFace dataset": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/hugging_face_dataset/", "Spreedly": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/spreedly/", "Image captions": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/image_captions/", "Figma": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/figma/", "Apify Dataset": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/apify_dataset/", "Iugu": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/iugu/", "Stripe": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/stripe/", "Modern Treasury": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/modern_treasury/"}, "ApifyWrapper": {"Apify": "https://python.langchain.com/v0.2/docs/integrations/providers/apify/"}, "ZapierToolkit": {"Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/"}, "ZapierNLAWrapper": {"Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/"}, "SimpleSequentialChain": {"Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/", "SageMaker Tracking": "https://python.langchain.com/v0.2/docs/integrations/callbacks/sagemaker_tracking/", "Rebuff": "https://python.langchain.com/v0.2/docs/integrations/providers/rebuff/", "Predibase": "https://python.langchain.com/v0.2/docs/integrations/llms/predibase/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/llms/edenai/", "Replicate": "https://python.langchain.com/v0.2/docs/integrations/llms/replicate/"}, "TransformChain": {"Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/", "Rebuff": "https://python.langchain.com/v0.2/docs/integrations/providers/rebuff/"}, "ZapierNLARunAction": {"Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/"}, "RivaASR": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/v0.2/docs/integrations/tools/nvidia_riva/"}, "RivaTTS": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/v0.2/docs/integrations/tools/nvidia_riva/"}, "RivaAudioEncoding": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/v0.2/docs/integrations/tools/nvidia_riva/"}, "AudioStream": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/v0.2/docs/integrations/tools/nvidia_riva/"}, "GoldenQueryAPIWrapper": {"Golden Query": "https://python.langchain.com/v0.2/docs/integrations/tools/golden_query/", "Golden": "https://python.langchain.com/v0.2/docs/integrations/providers/golden/"}, "create_react_agent": {"ArXiv": "https://python.langchain.com/v0.2/docs/integrations/tools/arxiv/", "Ionic Shopping Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/ionic_shopping/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/callbacks/streamlit/", "Dataherald": "https://python.langchain.com/v0.2/docs/integrations/providers/dataherald/", "Python": "https://python.langchain.com/v0.2/docs/integrations/toolkits/python/", "Amadeus": "https://python.langchain.com/v0.2/docs/integrations/toolkits/amadeus/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/"}, "ArxivAPIWrapper": {"ArXiv": "https://python.langchain.com/v0.2/docs/integrations/tools/arxiv/"}, "DuckDuckGoSearchRun": {"DuckDuckGo Search": "https://python.langchain.com/v0.2/docs/integrations/tools/ddg/", "Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/"}, "DuckDuckGoSearchResults": {"DuckDuckGo Search": "https://python.langchain.com/v0.2/docs/integrations/tools/ddg/"}, "DuckDuckGoSearchAPIWrapper": {"DuckDuckGo Search": "https://python.langchain.com/v0.2/docs/integrations/tools/ddg/"}, "SceneXplainTool": {"SceneXplain": "https://python.langchain.com/v0.2/docs/integrations/tools/sceneXplain/"}, "WolframAlphaAPIWrapper": {"Wolfram Alpha": "https://python.langchain.com/v0.2/docs/integrations/providers/wolfram_alpha/"}, "OpenAIFunctionsAgent": {"Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Robocorp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/robocorp/"}, "EdenAiExplicitImageTool": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "EdenAiObjectDetectionTool": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "EdenAiParsingIDTool": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "EdenAiParsingInvoiceTool": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "EdenAiSpeechToTextTool": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "EdenAiTextModerationTool": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "EdenAiTextToSpeechTool": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "EdenAI": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/llms/edenai/"}, "MojeekSearch": {"Mojeek Search": "https://python.langchain.com/v0.2/docs/integrations/tools/mojeek_search/"}, "GoogleSearchAPIWrapper": {"Google Search": "https://python.langchain.com/v0.2/docs/integrations/tools/google_search/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/"}, "RedditSearchRun": {"Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/"}, "RedditSearchAPIWrapper": {"Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/"}, "RedditSearchSchema": {"Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/"}, "StructuredChatAgent": {"Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/"}, "ReadOnlySharedMemory": {"Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/"}, "YouSearchTool": {"You.com Search": "https://python.langchain.com/v0.2/docs/integrations/tools/you/"}, "VertexAIImageGeneratorChat": {"Google Imagen": "https://python.langchain.com/v0.2/docs/integrations/tools/google_imagen/"}, "VertexAIImageEditorChat": {"Google Imagen": "https://python.langchain.com/v0.2/docs/integrations/tools/google_imagen/"}, "VertexAIImageCaptioning": {"Google Imagen": "https://python.langchain.com/v0.2/docs/integrations/tools/google_imagen/"}, "VertexAIVisualQnAChat": {"Google Imagen": "https://python.langchain.com/v0.2/docs/integrations/tools/google_imagen/"}, "ShellTool": {"Shell (bash)": "https://python.langchain.com/v0.2/docs/integrations/tools/bash/"}, "PolygonAggregates": {"Polygon Stock Market API Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/polygon/"}, "PolygonFinancials": {"Polygon Stock Market API Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/polygon/"}, "PolygonLastQuote": {"Polygon Stock Market API Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/polygon/"}, "PolygonTickerNews": {"Polygon Stock Market API Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/polygon/"}, "PolygonAPIWrapper": {"Polygon Stock Market API Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/polygon/", "Polygon IO Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/polygon/"}, "PolygonAggregatesSchema": {"Polygon Stock Market API Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/polygon/"}, "FileManagementToolkit": {"File System": "https://python.langchain.com/v0.2/docs/integrations/tools/filesystem/"}, "BraveSearch": {"Brave Search": "https://python.langchain.com/v0.2/docs/integrations/providers/brave_search/"}, "RedisChatMessageHistory": {"Redis": "https://python.langchain.com/v0.2/docs/integrations/memory/redis_chat_message_history/"}, "ElasticsearchChatMessageHistory": {"Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/memory/elasticsearch_chat_message_history/"}, "UpstashRedisChatMessageHistory": {"Upstash Redis": "https://python.langchain.com/v0.2/docs/integrations/memory/upstash_redis_chat_message_history/", "Upstash Vector": "https://python.langchain.com/v0.2/docs/integrations/providers/upstash/"}, "ZepCloudChatMessageHistory": {"ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep": "https://python.langchain.com/v0.2/docs/integrations/providers/zep/"}, "SingleStoreDBChatMessageHistory": {"SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/providers/singlestoredb/"}, "PostgresChatMessageHistory": {"Postgres": "https://python.langchain.com/v0.2/docs/integrations/memory/postgres_chat_message_history/"}, "MomentoChatMessageHistory": {"Momento Cache": "https://python.langchain.com/v0.2/docs/integrations/memory/momento_chat_message_history/", "Momento": "https://python.langchain.com/v0.2/docs/integrations/providers/momento/"}, "XataChatMessageHistory": {"Xata": "https://python.langchain.com/v0.2/docs/integrations/providers/xata/"}, "XataVectorStore": {"Xata": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/xata/"}, "CassandraChatMessageHistory": {"Cassandra ": "https://python.langchain.com/v0.2/docs/integrations/memory/cassandra_chat_message_history/", "Cassandra": "https://python.langchain.com/v0.2/docs/integrations/providers/cassandra/"}, "MotorheadMemory": {"Mot\u00f6rhead": "https://python.langchain.com/v0.2/docs/integrations/providers/motorhead/"}, "AstraDBChatMessageHistory": {"Astra DB ": "https://python.langchain.com/v0.2/docs/integrations/memory/astradb_chat_message_history/"}, "StreamlitChatMessageHistory": {"Streamlit": "https://python.langchain.com/v0.2/docs/integrations/providers/streamlit/"}, "Neo4jChatMessageHistory": {"Neo4j": "https://python.langchain.com/v0.2/docs/integrations/memory/neo4j_chat_message_history/"}, "TiDBChatMessageHistory": {"TiDB": "https://python.langchain.com/v0.2/docs/integrations/providers/tidb/"}, "RocksetChatMessageHistory": {"Rockset": "https://python.langchain.com/v0.2/docs/integrations/providers/rockset/"}, "SolarChat": {"solar.md": "https://python.langchain.com/v0.2/docs/integrations/chat/solar/"}, "HuggingFaceEndpoint": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "Huggingface Endpoints": "https://python.langchain.com/v0.2/docs/integrations/llms/huggingface_endpoint/"}, "format_log_to_str": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/"}, "ReActJsonSingleInputOutputParser": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/", "Amadeus": "https://python.langchain.com/v0.2/docs/integrations/toolkits/amadeus/"}, "AzureMLChatOnlineEndpoint": {"AzureMLChatOnlineEndpoint": "https://python.langchain.com/v0.2/docs/integrations/chat/azureml_chat_endpoint/"}, "AzureMLEndpointApiType": {"AzureMLChatOnlineEndpoint": "https://python.langchain.com/v0.2/docs/integrations/chat/azureml_chat_endpoint/", "Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/"}, "CustomOpenAIChatContentFormatter": {"AzureMLChatOnlineEndpoint": "https://python.langchain.com/v0.2/docs/integrations/chat/azureml_chat_endpoint/"}, "ChatKinetica": {"Kinetica SqlAssist LLM Demo": "https://python.langchain.com/v0.2/docs/integrations/chat/kinetica/", "Kinetica": "https://python.langchain.com/v0.2/docs/integrations/providers/kinetica/"}, "KineticaSqlOutputParser": {"Kinetica SqlAssist LLM Demo": "https://python.langchain.com/v0.2/docs/integrations/chat/kinetica/"}, "KineticaSqlResponse": {"Kinetica SqlAssist LLM Demo": "https://python.langchain.com/v0.2/docs/integrations/chat/kinetica/"}, "PaiEasChatEndpoint": {"Alibaba Cloud PAI EAS": "https://python.langchain.com/v0.2/docs/integrations/chat/alibaba_cloud_pai_eas/", "Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/"}, "ChatCoze": {"Chat with Coze Bot": "https://python.langchain.com/v0.2/docs/integrations/chat/coze/"}, "ChatOctoAI": {"ChatOctoAI": "https://python.langchain.com/v0.2/docs/integrations/chat/octoai/"}, "ChatDeepInfra": {"DeepInfra": "https://python.langchain.com/v0.2/docs/integrations/providers/deepinfra/"}, "ToolsOutputParser": {"ChatAnthropic": "https://python.langchain.com/v0.2/docs/integrations/chat/anthropic/"}, "ChatLiteLLM": {"ChatLiteLLM": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm/"}, "LlamaEdgeChatService": {"LlamaEdge": "https://python.langchain.com/v0.2/docs/integrations/chat/llama_edge/"}, "HarmBlockThreshold": {"Google AI chat models": "https://python.langchain.com/v0.2/docs/integrations/chat/google_generative_ai/", "ChatVertexAI": "https://python.langchain.com/v0.2/docs/integrations/chat/google_vertex_ai_palm/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/", "Google AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_ai/"}, "HarmCategory": {"Google AI chat models": "https://python.langchain.com/v0.2/docs/integrations/chat/google_generative_ai/", "ChatVertexAI": "https://python.langchain.com/v0.2/docs/integrations/chat/google_vertex_ai_palm/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/", "Google AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_ai/"}, "OllamaFunctions": {"OllamaFunctions": "https://python.langchain.com/v0.2/docs/integrations/chat/ollama_functions/", "Ollama": "https://python.langchain.com/v0.2/docs/integrations/providers/ollama/"}, "VolcEngineMaasChat": {"VolcEngineMaasChat": "https://python.langchain.com/v0.2/docs/integrations/chat/volcengine_maas/"}, "ChatLlamaAPI": {"ChatLlamaAPI": "https://python.langchain.com/v0.2/docs/integrations/chat/llama_api/"}, "create_tagging_chain": {"ChatLlamaAPI": "https://python.langchain.com/v0.2/docs/integrations/chat/llama_api/"}, "ChatKonko": {"ChatKonko": "https://python.langchain.com/v0.2/docs/integrations/chat/konko/"}, "create_structured_runnable": {"ChatVertexAI": "https://python.langchain.com/v0.2/docs/integrations/chat/google_vertex_ai_palm/"}, "MLXPipeline": {"MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/", "MLX Local Pipelines": "https://python.langchain.com/v0.2/docs/integrations/llms/mlx_pipelines/"}, "ChatMLX": {"MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/"}, "GigaChat": {"GigaChat": "https://python.langchain.com/v0.2/docs/integrations/llms/gigachat/", "Salute Devices": "https://python.langchain.com/v0.2/docs/integrations/providers/salute_devices/"}, "JinaChat": {"JinaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/jinachat/"}, "SystemMessagePromptTemplate": {"JinaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/jinachat/", "vLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/vllm/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Figma": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/figma/"}, "ChatOllama": {"ChatOllama": "https://python.langchain.com/v0.2/docs/integrations/chat/ollama/", "Ollama": "https://python.langchain.com/v0.2/docs/integrations/providers/ollama/"}, "ChatEverlyAI": {"ChatEverlyAI": "https://python.langchain.com/v0.2/docs/integrations/chat/everlyai/"}, "GPTRouter": {"GPTRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/gpt_router/"}, "GPTRouterModel": {"GPTRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/gpt_router/"}, "ChatLiteLLMRouter": {"ChatLiteLLMRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm_router/"}, "ChatFriendli": {"ChatFriendli": "https://python.langchain.com/v0.2/docs/integrations/chat/friendli/"}, "ChatZhipuAI": {"ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/"}, "create_json_chat_agent": {"ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/"}, "ChatBaichuan": {"Chat with Baichuan-192K": "https://python.langchain.com/v0.2/docs/integrations/chat/baichuan/", "Baichuan": "https://python.langchain.com/v0.2/docs/integrations/providers/baichuan/"}, "ChatTogether": {"Together AI": "https://python.langchain.com/v0.2/docs/integrations/llms/together/"}, "Together": {"Together AI": "https://python.langchain.com/v0.2/docs/integrations/llms/together/"}, "Llama2Chat": {"Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/"}, "HuggingFaceTextGenInference": {"Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/"}, "QianfanChatEndpoint": {"QianfanChatEndpoint": "https://python.langchain.com/v0.2/docs/integrations/chat/baidu_qianfan_endpoint/", "ErnieBotChat": "https://python.langchain.com/v0.2/docs/integrations/chat/ernie/", "Baidu": "https://python.langchain.com/v0.2/docs/integrations/providers/baidu/"}, "ChatEdenAI": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "ErnieBotChat": {"ErnieBotChat": "https://python.langchain.com/v0.2/docs/integrations/chat/ernie/"}, "ChatHunyuan": {"Tencent Hunyuan": "https://python.langchain.com/v0.2/docs/integrations/chat/tencent_hunyuan/", "Tencent": "https://python.langchain.com/v0.2/docs/integrations/providers/tencent/"}, "MiniMaxChat": {"MiniMaxChat": "https://python.langchain.com/v0.2/docs/integrations/chat/minimax/", "Minimax": "https://python.langchain.com/v0.2/docs/integrations/providers/minimax/"}, "ChatYuan2": {"Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/chat/yuan2/"}, "ChatTongyi": {"ChatTongyi": "https://python.langchain.com/v0.2/docs/integrations/chat/tongyi/", "Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/"}, "PromptLayerChatOpenAI": {"PromptLayerChatOpenAI": "https://python.langchain.com/v0.2/docs/integrations/chat/promptlayer_chatopenai/", "PromptLayer": "https://python.langchain.com/v0.2/docs/integrations/providers/promptlayer/"}, "ChatSparkLLM": {"SparkLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/sparkllm/"}, "MoonshotChat": {"MoonshotChat": "https://python.langchain.com/v0.2/docs/integrations/chat/moonshot/"}, "ChatDappierAI": {"Dappier AI": "https://python.langchain.com/v0.2/docs/integrations/chat/dappier/"}, "ChatMaritalk": {"Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/"}, "load_qa_chain": {"Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/", "Amazon Textract ": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/amazon_textract/", "SageMakerEndpoint": "https://python.langchain.com/v0.2/docs/integrations/llms/sagemaker/"}, "ChatPremAI": {"ChatPremAI": "https://python.langchain.com/v0.2/docs/integrations/chat/premai/", "PremAI": "https://python.langchain.com/v0.2/docs/integrations/providers/premai/"}, "ChatAnyscale": {"ChatAnyscale": "https://python.langchain.com/v0.2/docs/integrations/chat/anyscale/", "Anyscale": "https://python.langchain.com/v0.2/docs/integrations/providers/anyscale/"}, "ChatYandexGPT": {"ChatYandexGPT": "https://python.langchain.com/v0.2/docs/integrations/chat/yandex/", "Yandex": "https://python.langchain.com/v0.2/docs/integrations/providers/yandex/"}, "ChatPerplexity": {"ChatPerplexity": "https://python.langchain.com/v0.2/docs/integrations/chat/perplexity/"}, "ChatAnthropicTools": {"[Deprecated] Experimental Anthropic Tools Wrapper": "https://python.langchain.com/v0.2/docs/integrations/chat/anthropic_functions/"}, "ConversationChain": {"NVIDIA NIMs": "https://python.langchain.com/v0.2/docs/integrations/chat/nvidia_ai_endpoints/", "Bedrock": "https://python.langchain.com/v0.2/docs/integrations/llms/bedrock/"}, "DeepEvalCallbackHandler": {"Confident": "https://python.langchain.com/v0.2/docs/integrations/callbacks/confident/", "Confident AI": "https://python.langchain.com/v0.2/docs/integrations/providers/confident/"}, "LLMonitorCallbackHandler": {"LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/providers/llmonitor/"}, "identify": {"LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/"}, "ContextCallbackHandler": {"Context": "https://python.langchain.com/v0.2/docs/integrations/providers/context/"}, "FiddlerCallbackHandler": {"Fiddler": "https://python.langchain.com/v0.2/docs/integrations/providers/fiddler/"}, "LabelStudioCallbackHandler": {"Label Studio": "https://python.langchain.com/v0.2/docs/integrations/providers/labelstudio/"}, "CometTracer": {"Comet Tracing": "https://python.langchain.com/v0.2/docs/integrations/callbacks/comet_tracing/", "Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/"}, "ArgillaCallbackHandler": {"Argilla": "https://python.langchain.com/v0.2/docs/integrations/providers/argilla/"}, "StdOutCallbackHandler": {"Argilla": "https://python.langchain.com/v0.2/docs/integrations/callbacks/argilla/", "Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/", "ClearML": "https://python.langchain.com/v0.2/docs/integrations/providers/clearml_tracking/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/"}, "PromptLayerCallbackHandler": {"PromptLayer": "https://python.langchain.com/v0.2/docs/integrations/providers/promptlayer/"}, "StreamlitCallbackHandler": {"Streamlit": "https://python.langchain.com/v0.2/docs/integrations/providers/streamlit/", "GPT4All": "https://python.langchain.com/v0.2/docs/integrations/providers/gpt4all/"}, "UpTrainCallbackHandler": {"UpTrain": "https://python.langchain.com/v0.2/docs/integrations/providers/uptrain/"}, "TrubricsCallbackHandler": {"Trubrics": "https://python.langchain.com/v0.2/docs/integrations/providers/trubrics/"}, "InfinoCallbackHandler": {"Infino": "https://python.langchain.com/v0.2/docs/integrations/providers/infino/"}, "FigmaFileLoader": {"Figma": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/figma/"}, "Baseten": {"Baseten": "https://python.langchain.com/v0.2/docs/integrations/llms/baseten/"}, "WeatherDataLoader": {"Weather": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/weather/"}, "Tair": {"Tair": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tair/", "Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/"}, "CollegeConfidentialLoader": {"College Confidential": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/college_confidential/"}, "RWKV": {"RWKV-4": "https://python.langchain.com/v0.2/docs/integrations/providers/rwkv/"}, "LakeFSLoader": {"lakeFS": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/lakefs/"}, "FaunaLoader": {"Fauna": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/fauna/"}, "OCIGenAI": {"Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/v0.2/docs/integrations/providers/oci/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_generative_ai/"}, "OCIModelDeploymentVLLM": {"Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/v0.2/docs/integrations/providers/oci/", "OCI Data Science Model Deployment Endpoint": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_model_deployment_endpoint/"}, "OCIModelDeploymentTGI": {"Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/v0.2/docs/integrations/providers/oci/", "OCI Data Science Model Deployment Endpoint": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_model_deployment_endpoint/"}, "OracleDocLoader": {"OracleAI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/providers/oracleai/", "Oracle AI Vector Search: Document Processing": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/oracleai/"}, "OracleTextSplitter": {"OracleAI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/providers/oracleai/", "Oracle AI Vector Search: Document Processing": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/oracleai/"}, "OracleVS": {"OracleAI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/providers/oracleai/", "Oracle AI Vector Search: Vector Store": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/oracle/"}, "Lantern": {"Lantern": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lantern/"}, "Fireworks": {"Fireworks": "https://python.langchain.com/v0.2/docs/integrations/llms/fireworks/"}, "DropboxLoader": {"Dropbox": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/dropbox/"}, "ForefrontAI": {"ForefrontAI": "https://python.langchain.com/v0.2/docs/integrations/llms/forefrontai/"}, "CometCallbackHandler": {"Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/"}, "CTransformers": {"C Transformers": "https://python.langchain.com/v0.2/docs/integrations/llms/ctransformers/"}, "BiliBiliLoader": {"BiliBili": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/bilibili/"}, "TencentCOSDirectoryLoader": {"Tencent": "https://python.langchain.com/v0.2/docs/integrations/providers/tencent/", "Tencent COS Directory": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/tencent_cos_directory/"}, "TencentCOSFileLoader": {"Tencent": "https://python.langchain.com/v0.2/docs/integrations/providers/tencent/", "Tencent COS File": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/tencent_cos_file/"}, "OBSDirectoryLoader": {"Huawei": "https://python.langchain.com/v0.2/docs/integrations/providers/huawei/", "Huawei OBS Directory": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/huawei_obs_directory/"}, "OBSFileLoader": {"Huawei": "https://python.langchain.com/v0.2/docs/integrations/providers/huawei/", "Huawei OBS File": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/huawei_obs_file/"}, "DiffbotLoader": {"Diffbot": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/diffbot/"}, "DiffbotGraphTransformer": {"Diffbot": "https://python.langchain.com/v0.2/docs/integrations/graphs/diffbot/", "Neo4j": "https://python.langchain.com/v0.2/docs/integrations/providers/neo4j/"}, "DeepSparse": {"DeepSparse": "https://python.langchain.com/v0.2/docs/integrations/llms/deepsparse/"}, "AimCallbackHandler": {"Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/"}, "ModernTreasuryLoader": {"Modern Treasury": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/modern_treasury/"}, "GitHubIssuesLoader": {"GitHub": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/github/"}, "GithubFileLoader": {"GitHub": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/github/"}, "Banana": {"Banana": "https://python.langchain.com/v0.2/docs/integrations/llms/banana/"}, "InfinispanVS": {"Infinispan VS": "https://python.langchain.com/v0.2/docs/integrations/providers/infinispanvs/", "Infinispan": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/infinispanvs/"}, "CerebriumAI": {"CerebriumAI": "https://python.langchain.com/v0.2/docs/integrations/llms/cerebriumai/"}, "GutenbergLoader": {"Gutenberg": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/gutenberg/"}, "WikipediaLoader": {"Wikipedia": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/wikipedia/", "Diffbot": "https://python.langchain.com/v0.2/docs/integrations/graphs/diffbot/"}, "ConfluenceLoader": {"Confluence": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/confluence/"}, "Predibase": {"Predibase": "https://python.langchain.com/v0.2/docs/integrations/llms/predibase/"}, "Beam": {"Beam": "https://python.langchain.com/v0.2/docs/integrations/llms/beam/"}, "GrobidParser": {"Grobid": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/grobid/"}, "Typesense": {"Typesense": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/typesense/"}, "Hologres": {"Hologres": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hologres/", "Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/"}, "ArangoGraph": {"ArangoDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/arangodb/"}, "ArangoGraphQAChain": {"ArangoDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/arangodb/"}, "ArcGISLoader": {"ArcGIS": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/arcgis/"}, "WandbCallbackHandler": {"Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/"}, "ObsidianLoader": {"Obsidian": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/obsidian/"}, "SQLDatabaseToolkit": {"CnosDB": "https://python.langchain.com/v0.2/docs/integrations/providers/cnosdb/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/"}, "BrowserbaseLoader": {"Browserbase": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/browserbase/"}, "Nebula": {"Nebula": "https://python.langchain.com/v0.2/docs/integrations/providers/symblai_nebula/", "Nebula (Symbl.ai)": "https://python.langchain.com/v0.2/docs/integrations/llms/symblai_nebula/"}, "Writer": {"Writer": "https://python.langchain.com/v0.2/docs/integrations/llms/writer/"}, "BaichuanLLM": {"Baichuan": "https://python.langchain.com/v0.2/docs/integrations/providers/baichuan/", "Baichuan LLM": "https://python.langchain.com/v0.2/docs/integrations/llms/baichuan/"}, "ApacheDoris": {"Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/"}, "ZepCloudVectorStore": {"Zep": "https://python.langchain.com/v0.2/docs/integrations/providers/zep/", "Zep Cloud": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zep_cloud/"}, "BrowserlessLoader": {"Browserless": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/browserless/"}, "AZLyricsLoader": {"AZLyrics": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/azlyrics/"}, "ToMarkdownLoader": {"2Markdown": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/tomarkdown/"}, "Mlflow": {"MLflow Deployments for LLMs": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow/"}, "MlflowEmbeddings": {"MLflow Deployments for LLMs": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow/"}, "ChatMlflow": {"MLflow Deployments for LLMs": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow/"}, "GitLoader": {"Git": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/git/"}, "MlflowAIGateway": {"MLflow AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_ai_gateway/"}, "MlflowAIGatewayEmbeddings": {"MLflow AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_ai_gateway/"}, "ChatMLflowAIGateway": {"MLflow AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_ai_gateway/"}, "Tigris": {"Tigris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tigris/"}, "Meilisearch": {"Meilisearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/meilisearch/"}, "SQLDatabaseChain": {"Rebuff": "https://python.langchain.com/v0.2/docs/integrations/providers/rebuff/"}, "SnowflakeLoader": {"Snowflake": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/snowflake/"}, "CubeSemanticLoader": {"Cube": "https://python.langchain.com/v0.2/docs/integrations/providers/cube/", "Cube Semantic Layer": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/cube_semantic/"}, "Clickhouse": {"ClickHouse": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/clickhouse/"}, "ClickhouseSettings": {"ClickHouse": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/clickhouse/"}, "ChatDatabricks": {"-> content='Hello! How can I assist you today?'": "https://python.langchain.com/v0.2/docs/integrations/providers/databricks/", "Databricks": "https://python.langchain.com/v0.2/docs/integrations/llms/databricks/"}, "DatabricksEmbeddings": {"-> content='Hello! How can I assist you today?'": "https://python.langchain.com/v0.2/docs/integrations/providers/databricks/", "Databricks": "https://python.langchain.com/v0.2/docs/integrations/llms/databricks/"}, "TelegramChatFileLoader": {"Telegram": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/telegram/"}, "TelegramChatApiLoader": {"Telegram": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/telegram/"}, "PredictionGuard": {"Prediction Guard": "https://python.langchain.com/v0.2/docs/integrations/llms/predictionguard/"}, "NotionDirectoryLoader": {"Notion DB": "https://python.langchain.com/v0.2/docs/integrations/providers/notion/", "Notion DB 1/2": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/notion/"}, "NotionDBLoader": {"Notion DB": "https://python.langchain.com/v0.2/docs/integrations/providers/notion/", "Notion DB 2/2": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/notiondb/"}, "MWDumpLoader": {"MediaWikiDump": "https://python.langchain.com/v0.2/docs/integrations/providers/mediawikidump/", "MediaWiki Dump": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/mediawikidump/"}, "BraveSearchLoader": {"Brave Search": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/brave_search/"}, "StarRocks": {"StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/"}, "GooseAI": {"GooseAI": "https://python.langchain.com/v0.2/docs/integrations/llms/gooseai/"}, "DatadogLogsLoader": {"Datadog Logs": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/datadog_logs/"}, "ApifyDatasetLoader": {"Apify": "https://python.langchain.com/v0.2/docs/integrations/providers/apify/", "Apify Dataset": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/apify_dataset/"}, "NLPCloud": {"NLPCloud": "https://python.langchain.com/v0.2/docs/integrations/providers/nlpcloud/", "NLP Cloud": "https://python.langchain.com/v0.2/docs/integrations/llms/nlpcloud/"}, "Milvus": {"Milvus": "https://python.langchain.com/v0.2/docs/integrations/providers/milvus/", "Zilliz": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zilliz/"}, "SemaDB": {"SemaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/semadb/"}, "GitbookLoader": {"GitBook": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/gitbook/"}, "Rockset": {"Rockset": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/rockset/"}, "RocksetLoader": {"Rockset": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/rockset/"}, "Minimax": {"Minimax": "https://python.langchain.com/v0.2/docs/integrations/llms/minimax/"}, "UnstructuredAPIFileIOLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/"}, "UnstructuredAPIFileLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Unstructured File": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/unstructured_file/"}, "UnstructuredCHMLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/"}, "UnstructuredCSVLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "CSV": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/csv/"}, "UnstructuredEmailLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Email": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/email/"}, "UnstructuredEPubLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "EPub ": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/epub/"}, "UnstructuredFileIOLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Google Drive": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_drive/"}, "UnstructuredFileLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Unstructured File": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/unstructured_file/"}, "UnstructuredImageLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Images": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/image/"}, "UnstructuredODTLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Open Document Format (ODT)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/odt/"}, "UnstructuredOrgModeLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Org-mode": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/org_mode/"}, "UnstructuredRSTLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "RST": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/rst/"}, "UnstructuredRTFLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/"}, "UnstructuredTSVLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "TSV": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/tsv/"}, "UnstructuredURLLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "URL": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/url/"}, "UnstructuredXMLLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "XML": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/xml/"}, "SelfHostedPipeline": {"Runhouse": "https://python.langchain.com/v0.2/docs/integrations/llms/runhouse/"}, "SelfHostedHuggingFaceLLM": {"Runhouse": "https://python.langchain.com/v0.2/docs/integrations/llms/runhouse/"}, "MlflowCallbackHandler": {"MLflow": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_tracking/"}, "SpreedlyLoader": {"Spreedly": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/spreedly/"}, "OpenLLM": {"OpenLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/openllm/"}, "PubMedLoader": {"PubMed": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/pubmed/"}, "SearxSearchResults": {"SearxNG Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/searx/"}, "Modal": {"Modal": "https://python.langchain.com/v0.2/docs/integrations/llms/modal/"}, "OpenCityDataLoader": {"Geopandas": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/geopandas/", "Open City Data": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/open_city_data/"}, "PGEmbedding": {"Postgres Embedding": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgembedding/"}, "SQLiteVSS": {"SQLite": "https://python.langchain.com/v0.2/docs/integrations/providers/sqlite/", "SQLite-VSS": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sqlitevss/"}, "Xinference": {"Xorbits Inference (Xinference)": "https://python.langchain.com/v0.2/docs/integrations/llms/xinference/"}, "IFixitLoader": {"iFixit": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/ifixit/"}, "AlephAlpha": {"Aleph Alpha": "https://python.langchain.com/v0.2/docs/integrations/llms/aleph_alpha/"}, "PipelineAI": {"PipelineAI": "https://python.langchain.com/v0.2/docs/integrations/llms/pipelineai/"}, "FacebookChatLoader": {"Facebook - Meta": "https://python.langchain.com/v0.2/docs/integrations/providers/facebook/", "Facebook Chat": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/facebook_chat/"}, "Epsilla": {"Epsilla": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/epsilla/"}, "AwaDB": {"AwaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/awadb/"}, "ArxivLoader": {"Arxiv": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/arxiv/"}, "BlockchainDocumentLoader": {"Alchemy": "https://python.langchain.com/v0.2/docs/integrations/providers/alchemy/", "Blockchain": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/blockchain/"}, "BlockchainType": {"Alchemy": "https://python.langchain.com/v0.2/docs/integrations/providers/alchemy/", "Blockchain": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/blockchain/"}, "Anyscale": {"Anyscale": "https://python.langchain.com/v0.2/docs/integrations/llms/anyscale/"}, "AINetworkToolkit": {"AINetwork": "https://python.langchain.com/v0.2/docs/integrations/toolkits/ainetwork/"}, "StripeLoader": {"Stripe": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/stripe/"}, "StochasticAI": {"StochasticAI": "https://python.langchain.com/v0.2/docs/integrations/llms/stochasticai/"}, "Bagel": {"BagelDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/bageldb/", "Bagel": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/bagel/"}, "TigerGraph": {"TigerGraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/tigergraph/"}, "BlackboardLoader": {"Blackboard": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/blackboard/"}, "YandexGPT": {"Yandex": "https://python.langchain.com/v0.2/docs/integrations/providers/yandex/", "YandexGPT": "https://python.langchain.com/v0.2/docs/integrations/llms/yandex/"}, "UpstashVectorStore": {"Upstash Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/upstash/"}, "NucliaTextTransformer": {"Nuclia": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/nuclia_transformer/"}, "NucliaLoader": {"Nuclia": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/nuclia/"}, "NucliaDB": {"Nuclia": "https://python.langchain.com/v0.2/docs/integrations/providers/nuclia/", "NucliaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/nucliadb/"}, "AnalyticDB": {"AnalyticDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/analyticdb/", "Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/"}, "GoogleApiYoutubeLoader": {"YouTube": "https://python.langchain.com/v0.2/docs/integrations/providers/youtube/", "YouTube transcripts": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_transcript/"}, "PromptLayerOpenAI": {"PromptLayer": "https://python.langchain.com/v0.2/docs/integrations/providers/promptlayer/", "PromptLayer OpenAI": "https://python.langchain.com/v0.2/docs/integrations/llms/promptlayer_openai/"}, "USearch": {"USearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/usearch/"}, "EtherscanLoader": {"Etherscan": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/etherscan/"}, "Arcee": {"Arcee": "https://python.langchain.com/v0.2/docs/integrations/llms/arcee/"}, "WhyLabsCallbackHandler": {"WhyLabs": "https://python.langchain.com/v0.2/docs/integrations/providers/whylabs_profiling/"}, "IuguLoader": {"Iugu": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/iugu/"}, "CouchbaseLoader": {"Couchbase": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/couchbase/"}, "FlyteCallbackHandler": {"Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/"}, "wandb_tracing_enabled": {"WandB Tracing": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracing/"}, "ManifestWrapper": {"Hazy Research": "https://python.langchain.com/v0.2/docs/integrations/providers/hazy_research/", "Manifest": "https://python.langchain.com/v0.2/docs/integrations/llms/manifest/"}, "OntotextGraphDBGraph": {"Ontotext GraphDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/ontotext/"}, "OntotextGraphDBQAChain": {"Ontotext GraphDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/ontotext/"}, "Marqo": {"Marqo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/marqo/"}, "IMSDbLoader": {"IMSDb": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/imsdb/"}, "TiDBLoader": {"TiDB": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/tidb/"}, "TiDBVectorStore": {"TiDB": "https://python.langchain.com/v0.2/docs/integrations/providers/tidb/", "TiDB Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tidb_vector/"}, "DeepInfra": {"DeepInfra": "https://python.langchain.com/v0.2/docs/integrations/llms/deepinfra/"}, "RedditPostsLoader": {"Reddit": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/reddit/"}, "TrelloLoader": {"Trello": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/trello/"}, "AtlasDB": {"Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/atlas/"}, "SKLearnVectorStore": {"scikit-learn": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sklearn/"}, "EverNoteLoader": {"EverNote": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/evernote/"}, "VDMS": {"VDMS": "https://python.langchain.com/v0.2/docs/integrations/providers/vdms/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vdms/"}, "VDMS_Client": {"VDMS": "https://python.langchain.com/v0.2/docs/integrations/providers/vdms/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vdms/"}, "TwitterTweetLoader": {"Twitter": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/twitter/"}, "DiscordChatLoader": {"Discord": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/discord/"}, "AssemblyAIAudioTranscriptLoader": {"AssemblyAI": "https://python.langchain.com/v0.2/docs/integrations/providers/assemblyai/", "AssemblyAI Audio Transcripts": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/assemblyai/"}, "KineticaLoader": {"Kinetica": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/kinetica/"}, "ClearMLCallbackHandler": {"ClearML": "https://python.langchain.com/v0.2/docs/integrations/providers/clearml_tracking/"}, "SlackDirectoryLoader": {"Slack": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/slack/"}, "HNLoader": {"Hacker News": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/hacker_news/", "Google Spanner": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_spanner/"}, "CTranslate2": {"CTranslate2": "https://python.langchain.com/v0.2/docs/integrations/llms/ctranslate2/"}, "QianfanLLMEndpoint": {"Baidu": "https://python.langchain.com/v0.2/docs/integrations/providers/baidu/", "Baidu Qianfan": "https://python.langchain.com/v0.2/docs/integrations/llms/baidu_qianfan_endpoint/"}, "BESVectorStore": {"Baidu": "https://python.langchain.com/v0.2/docs/integrations/providers/baidu/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiducloud_vector_search/"}, "BaiduVectorDB": {"Baidu": "https://python.langchain.com/v0.2/docs/integrations/providers/baidu/", "Baidu VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiduvectordb/"}, "Aphrodite": {"PygmalionAI": "https://python.langchain.com/v0.2/docs/integrations/providers/pygmalionai/", "Aphrodite Engine": "https://python.langchain.com/v0.2/docs/integrations/llms/aphrodite/"}, "PaiEasEndpoint": {"Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/v0.2/docs/integrations/llms/alibabacloud_pai_eas_endpoint/"}, "MaxComputeLoader": {"Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud MaxCompute": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/alibaba_cloud_maxcompute/"}, "AlibabaCloudOpenSearch": {"Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/alibabacloud_opensearch/"}, "AlibabaCloudOpenSearchSettings": {"Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/alibabacloud_opensearch/"}, "DocusaurusLoader": {"Docusaurus": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docusaurus/"}, "Annoy": {"Annoy": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/annoy/"}, "BibtexLoader": {"BibTeX": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/bibtex/"}, "CassandraLoader": {"Cassandra": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/cassandra/"}, "Vearch": {"Vearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vearch/"}, "JoplinLoader": {"Joplin": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/joplin/"}, "ArthurCallbackHandler": {"Arthur": "https://python.langchain.com/v0.2/docs/integrations/providers/arthur_tracking/"}, "AcreomLoader": {"Acreom": "https://python.langchain.com/v0.2/docs/integrations/providers/acreom/", "acreom": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/acreom/"}, "KDBAI": {"KDB.AI": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kdbai/"}, "DuckDBLoader": {"DuckDB": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/duckdb/"}, "Petals": {"Petals": "https://python.langchain.com/v0.2/docs/integrations/llms/petals/"}, "MomentoVectorIndex": {"Momento": "https://python.langchain.com/v0.2/docs/integrations/providers/momento/", "Momento Vector Index (MVI)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/momento_vector_index/"}, "NIBittensorLLM": {"Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/"}, "AirtableLoader": {"Airtable": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airtable/"}, "LarkSuiteDocLoader": {"ByteDance": "https://python.langchain.com/v0.2/docs/integrations/providers/byte_dance/", "LarkSuite (FeiShu)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/larksuite/"}, "JavelinAIGateway": {"Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/v0.2/docs/integrations/llms/javelin/"}, "JavelinAIGatewayEmbeddings": {"Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/v0.2/docs/integrations/llms/javelin/"}, "ChatJavelinAIGateway": {"Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/v0.2/docs/integrations/llms/javelin/"}, "TensorflowDatasetLoader": {"TensorFlow Datasets": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/tensorflow_datasets/"}, "Clarifai": {"Clarifai": "https://python.langchain.com/v0.2/docs/integrations/llms/clarifai/"}, "DataheraldTextToSQL": {"Dataherald": "https://python.langchain.com/v0.2/docs/integrations/providers/dataherald/"}, "RoamLoader": {"Roam": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/roam/"}, "CONDENSE_QUESTION_PROMPT": {"Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/"}, "load_qa_with_sources_chain": {"Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/"}, "QA_PROMPT": {"Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/"}, "RedisStore": {"RedisStore": "https://python.langchain.com/v0.2/docs/integrations/stores/redis/"}, "AstraDBStore": {"Astra DB": "https://python.langchain.com/v0.2/docs/integrations/stores/astradb/"}, "AstraDBByteStore": {"Astra DB": "https://python.langchain.com/v0.2/docs/integrations/stores/astradb/"}, "CassandraByteStore": {"Cassandra": "https://python.langchain.com/v0.2/docs/integrations/stores/cassandra/"}, "UpstashRedisByteStore": {"UpstashRedisByteStore": "https://python.langchain.com/v0.2/docs/integrations/stores/upstash_redis/"}, "ConneryToolkit": {"Connery Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/connery/"}, "create_csv_agent": {"CSV": "https://python.langchain.com/v0.2/docs/integrations/toolkits/csv/"}, "create_xorbits_agent": {"Xorbits": "https://python.langchain.com/v0.2/docs/integrations/toolkits/xorbits/"}, "JiraToolkit": {"Jira": "https://python.langchain.com/v0.2/docs/integrations/toolkits/jira/"}, "JiraAPIWrapper": {"Jira": "https://python.langchain.com/v0.2/docs/integrations/toolkits/jira/"}, "create_spark_dataframe_agent": {"Spark Dataframe": "https://python.langchain.com/v0.2/docs/integrations/toolkits/spark/"}, "PythonREPLTool": {"Python": "https://python.langchain.com/v0.2/docs/integrations/toolkits/python/"}, "create_pbi_agent": {"PowerBI Dataset": "https://python.langchain.com/v0.2/docs/integrations/toolkits/powerbi/"}, "AzureCognitiveServicesToolkit": {"Azure Cognitive Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_cognitive_services/"}, "NLAToolkit": {"Natural Language APIs": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi_nla/"}, "Requests": {"Natural Language APIs": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi_nla/"}, "GmailToolkit": {"Gmail": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gmail/"}, "build_resource_service": {"Gmail": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gmail/"}, "get_gmail_credentials": {"Gmail": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gmail/"}, "SlackToolkit": {"Slack": "https://python.langchain.com/v0.2/docs/integrations/toolkits/slack/"}, "SteamToolkit": {"Steam Game Recommendation & Game Details": "https://python.langchain.com/v0.2/docs/integrations/toolkits/steam/"}, "SteamWebAPIWrapper": {"Steam Game Recommendation & Game Details": "https://python.langchain.com/v0.2/docs/integrations/toolkits/steam/"}, "CassandraDatabaseToolkit": {"Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/"}, "GetSchemaCassandraDatabaseTool": {"Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/"}, "GetTableDataCassandraDatabaseTool": {"Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/"}, "QueryCassandraDatabaseTool": {"Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/"}, "CassandraDatabase": {"Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/"}, "JsonToolkit": {"JSON": "https://python.langchain.com/v0.2/docs/integrations/toolkits/json/"}, "create_json_agent": {"JSON": "https://python.langchain.com/v0.2/docs/integrations/toolkits/json/"}, "JsonSpec": {"JSON": "https://python.langchain.com/v0.2/docs/integrations/toolkits/json/", "OpenAPI": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi/"}, "AirbyteStripeLoader": {"Airbyte Question Answering": "https://python.langchain.com/v0.2/docs/integrations/toolkits/airbyte_structured_qa/", "Airbyte Stripe (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_stripe/"}, "GitHubToolkit": {"Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/"}, "GitHubAPIWrapper": {"Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/"}, "ConversationSummaryBufferMemory": {"Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/"}, "tracing_v2_enabled": {"Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/", "Chat Bot Feedback Template": "https://python.langchain.com/v0.2/docs/templates/chat-bot-feedback/"}, "render_text_description_and_args": {"Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/", "Amadeus": "https://python.langchain.com/v0.2/docs/integrations/toolkits/amadeus/"}, "ClickupToolkit": {"ClickUp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/clickup/"}, "ClickupAPIWrapper": {"ClickUp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/clickup/"}, "SparkSQLToolkit": {"Spark SQL": "https://python.langchain.com/v0.2/docs/integrations/toolkits/spark_sql/"}, "create_spark_sql_agent": {"Spark SQL": "https://python.langchain.com/v0.2/docs/integrations/toolkits/spark_sql/"}, "SparkSQL": {"Spark SQL": "https://python.langchain.com/v0.2/docs/integrations/toolkits/spark_sql/"}, "PlayWrightBrowserToolkit": {"PlayWright Browser": "https://python.langchain.com/v0.2/docs/integrations/toolkits/playwright/"}, "create_async_playwright_browser": {"PlayWright Browser": "https://python.langchain.com/v0.2/docs/integrations/toolkits/playwright/"}, "create_conversational_retrieval_agent": {"# Cogniswitch Tools": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cogniswitch/"}, "CogniswitchToolkit": {"# Cogniswitch Tools": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cogniswitch/"}, "NasaToolkit": {"NASA": "https://python.langchain.com/v0.2/docs/integrations/toolkits/nasa/"}, "NasaAPIWrapper": {"NASA": "https://python.langchain.com/v0.2/docs/integrations/toolkits/nasa/"}, "MultionToolkit": {"MultiOn": "https://python.langchain.com/v0.2/docs/integrations/toolkits/multion/"}, "AmadeusToolkit": {"Amadeus": "https://python.langchain.com/v0.2/docs/integrations/toolkits/amadeus/"}, "HuggingFaceHub": {"Amadeus": "https://python.langchain.com/v0.2/docs/integrations/toolkits/amadeus/"}, "AzureAiServicesToolkit": {"Azure AI Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_ai_services/"}, "create_structured_chat_agent": {"Azure AI Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_ai_services/"}, "reduce_openapi_spec": {"OpenAPI": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi/"}, "RequestsWrapper": {"OpenAPI": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi/"}, "OpenAPIToolkit": {"OpenAPI": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi/"}, "create_openapi_agent": {"OpenAPI": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi/"}, "GitLabToolkit": {"Gitlab": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gitlab/"}, "GitLabAPIWrapper": {"Gitlab": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gitlab/"}, "PolygonToolkit": {"Polygon IO Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/polygon/"}, "ApacheDorisSettings": {"Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/"}, "DistanceStrategy": {"Kinetica Vectorstore API": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kinetica/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/singlestoredb/", "Oracle AI Vector Search: Vector Store": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/oracle/", "Google BigQuery Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_bigquery_vector_search/", "SemaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/semadb/"}, "SentenceTransformerEmbeddings": {"SQLite-VSS": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sqlitevss/", "Vespa": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vespa/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/chroma/"}, "Vald": {"Vald": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vald/"}, "RetrievalQAWithSourcesChain": {"Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "Neo4j Vector Index": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/neo4jvector/", "Marqo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/marqo/", "Psychic": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/psychic/"}, "Yellowbrick": {"Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/"}, "LLMRails": {"LLMRails": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/llm_rails/"}, "HanaDB": {"SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/"}, "VectorSearchVectorStoreDatastore": {"Google Vertex AI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_vertex_ai_vector_search/"}, "VertexAI": {"Google Vertex AI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "Hippo": {"Hippo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hippo/"}, "RedisText": {"Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/redis/"}, "RedisNum": {"Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/redis/"}, "RedisTag": {"Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/redis/"}, "RedisFilter": {"Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/redis/"}, "VespaStore": {"Vespa": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vespa/"}, "NeuralDBVectorStore": {"ThirdAI NeuralDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/thirdai_neuraldb/"}, "VikingDB": {"viking DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vikingdb/"}, "VikingDBConfig": {"viking DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vikingdb/"}, "CouchbaseVectorStore": {"Couchbase ": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/couchbase/"}, "Relyt": {"Relyt": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/relyt/"}, "oraclevs": {"Oracle AI Vector Search: Vector Store": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/oracle/"}, "VLite": {"vlite": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vlite/"}, "DuckDB": {"DuckDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/duckdb/"}, "StarRocksSettings": {"StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/"}, "PathwayVectorClient": {"Pathway": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pathway/"}, "DocArrayHnswSearch": {"DocArray HnswSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_hnsw/"}, "TileDB": {"TileDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tiledb/"}, "EcloudESVectorStore": {"China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/ecloud_vector_search/"}, "SurrealDBStore": {"SurrealDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/surrealdb/"}, "ManticoreSearch": {"ManticoreSearch VectorStore": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/manticore_search/"}, "ManticoreSearchSettings": {"ManticoreSearch VectorStore": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/manticore_search/"}, "Aerospike": {"Aerospike": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/aerospike/"}, "ElasticVectorSearch": {"Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/elasticsearch/"}, "PGVecto_rs": {"PGVecto.rs": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgvecto_rs/"}, "BigQueryVectorSearch": {"Google BigQuery Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_bigquery_vector_search/"}, "ZepVectorStore": {"Zep": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zep/"}, "CollectionConfig": {"Zep": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zep/"}, "openai": {"OpenAI Adapter(Old)": "https://python.langchain.com/v0.2/docs/integrations/adapters/openai-old/", "OpenAI Adapter": "https://python.langchain.com/v0.2/docs/integrations/adapters/openai/"}, "RankLLMRerank": {"RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/"}, "AsyncChromiumLoader": {"Beautiful Soup": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/beautiful_soup/", "Async Chromium": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/async_chromium/"}, "BeautifulSoupTransformer": {"Beautiful Soup": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/beautiful_soup/"}, "OpenVINOReranker": {"OpenVINO Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openvino_rerank/"}, "create_metadata_tagger": {"OpenAI metadata tagger": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openai_metadata_tagger/"}, "DoctranPropertyExtractor": {"Doctran: extract properties": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/doctran_extract_properties/"}, "DoctranQATransformer": {"Doctran: interrogate documents": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/doctran_interrogate_document/"}, "CrossEncoderReranker": {"Cross Encoder Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/cross_encoder_reranker/"}, "HuggingFaceCrossEncoder": {"Cross Encoder Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/cross_encoder_reranker/"}, "JinaRerank": {"Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/"}, "DoctranTextTranslator": {"Doctran: language translation": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/doctran_translate_document/"}, "MarkdownifyTransformer": {"Markdownify": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/markdownify/"}, "XorbitsLoader": {"Xorbits Pandas DataFrame": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/xorbits/"}, "OutlookMessageLoader": {"Email": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/email/"}, "TranscriptFormat": {"AssemblyAI Audio Transcripts": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/assemblyai/"}, "AirbyteSalesforceLoader": {"Airbyte Salesforce (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_salesforce/"}, "AirbyteCDKLoader": {"Airbyte CDK (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_cdk/"}, "Docx2txtLoader": {"Microsoft Word": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_word/"}, "RSpaceLoader": {"# replace these ids with some from your own research notes.": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/rspace/"}, "SeleniumURLLoader": {"URL": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/url/"}, "PlaywrightURLLoader": {"URL": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/url/"}, "AirbyteJSONLoader": {"Airbyte JSON (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_json/"}, "GeoDataFrameLoader": {"Geopandas": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/geopandas/"}, "AirbyteTypeformLoader": {"Airbyte Typeform (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_typeform/"}, "MHTMLLoader": {"mhtml": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/mhtml/"}, "SpiderLoader": {"Spider": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/spider/"}, "NewsURLLoader": {"News URL": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/news/"}, "ImageCaptionLoader": {"Image captions": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/image_captions/"}, "LLMSherpaFileLoader": {"LLM Sherpa": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/llmsherpa/"}, "ScrapflyLoader": {"# ScrapFly": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/scrapfly/"}, "TomlLoader": {"TOML": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/toml/"}, "PsychicLoader": {"Psychic": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/psychic/"}, "FireCrawlLoader": {"FireCrawl": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/firecrawl/"}, "LarkSuiteWikiLoader": {"LarkSuite (FeiShu)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/larksuite/"}, "FakeListLLM": {"LarkSuite (FeiShu)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/larksuite/"}, "MergedDataLoader": {"Merge Documents Loader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/merge_doc/"}, "RecursiveUrlLoader": {"Recursive URL": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/recursive_url/"}, "AirbyteHubspotLoader": {"Airbyte Hubspot (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_hubspot/"}, "AirbyteGongLoader": {"Airbyte Gong (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_gong/"}, "AstraDBLoader": {"AstraDB": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/astradb/"}, "ReadTheDocsLoader": {"ReadTheDocs Documentation": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/readthedocs_documentation/"}, "PolarsDataFrameLoader": {"Polars DataFrame": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/polars_dataframe/"}, "DataFrameLoader": {"Pandas DataFrame": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/pandas_dataframe/"}, "SurrealDBLoader": {"SurrealDB": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/surrealdb/"}, "GoogleApiClient": {"YouTube transcripts": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_transcript/"}, "ConcurrentLoader": {"Concurrent Loader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/concurrent/"}, "RSSFeedLoader": {"RSS Feeds": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/rss/"}, "PebbloSafeLoader": {"Pebblo Safe DocumentLoader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/pebblo/"}, "VsdxLoader": {"Vsdx": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/vsdx/"}, "NotebookLoader": {"Jupyter Notebook": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/jupyter_notebook/"}, "OracleAutonomousDatabaseLoader": {"Oracle Autonomous Database": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/oracleadb_loader/"}, "LanguageParser": {"Source Code": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/source_code/"}, "SRTLoader": {"Subtitle": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/subtitle/"}, "MastodonTootsLoader": {"Mastodon": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/mastodon/"}, "AirbyteShopifyLoader": {"Airbyte Shopify (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_shopify/"}, "GlueCatalogLoader": {"Glue Catalog": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/glue_catalog/"}, "PySparkDataFrameLoader": {"PySpark": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/pyspark_dataframe/"}, "AirbyteZendeskSupportLoader": {"Airbyte Zendesk Support (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_zendesk_support/"}, "CoNLLULoader": {"CoNLL-U": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/conll-u/"}, "MongodbLoader": {"MongoDB": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/mongodb/"}, "SitemapLoader": {"Sitemap": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/sitemap/"}, "YuqueLoader": {"Yuque": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/yuque/"}, "QuipLoader": {"Quip": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/quip/"}, "MemgraphGraph": {"Memgraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/memgraph/"}, "GraphSparqlQAChain": {"RDFLib": "https://python.langchain.com/v0.2/docs/integrations/graphs/rdflib_sparql/"}, "RdfGraph": {"RDFLib": "https://python.langchain.com/v0.2/docs/integrations/graphs/rdflib_sparql/"}, "NebulaGraphQAChain": {"NebulaGraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/nebula_graph/"}, "NebulaGraph": {"NebulaGraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/nebula_graph/"}, "GremlinQAChain": {"Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/v0.2/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "GraphIndexCreator": {"NetworkX": "https://python.langchain.com/v0.2/docs/integrations/graphs/networkx/"}, "GraphQAChain": {"NetworkX": "https://python.langchain.com/v0.2/docs/integrations/graphs/networkx/"}, "NetworkxEntityGraph": {"NetworkX": "https://python.langchain.com/v0.2/docs/integrations/graphs/networkx/"}, "HugeGraphQAChain": {"HugeGraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/hugegraph/"}, "HugeGraph": {"HugeGraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/hugegraph/"}, "AGEGraph": {"Apache AGE": "https://python.langchain.com/v0.2/docs/integrations/graphs/apache_age/"}, "KuzuQAChain": {"Kuzu": "https://python.langchain.com/v0.2/docs/integrations/graphs/kuzu_db/"}, "KuzuGraph": {"Kuzu": "https://python.langchain.com/v0.2/docs/integrations/graphs/kuzu_db/"}, "FalkorDBQAChain": {"FalkorDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/falkordb/"}, "FalkorDBGraph": {"FalkorDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/falkordb/"}, "ConversationBufferWindowMemory": {"Baseten": "https://python.langchain.com/v0.2/docs/integrations/llms/baseten/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/"}, "Solar": {"Solar": "https://python.langchain.com/v0.2/docs/integrations/llms/solar/"}, "IpexLLM": {"IPEX-LLM": "https://python.langchain.com/v0.2/docs/integrations/llms/ipex_llm/"}, "SagemakerEndpoint": {"SageMakerEndpoint": "https://python.langchain.com/v0.2/docs/integrations/llms/sagemaker/"}, "LLMContentHandler": {"SageMakerEndpoint": "https://python.langchain.com/v0.2/docs/integrations/llms/sagemaker/"}, "OctoAIEndpoint": {"OctoAI": "https://python.langchain.com/v0.2/docs/integrations/llms/octoai/"}, "TextGen": {"TextGen": "https://python.langchain.com/v0.2/docs/integrations/llms/textgen/"}, "MosaicML": {"MosaicML": "https://python.langchain.com/v0.2/docs/integrations/llms/mosaicml/"}, "VolcEngineMaasLLM": {"Volc Engine Maas": "https://python.langchain.com/v0.2/docs/integrations/llms/volcengine_maas/"}, "KoboldApiLLM": {"KoboldAI API": "https://python.langchain.com/v0.2/docs/integrations/llms/koboldai/"}, "Konko": {"Konko": "https://python.langchain.com/v0.2/docs/integrations/llms/konko/"}, "GemmaChatVertexAIModelGarden": {"Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "GemmaVertexAIModelGarden": {"Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "ChatAnthropicVertex": {"Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "OpaquePrompts": {"OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/"}, "TitanTakeoff": {"Titan Takeoff": "https://python.langchain.com/v0.2/docs/integrations/llms/titan_takeoff/"}, "Friendli": {"Friendli": "https://python.langchain.com/v0.2/docs/integrations/llms/friendli/"}, "Databricks": {"Databricks": "https://python.langchain.com/v0.2/docs/integrations/llms/databricks/"}, "LMFormatEnforcer": {"LM Format Enforcer": "https://python.langchain.com/v0.2/docs/integrations/llms/lmformatenforcer_experimental/"}, "VLLM": {"vLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/vllm/"}, "VLLMOpenAI": {"vLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/vllm/"}, "CustomOpenAIContentFormatter": {"Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/"}, "ContentFormatterBase": {"Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/"}, "DollyContentFormatter": {"Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/"}, "load_llm": {"Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/"}, "MapReduceChain": {"Manifest": "https://python.langchain.com/v0.2/docs/integrations/llms/manifest/"}, "ModelLaboratory": {"Manifest": "https://python.langchain.com/v0.2/docs/integrations/llms/manifest/"}, "ExLlamaV2": {"ExLlamaV2": "https://python.langchain.com/v0.2/docs/integrations/llms/exllamav2/"}, "RELLM": {"RELLM": "https://python.langchain.com/v0.2/docs/integrations/llms/rellm_experimental/"}, "Yuan2": {"Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/llms/yuan2/"}, "SparkLLM": {"SparkLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/sparkllm/"}, "Moonshot": {"MoonshotChat": "https://python.langchain.com/v0.2/docs/integrations/llms/moonshot/"}, "OpenLM": {"OpenLM": "https://python.langchain.com/v0.2/docs/integrations/llms/openlm/"}, "CloudflareWorkersAI": {"Cloudflare Workers AI": "https://python.langchain.com/v0.2/docs/integrations/llms/cloudflare_workersai/"}, "ChatGLM3": {"ChatGLM": "https://python.langchain.com/v0.2/docs/integrations/llms/chatglm/"}, "ChatGLM": {"ChatGLM": "https://python.langchain.com/v0.2/docs/integrations/llms/chatglm/"}, "Sambaverse": {"SambaNova": "https://python.langchain.com/v0.2/docs/integrations/llms/sambanova/"}, "SambaStudio": {"SambaNova": "https://python.langchain.com/v0.2/docs/integrations/llms/sambanova/"}, "LayerupSecurity": {"Layerup Security": "https://python.langchain.com/v0.2/docs/integrations/llms/layerup_security/"}, "JsonFormer": {"JSONFormer": "https://python.langchain.com/v0.2/docs/integrations/llms/jsonformer_experimental/"}, "WeightOnlyQuantPipeline": {"Intel Weight-Only Quantization": "https://python.langchain.com/v0.2/docs/integrations/llms/weight_only_quantization/"}, "Replicate": {"Replicate": "https://python.langchain.com/v0.2/docs/integrations/llms/replicate/"}, "RunnablePick": {"Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/"}, "StuffDocumentsChain": {"Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/"}, "MapReduceDocumentsChain": {"Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/"}, "ReduceDocumentsChain": {"Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/"}, "AnalyzeDocumentChain": {"Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/"}, "QuerySQLDataBaseTool": {"Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/"}, "OPENAI_TEMPLATE": {"Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "create_openai_data_generator": {"Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "DatasetGenerator": {"Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "create_data_generation_chain": {"Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "create_extraction_chain_pydantic": {"Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}} \ No newline at end of file +{"ChatPromptTemplate": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/v0.2/docs/langserve/", "Conceptual guide": "https://python.langchain.com/v0.2/docs/concepts/", "How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to add values to a chain's state": "https://python.langchain.com/v0.2/docs/how_to/assign/", "How to do per-user retrieval": "https://python.langchain.com/v0.2/docs/how_to/qa_per_user/", "How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/", "How to create a custom LLM class": "https://python.langchain.com/v0.2/docs/how_to/custom_llm/", "How to inspect runnables": "https://python.langchain.com/v0.2/docs/how_to/inspect/", "How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to use few shot examples in chat models": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples_chat/", "How to do tool/function calling": "https://python.langchain.com/v0.2/docs/how_to/function_calling/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_parse/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_large_db/", "How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to add fallbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/fallbacks/", "How to propagate callbacks constructor": "https://python.langchain.com/v0.2/docs/how_to/callbacks_constructor/", "How to map values to a graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_mapping/", "How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to attach callbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/callbacks_attach/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to add default invocation args to a Runnable": "https://python.langchain.com/v0.2/docs/how_to/binding/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/v0.2/docs/how_to/dynamic_chain/", "How to create custom callback handlers": "https://python.langchain.com/v0.2/docs/how_to/custom_callbacks/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/v0.2/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/v0.2/docs/how_to/passthrough/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/v0.2/docs/how_to/message_history/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "How to run custom functions": "https://python.langchain.com/v0.2/docs/how_to/functions/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_high_cardinality/", "How to return structured data from a model": "https://python.langchain.com/v0.2/docs/how_to/structured_output/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/v0.2/docs/how_to/tools_prompting/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/", "How to debug your LLM apps": "https://python.langchain.com/v0.2/docs/how_to/debugging/", "How to chain runnables": "https://python.langchain.com/v0.2/docs/how_to/sequence/", "Hybrid Search": "https://python.langchain.com/v0.2/docs/how_to/hybrid/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_query_checking/", "How to use multimodal prompts": "https://python.langchain.com/v0.2/docs/how_to/multimodal_prompts/", "How to pass callbacks in at runtime": "https://python.langchain.com/v0.2/docs/how_to/callbacks_runtime/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "LangSmith LLM Runs": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_llm_runs/", "iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/", "NVIDIA NIMs ": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/nvidia_ai_endpoints/", "You.com": "https://python.langchain.com/v0.2/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/v0.2/docs/integrations/retrievers/asknews/", "Tavily Search API": "https://python.langchain.com/v0.2/docs/integrations/retrievers/tavily/", "Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/retrievers/ragatouille/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/memory/redis_chat_message_history/", "Google SQL for MySQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mysql/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_alloydb/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/aws_dynamodb/", "MongoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/mongodb_chat_message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/v0.2/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/memory/streamlit_chat_message_history/", "Google El Carro Oracle": "https://python.langchain.com/v0.2/docs/integrations/memory/google_el_carro/", "SQLite": "https://python.langchain.com/v0.2/docs/integrations/memory/sqlite/", "Google SQL for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_pg/", "Google SQL for SQL Server": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mssql/", "TiDB": "https://python.langchain.com/v0.2/docs/integrations/memory/tidb_chat_message_history/", "Kinetica SqlAssist LLM Demo": "https://python.langchain.com/v0.2/docs/integrations/chat/kinetica/", "ChatAnthropic": "https://python.langchain.com/v0.2/docs/integrations/chat/anthropic/", "Groq": "https://python.langchain.com/v0.2/docs/integrations/chat/groq/", "ChatOpenAI": "https://python.langchain.com/v0.2/docs/integrations/chat/openai/", "ChatVertexAI": "https://python.langchain.com/v0.2/docs/integrations/chat/google_vertex_ai_palm/", "JinaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/jinachat/", "ChatOllama": "https://python.langchain.com/v0.2/docs/integrations/chat/ollama/", "MistralAI": "https://python.langchain.com/v0.2/docs/integrations/chat/mistralai/", "ChatAI21": "https://python.langchain.com/v0.2/docs/integrations/chat/ai21/", "Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/", "Cohere": "https://python.langchain.com/v0.2/docs/integrations/providers/cohere/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/chat/edenai/", "vLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/vllm/", "Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/chat/yuan2/", "Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/", "ChatPerplexity": "https://python.langchain.com/v0.2/docs/integrations/chat/perplexity/", "ChatUpstage": "https://python.langchain.com/v0.2/docs/integrations/chat/upstage/", "NVIDIA NIMs": "https://python.langchain.com/v0.2/docs/integrations/chat/nvidia_ai_endpoints/", "Context": "https://python.langchain.com/v0.2/docs/integrations/callbacks/context/", "Fiddler": "https://python.langchain.com/v0.2/docs/integrations/callbacks/fiddler/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_summary/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "OpenAI metadata tagger": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openai_metadata_tagger/", "Figma": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/figma/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Build an Extraction Chain": "https://python.langchain.com/v0.2/docs/tutorials/extraction/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/", "Classify Text into Labels": "https://python.langchain.com/v0.2/docs/tutorials/classification/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/", "Build a Simple LLM Application": "https://python.langchain.com/v0.2/docs/tutorials/llm_chain/", "Vector stores and retrievers": "https://python.langchain.com/v0.2/docs/tutorials/retrievers/"}, "ChatAnthropic": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/v0.2/docs/langserve/", "How to use callbacks in async environments": "https://python.langchain.com/v0.2/docs/how_to/callbacks_async/", "How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/", "How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/", "How to parse XML output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_xml/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_parse/", "How to add fallbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/fallbacks/", "How to propagate callbacks constructor": "https://python.langchain.com/v0.2/docs/how_to/callbacks_constructor/", "How to stream chat model responses": "https://python.langchain.com/v0.2/docs/how_to/chat_streaming/", "How to attach callbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/callbacks_attach/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/v0.2/docs/how_to/dynamic_chain/", "How to create custom callback handlers": "https://python.langchain.com/v0.2/docs/how_to/custom_callbacks/", "How to configure runtime chain internals": "https://python.langchain.com/v0.2/docs/how_to/configure/", "How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/", "Response metadata": "https://python.langchain.com/v0.2/docs/how_to/response_metadata/", "How to pass callbacks in at runtime": "https://python.langchain.com/v0.2/docs/how_to/callbacks_runtime/", "Anthropic": "https://python.langchain.com/v0.2/docs/integrations/platforms/anthropic/", "ChatAnthropic": "https://python.langchain.com/v0.2/docs/integrations/chat/anthropic/", "Log10": "https://python.langchain.com/v0.2/docs/integrations/providers/log10/", "Python": "https://python.langchain.com/v0.2/docs/integrations/toolkits/python/", "PlayWright Browser": "https://python.langchain.com/v0.2/docs/integrations/toolkits/playwright/", "Build an Agent": "https://python.langchain.com/v0.2/docs/tutorials/agents/"}, "ChatOpenAI": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/v0.2/docs/langserve/", "How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to add values to a chain's state": "https://python.langchain.com/v0.2/docs/how_to/assign/", "How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/", "How to inspect runnables": "https://python.langchain.com/v0.2/docs/how_to/inspect/", "How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to use few shot examples in chat models": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples_chat/", "How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to add fallbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/fallbacks/", "How to map values to a graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_mapping/", "How to pass multimodal data directly to models": "https://python.langchain.com/v0.2/docs/how_to/multimodal_inputs/", "How to use the output-fixing parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_fixing/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling", "How to convert tools to OpenAI Functions": "https://python.langchain.com/v0.2/docs/how_to/tools_as_openai_functions/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to add default invocation args to a Runnable": "https://python.langchain.com/v0.2/docs/how_to/binding/", "How to invoke runnables in parallel": "https://python.langchain.com/v0.2/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/v0.2/docs/how_to/passthrough/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to configure runtime chain internals": "https://python.langchain.com/v0.2/docs/how_to/configure/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "How to construct knowledge graphs": "https://python.langchain.com/v0.2/docs/how_to/graph_constructing/", "How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/", "How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/", "How to run custom functions": "https://python.langchain.com/v0.2/docs/how_to/functions/", "How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_high_cardinality/", "How to get log probabilities": "https://python.langchain.com/v0.2/docs/how_to/logprobs/", "How to parse YAML output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_yaml/", "Response metadata": "https://python.langchain.com/v0.2/docs/how_to/response_metadata/", "How to parse JSON output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_json/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/", "Hybrid Search": "https://python.langchain.com/v0.2/docs/how_to/hybrid/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "How to use multimodal prompts": "https://python.langchain.com/v0.2/docs/how_to/multimodal_prompts/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "WeChat": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/wechat/", "Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "LangSmith LLM Runs": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_llm_runs/", "Slack": "https://python.langchain.com/v0.2/docs/integrations/toolkits/slack/", "WhatsApp": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/whatsapp/", "LangSmith Chat Datasets": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_dataset/", "iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/discord/", "RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/", "You.com": "https://python.langchain.com/v0.2/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/v0.2/docs/integrations/tools/asknews/", "LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/", "Outline": "https://python.langchain.com/v0.2/docs/integrations/retrievers/outline/", "Wikipedia": "https://python.langchain.com/v0.2/docs/integrations/retrievers/wikipedia/", "SEC filing": "https://python.langchain.com/v0.2/docs/integrations/retrievers/sec_filings/", "Tavily Search API": "https://python.langchain.com/v0.2/docs/integrations/retrievers/tavily/", "Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/retrievers/ragatouille/", "Arxiv": "https://python.langchain.com/v0.2/docs/integrations/retrievers/arxiv/", "Rememberizer": "https://python.langchain.com/v0.2/docs/integrations/retrievers/rememberizer/", "Milvus Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/milvus_hybrid_search/", "Kay.ai": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kay/", "FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/tencentvectordb/", "MyScale": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/myscale_self_query/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/", "ChatGPT Plugins": "https://python.langchain.com/v0.2/docs/integrations/tools/chatgpt_plugins/", "Connery Action Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/connery/", "Tavily Search": "https://python.langchain.com/v0.2/docs/integrations/tools/tavily_search/", "Infobip": "https://python.langchain.com/v0.2/docs/integrations/tools/infobip/", "E2B Data Analysis": "https://python.langchain.com/v0.2/docs/integrations/tools/e2b_data_analysis/", "Human as a tool": "https://python.langchain.com/v0.2/docs/integrations/tools/human_tools/", "Azure Container Apps dynamic sessions": "https://python.langchain.com/v0.2/docs/integrations/tools/azure_dynamic_sessions/", "Yahoo Finance News": "https://python.langchain.com/v0.2/docs/integrations/tools/yahoo_finance_news/", "Semantic Scholar API Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/semanticscholar/", "Passio NutritionAI": "https://python.langchain.com/v0.2/docs/integrations/tools/passio_nutrition_ai/", "Bearly Code Interpreter": "https://python.langchain.com/v0.2/docs/integrations/tools/bearly/", "ArXiv": "https://python.langchain.com/v0.2/docs/integrations/tools/arxiv/", "Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/", "You.com Search": "https://python.langchain.com/v0.2/docs/integrations/tools/you/", "Shell (bash)": "https://python.langchain.com/v0.2/docs/integrations/tools/bash/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/memory/redis_chat_message_history/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/aws_dynamodb/", "MongoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/mongodb_chat_message_history/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/memory/xata_chat_message_history/", "Remembrall": "https://python.langchain.com/v0.2/docs/integrations/memory/remembrall/", "SQL (SQLAlchemy)": "https://python.langchain.com/v0.2/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/memory/streamlit_chat_message_history/", "SQLite": "https://python.langchain.com/v0.2/docs/integrations/memory/sqlite/", "TiDB": "https://python.langchain.com/v0.2/docs/integrations/memory/tidb_chat_message_history/", "ChatOpenAI": "https://python.langchain.com/v0.2/docs/integrations/chat/openai/", "vLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/vllm/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Context": "https://python.langchain.com/v0.2/docs/integrations/callbacks/context/", "Label Studio": "https://python.langchain.com/v0.2/docs/integrations/callbacks/labelstudio/", "PromptLayer": "https://python.langchain.com/v0.2/docs/integrations/callbacks/promptlayer/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "Trubrics": "https://python.langchain.com/v0.2/docs/integrations/callbacks/trubrics/", "Infino": "https://python.langchain.com/v0.2/docs/integrations/callbacks/infino/", "CnosDB": "https://python.langchain.com/v0.2/docs/integrations/providers/cnosdb/", "Log10": "https://python.langchain.com/v0.2/docs/integrations/providers/log10/", "Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/", "Arthur": "https://python.langchain.com/v0.2/docs/integrations/providers/arthur_tracking/", "Dataherald": "https://python.langchain.com/v0.2/docs/integrations/providers/dataherald/", "Log, Trace, and Monitor": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/index/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_summary/", "Connery Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/connery/", "CSV": "https://python.langchain.com/v0.2/docs/integrations/toolkits/csv/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Python": "https://python.langchain.com/v0.2/docs/integrations/toolkits/python/", "PowerBI Dataset": "https://python.langchain.com/v0.2/docs/integrations/toolkits/powerbi/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Gmail": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gmail/", "Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/", "Airbyte Question Answering": "https://python.langchain.com/v0.2/docs/integrations/toolkits/airbyte_structured_qa/", "Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/", "Spark SQL": "https://python.langchain.com/v0.2/docs/integrations/toolkits/spark_sql/", "AINetwork": "https://python.langchain.com/v0.2/docs/integrations/toolkits/ainetwork/", "# Cogniswitch Tools": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cogniswitch/", "Pandas Dataframe": "https://python.langchain.com/v0.2/docs/integrations/toolkits/pandas/", "Robocorp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/robocorp/", "MultiOn": "https://python.langchain.com/v0.2/docs/integrations/toolkits/multion/", "Amadeus": "https://python.langchain.com/v0.2/docs/integrations/toolkits/amadeus/", "OpenAPI": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi/", "Polygon IO Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/polygon/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "Hippo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hippo/", "Momento Vector Index (MVI)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/momento_vector_index/", "Neo4j Vector Index": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/neo4jvector/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "KDB.AI": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kdbai/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/", "OpenAI metadata tagger": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openai_metadata_tagger/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/", "Figma": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/figma/", "Browserbase": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/browserbase/", "Memgraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/memgraph/", "RDFLib": "https://python.langchain.com/v0.2/docs/integrations/graphs/rdflib_sparql/", "NebulaGraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/nebula_graph/", "HugeGraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/hugegraph/", "Diffbot": "https://python.langchain.com/v0.2/docs/integrations/graphs/diffbot/", "Ontotext GraphDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/ontotext/", "Apache AGE": "https://python.langchain.com/v0.2/docs/integrations/graphs/apache_age/", "Neo4j": "https://python.langchain.com/v0.2/docs/integrations/graphs/neo4j_cypher/", "ArangoDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/arangodb/", "Amazon Neptune with Cypher": "https://python.langchain.com/v0.2/docs/integrations/graphs/amazon_neptune_open_cypher/", "Kuzu": "https://python.langchain.com/v0.2/docs/integrations/graphs/kuzu_db/", "FalkorDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/falkordb/", "Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/", "Classify Text into Labels": "https://python.langchain.com/v0.2/docs/tutorials/classification/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/", "Build a Simple LLM Application": "https://python.langchain.com/v0.2/docs/tutorials/llm_chain/", "Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/", "Build a Question Answering application over a Graph Database": "https://python.langchain.com/v0.2/docs/tutorials/graph/"}, "SystemMessage": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/v0.2/docs/langserve/", "How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/", "How to compose prompts together": "https://python.langchain.com/v0.2/docs/how_to/prompts_composition/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "solar.md": "https://python.langchain.com/v0.2/docs/integrations/chat/solar/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "ChatFireworks": "https://python.langchain.com/v0.2/docs/integrations/chat/fireworks/", "ChatOctoAI": "https://python.langchain.com/v0.2/docs/integrations/chat/octoai/", "LlamaEdge": "https://python.langchain.com/v0.2/docs/integrations/chat/llama_edge/", "Google AI chat models": "https://python.langchain.com/v0.2/docs/integrations/chat/google_generative_ai/", "ChatKonko": "https://python.langchain.com/v0.2/docs/integrations/chat/konko/", "GigaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/gigachat/", "JinaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/jinachat/", "ChatEverlyAI": "https://python.langchain.com/v0.2/docs/integrations/chat/everlyai/", "ChatFriendli": "https://python.langchain.com/v0.2/docs/integrations/chat/friendli/", "ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/", "Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/", "vLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/vllm/", "Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/chat/yuan2/", "ChatTongyi": "https://python.langchain.com/v0.2/docs/integrations/chat/tongyi/", "MoonshotChat": "https://python.langchain.com/v0.2/docs/integrations/chat/moonshot/", "ChatPremAI": "https://python.langchain.com/v0.2/docs/integrations/chat/premai/", "ChatAnyscale": "https://python.langchain.com/v0.2/docs/integrations/chat/anyscale/", "ChatYandexGPT": "https://python.langchain.com/v0.2/docs/integrations/chat/yandex/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Context": "https://python.langchain.com/v0.2/docs/integrations/callbacks/context/", "Label Studio": "https://python.langchain.com/v0.2/docs/integrations/callbacks/labelstudio/", "Trubrics": "https://python.langchain.com/v0.2/docs/integrations/callbacks/trubrics/", "MLflow Deployments for LLMs": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow/", "MLflow AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_ai_gateway/", "PremAI": "https://python.langchain.com/v0.2/docs/integrations/providers/premai/", "Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Robocorp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/robocorp/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/v0.2/docs/integrations/llms/javelin/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/", "Build a Simple LLM Application": "https://python.langchain.com/v0.2/docs/tutorials/llm_chain/"}, "HumanMessage": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/v0.2/docs/langserve/", "Conceptual guide": "https://python.langchain.com/v0.2/docs/concepts/", "Build an Agent": "https://python.langchain.com/v0.2/docs/tutorials/agents/", "How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to use callbacks in async environments": "https://python.langchain.com/v0.2/docs/how_to/callbacks_async/", "How to do tool/function calling": "https://python.langchain.com/v0.2/docs/how_to/function_calling/", "How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to pass multimodal data directly to models": "https://python.langchain.com/v0.2/docs/how_to/multimodal_inputs/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling", "How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/", "How to convert tools to OpenAI Functions": "https://python.langchain.com/v0.2/docs/how_to/tools_as_openai_functions/", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/v0.2/docs/how_to/message_history/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How to return structured data from a model": "https://python.langchain.com/v0.2/docs/how_to/structured_output/", "How to compose prompts together": "https://python.langchain.com/v0.2/docs/how_to/prompts_composition/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "WeChat": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/wechat/", "Discord": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/discord/", "Zep Open Source": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_memorystore/", "Zep Cloud": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_cloud_memorystore/", "Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Imagen": "https://python.langchain.com/v0.2/docs/integrations/tools/google_imagen/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/", "solar.md": "https://python.langchain.com/v0.2/docs/integrations/chat/solar/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "AzureMLChatOnlineEndpoint": "https://python.langchain.com/v0.2/docs/integrations/chat/azureml_chat_endpoint/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/v0.2/docs/integrations/chat/alibaba_cloud_pai_eas/", "Chat with Coze Bot": "https://python.langchain.com/v0.2/docs/integrations/chat/coze/", "ChatFireworks": "https://python.langchain.com/v0.2/docs/integrations/chat/fireworks/", "ChatOctoAI": "https://python.langchain.com/v0.2/docs/integrations/chat/octoai/", "DeepInfra": "https://python.langchain.com/v0.2/docs/integrations/chat/deepinfra/", "ChatAnthropic": "https://python.langchain.com/v0.2/docs/integrations/chat/anthropic/", "ChatLiteLLM": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm/", "LlamaEdge": "https://python.langchain.com/v0.2/docs/integrations/chat/llama_edge/", "Google AI chat models": "https://python.langchain.com/v0.2/docs/integrations/chat/google_generative_ai/", "OllamaFunctions": "https://python.langchain.com/v0.2/docs/integrations/chat/ollama_functions/", "VolcEngineMaasChat": "https://python.langchain.com/v0.2/docs/integrations/chat/volcengine_maas/", "ChatKonko": "https://python.langchain.com/v0.2/docs/integrations/chat/konko/", "ChatVertexAI": "https://python.langchain.com/v0.2/docs/integrations/chat/google_vertex_ai_palm/", "ChatBedrock": "https://python.langchain.com/v0.2/docs/integrations/chat/bedrock/", "MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/", "GigaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/gigachat/", "JinaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/jinachat/", "ChatOllama": "https://python.langchain.com/v0.2/docs/integrations/chat/ollama/", "AzureChatOpenAI": "https://python.langchain.com/v0.2/docs/integrations/chat/azure_chat_openai/", "ChatEverlyAI": "https://python.langchain.com/v0.2/docs/integrations/chat/everlyai/", "GPTRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/gpt_router/", "ChatLiteLLMRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm_router/", "ChatFriendli": "https://python.langchain.com/v0.2/docs/integrations/chat/friendli/", "MistralAI": "https://python.langchain.com/v0.2/docs/integrations/chat/mistralai/", "ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/", "Chat with Baichuan-192K": "https://python.langchain.com/v0.2/docs/integrations/chat/baichuan/", "QianfanChatEndpoint": "https://python.langchain.com/v0.2/docs/integrations/chat/baidu_qianfan_endpoint/", "Cohere": "https://python.langchain.com/v0.2/docs/integrations/llms/cohere/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/chat/edenai/", "ErnieBotChat": "https://python.langchain.com/v0.2/docs/integrations/chat/ernie/", "vLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/vllm/", "Tencent Hunyuan": "https://python.langchain.com/v0.2/docs/integrations/chat/tencent_hunyuan/", "MiniMaxChat": "https://python.langchain.com/v0.2/docs/integrations/chat/minimax/", "Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/chat/yuan2/", "ChatTongyi": "https://python.langchain.com/v0.2/docs/integrations/chat/tongyi/", "PromptLayerChatOpenAI": "https://python.langchain.com/v0.2/docs/integrations/chat/promptlayer_chatopenai/", "SparkLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/sparkllm/", "MoonshotChat": "https://python.langchain.com/v0.2/docs/integrations/chat/moonshot/", "Dappier AI": "https://python.langchain.com/v0.2/docs/integrations/chat/dappier/", "Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/", "ChatPremAI": "https://python.langchain.com/v0.2/docs/integrations/chat/premai/", "ChatAnyscale": "https://python.langchain.com/v0.2/docs/integrations/chat/anyscale/", "ChatYandexGPT": "https://python.langchain.com/v0.2/docs/integrations/chat/yandex/", "NVIDIA NIMs": "https://python.langchain.com/v0.2/docs/integrations/chat/nvidia_ai_endpoints/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Context": "https://python.langchain.com/v0.2/docs/integrations/callbacks/context/", "Label Studio": "https://python.langchain.com/v0.2/docs/integrations/callbacks/labelstudio/", "PromptLayer": "https://python.langchain.com/v0.2/docs/integrations/callbacks/promptlayer/", "Trubrics": "https://python.langchain.com/v0.2/docs/integrations/callbacks/trubrics/", "Log10": "https://python.langchain.com/v0.2/docs/integrations/providers/log10/", "MLflow Deployments for LLMs": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow/", "MLflow AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_ai_gateway/", "-> content='Hello! How can I assist you today?'": "https://python.langchain.com/v0.2/docs/integrations/providers/databricks/", "Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/", "PremAI": "https://python.langchain.com/v0.2/docs/integrations/providers/premai/", "Arthur": "https://python.langchain.com/v0.2/docs/integrations/providers/arthur_tracking/", "Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "Browserbase": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/browserbase/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/", "Databricks": "https://python.langchain.com/v0.2/docs/integrations/llms/databricks/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/v0.2/docs/integrations/llms/javelin/", "Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/", "Chat Bot Feedback Template": "https://python.langchain.com/v0.2/docs/templates/chat-bot-feedback/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/", "Build a Simple LLM Application": "https://python.langchain.com/v0.2/docs/tutorials/llm_chain/"}, "RunnableMap": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/v0.2/docs/langserve/"}, "RunnableLambda": {"\ud83e\udd9c\ufe0f\ud83c\udfd3 LangServe": "https://python.langchain.com/v0.2/docs/langserve/", "How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/", "How to run custom functions": "https://python.langchain.com/v0.2/docs/how_to/functions/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_summary/", "Vector stores and retrievers": "https://python.langchain.com/v0.2/docs/tutorials/retrievers/"}, "PromptTemplate": {"Conceptual guide": "https://python.langchain.com/v0.2/docs/concepts/", "How to better prompt when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_prompting/", "How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/v0.2/docs/how_to/output_parser_structured/", "How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/", "How to select examples by n-gram overlap": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_ngram/", "How to select examples by length": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_length_based/", "How to use example selectors": "https://python.langchain.com/v0.2/docs/how_to/example_selectors/", "How to use few shot examples": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples/", "How to select examples by similarity": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_similarity/", "How to parse XML output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_xml/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/v0.2/docs/how_to/long_context_reorder/", "How to add fallbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/fallbacks/", "Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "How to configure runtime chain internals": "https://python.langchain.com/v0.2/docs/how_to/configure/", "How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/", "How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/", "How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "How to parse YAML output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_yaml/", "How to compose prompts together": "https://python.langchain.com/v0.2/docs/how_to/prompts_composition/", "How to partially format prompt templates": "https://python.langchain.com/v0.2/docs/how_to/prompts_partial/", "How to parse JSON output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_json/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_mmr/", "How to track token usage for LLMs": "https://python.langchain.com/v0.2/docs/how_to/llm_token_usage_tracking/", "Clarifai": "https://python.langchain.com/v0.2/docs/integrations/llms/clarifai/", "RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/", "Google Drive": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_drive/", "Milvus Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/milvus_hybrid_search/", "Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/", "NVIDIA Riva: ASR and TTS": "https://python.langchain.com/v0.2/docs/integrations/tools/nvidia_riva/", "Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/", "Dall-E Image Generator": "https://python.langchain.com/v0.2/docs/integrations/tools/dalle_image_generator/", "Mot\u00f6rhead": "https://python.langchain.com/v0.2/docs/integrations/memory/motorhead_memory/", "OllamaFunctions": "https://python.langchain.com/v0.2/docs/integrations/chat/ollama_functions/", "Context": "https://python.langchain.com/v0.2/docs/integrations/callbacks/context/", "SageMaker Tracking": "https://python.langchain.com/v0.2/docs/integrations/callbacks/sagemaker_tracking/", "Argilla": "https://python.langchain.com/v0.2/docs/integrations/callbacks/argilla/", "DSPy": "https://python.langchain.com/v0.2/docs/integrations/providers/dspy/", "Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/", "MLflow AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_ai_gateway/", "Rebuff": "https://python.langchain.com/v0.2/docs/integrations/providers/rebuff/", "Prediction Guard": "https://python.langchain.com/v0.2/docs/integrations/llms/predictionguard/", "MLflow": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_tracking/", "Shale Protocol": "https://python.langchain.com/v0.2/docs/integrations/providers/shaleprotocol/", "Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/", "Ray Serve": "https://python.langchain.com/v0.2/docs/integrations/providers/ray_serve/", "Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "Amazon Document DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/documentdb/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/mongodb_atlas/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "AirbyteLoader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte/", "Memgraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/memgraph/", "Apache AGE": "https://python.langchain.com/v0.2/docs/integrations/graphs/apache_age/", "Neo4j": "https://python.langchain.com/v0.2/docs/integrations/graphs/neo4j_cypher/", "Baseten": "https://python.langchain.com/v0.2/docs/integrations/llms/baseten/", "StochasticAI": "https://python.langchain.com/v0.2/docs/integrations/llms/stochasticai/", "Solar": "https://python.langchain.com/v0.2/docs/integrations/llms/solar/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/", "IPEX-LLM": "https://python.langchain.com/v0.2/docs/integrations/llms/ipex_llm/", "Banana": "https://python.langchain.com/v0.2/docs/integrations/llms/banana/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/v0.2/docs/integrations/llms/alibabacloud_pai_eas_endpoint/", "OpenLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/openllm/", "SageMakerEndpoint": "https://python.langchain.com/v0.2/docs/integrations/llms/sagemaker/", "Fireworks": "https://python.langchain.com/v0.2/docs/integrations/llms/fireworks/", "OctoAI": "https://python.langchain.com/v0.2/docs/integrations/llms/octoai/", "Writer": "https://python.langchain.com/v0.2/docs/integrations/llms/writer/", "Modal": "https://python.langchain.com/v0.2/docs/integrations/llms/modal/", "TextGen": "https://python.langchain.com/v0.2/docs/integrations/llms/textgen/", "Xorbits Inference (Xinference)": "https://python.langchain.com/v0.2/docs/integrations/llms/xinference/", "Nebula (Symbl.ai)": "https://python.langchain.com/v0.2/docs/integrations/llms/symblai_nebula/", "DeepInfra": "https://python.langchain.com/v0.2/docs/integrations/llms/deepinfra/", "AnthropicLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/anthropic/", "NLP Cloud": "https://python.langchain.com/v0.2/docs/integrations/llms/nlpcloud/", "GPT4All": "https://python.langchain.com/v0.2/docs/integrations/llms/gpt4all/", "ForefrontAI": "https://python.langchain.com/v0.2/docs/integrations/llms/forefrontai/", "MosaicML": "https://python.langchain.com/v0.2/docs/integrations/llms/mosaicml/", "Volc Engine Maas": "https://python.langchain.com/v0.2/docs/integrations/llms/volcengine_maas/", "CerebriumAI": "https://python.langchain.com/v0.2/docs/integrations/llms/cerebriumai/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/llms/openai/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/", "Predibase": "https://python.langchain.com/v0.2/docs/integrations/llms/predibase/", "GigaChat": "https://python.langchain.com/v0.2/docs/integrations/llms/gigachat/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_generative_ai/", "Llama.cpp": "https://python.langchain.com/v0.2/docs/integrations/llms/llamacpp/", "Hugging Face Local Pipelines": "https://python.langchain.com/v0.2/docs/integrations/llms/huggingface_pipelines/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/", "Titan Takeoff": "https://python.langchain.com/v0.2/docs/integrations/llms/titan_takeoff/", "Aphrodite Engine": "https://python.langchain.com/v0.2/docs/integrations/llms/aphrodite/", "AI21LLM": "https://python.langchain.com/v0.2/docs/integrations/llms/ai21/", "Cohere": "https://python.langchain.com/v0.2/docs/integrations/llms/cohere/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/llms/edenai/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/v0.2/docs/integrations/llms/javelin/", "IBM watsonx.ai": "https://python.langchain.com/v0.2/docs/integrations/llms/ibm_watsonx/", "C Transformers": "https://python.langchain.com/v0.2/docs/integrations/llms/ctransformers/", "vLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/vllm/", "Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/", "Manifest": "https://python.langchain.com/v0.2/docs/integrations/llms/manifest/", "ExLlamaV2": "https://python.langchain.com/v0.2/docs/integrations/llms/exllamav2/", "Minimax": "https://python.langchain.com/v0.2/docs/integrations/llms/minimax/", "Tongyi Qwen": "https://python.langchain.com/v0.2/docs/integrations/llms/tongyi/", "Huggingface Endpoints": "https://python.langchain.com/v0.2/docs/integrations/llms/huggingface_endpoint/", "MLX Local Pipelines": "https://python.langchain.com/v0.2/docs/integrations/llms/mlx_pipelines/", "Runhouse": "https://python.langchain.com/v0.2/docs/integrations/llms/runhouse/", "Anyscale": "https://python.langchain.com/v0.2/docs/integrations/llms/anyscale/", "YandexGPT": "https://python.langchain.com/v0.2/docs/integrations/llms/yandex/", "GooseAI": "https://python.langchain.com/v0.2/docs/integrations/llms/gooseai/", "OpenLM": "https://python.langchain.com/v0.2/docs/integrations/llms/openlm/", "Aleph Alpha": "https://python.langchain.com/v0.2/docs/integrations/llms/aleph_alpha/", "Cloudflare Workers AI": "https://python.langchain.com/v0.2/docs/integrations/llms/cloudflare_workersai/", "CTranslate2": "https://python.langchain.com/v0.2/docs/integrations/llms/ctranslate2/", "Google AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_ai/", "PipelineAI": "https://python.langchain.com/v0.2/docs/integrations/llms/pipelineai/", "ChatGLM": "https://python.langchain.com/v0.2/docs/integrations/llms/chatglm/", "Gradient": "https://python.langchain.com/v0.2/docs/integrations/llms/gradient/", "Petals": "https://python.langchain.com/v0.2/docs/integrations/llms/petals/", "OpenVINO": "https://python.langchain.com/v0.2/docs/integrations/llms/openvino/", "Intel Weight-Only Quantization": "https://python.langchain.com/v0.2/docs/integrations/llms/weight_only_quantization/", "Replicate": "https://python.langchain.com/v0.2/docs/integrations/llms/replicate/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/", "Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/", "Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "MessagesPlaceholder": {"Conceptual guide": "https://python.langchain.com/v0.2/docs/concepts/", "How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/v0.2/docs/how_to/message_history/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/memory/redis_chat_message_history/", "Google SQL for MySQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mysql/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_alloydb/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/aws_dynamodb/", "MongoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/mongodb_chat_message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/v0.2/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/memory/streamlit_chat_message_history/", "Google El Carro Oracle": "https://python.langchain.com/v0.2/docs/integrations/memory/google_el_carro/", "SQLite": "https://python.langchain.com/v0.2/docs/integrations/memory/sqlite/", "Google SQL for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_pg/", "Google SQL for SQL Server": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mssql/", "TiDB": "https://python.langchain.com/v0.2/docs/integrations/memory/tidb_chat_message_history/", "Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/", "Build an Extraction Chain": "https://python.langchain.com/v0.2/docs/tutorials/extraction/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "CSVLoader": {"Conceptual guide": "https://python.langchain.com/v0.2/docs/concepts/", "How to load CSVs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_csv/", "ChatGPT plugin": "https://python.langchain.com/v0.2/docs/integrations/retrievers/chatgpt-plugin/", "Aerospike": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/aerospike/", "CSV": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/csv/", "Pebblo Safe DocumentLoader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/pebblo/"}, "BaseChatModel": {"Contribute Integrations": "https://python.langchain.com/v0.2/docs/contributing/integrations/", "How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "deprecated": {"Contribute Integrations": "https://python.langchain.com/v0.2/docs/contributing/integrations/"}, "UnstructuredMarkdownLoader": {"langchain": "https://python.langchain.com/v0.2/docs/changes/changelog/langchain/", "How to load Markdown": "https://python.langchain.com/v0.2/docs/how_to/document_loader_markdown/", "Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/", "StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/"}, "TavilySearchResults": {"Build an Agent": "https://python.langchain.com/v0.2/docs/tutorials/agents/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to debug your LLM apps": "https://python.langchain.com/v0.2/docs/how_to/debugging/", "Tavily Search": "https://python.langchain.com/v0.2/docs/integrations/tools/tavily_search/", "ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/", "Cohere": "https://python.langchain.com/v0.2/docs/integrations/providers/cohere/"}, "WebBaseLoader": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/", "RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/", "Infino": "https://python.langchain.com/v0.2/docs/integrations/callbacks/infino/", "Zep Cloud": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zep_cloud/", "Zep": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zep/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Merge Documents Loader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/merge_doc/", "WebBaseLoader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/web_base/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/", "Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "FAISS": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "How to better prompt when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_prompting/", "How to add values to a chain's state": "https://python.langchain.com/v0.2/docs/how_to/assign/", "How to inspect runnables": "https://python.langchain.com/v0.2/docs/how_to/inspect/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_large_db/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/v0.2/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/v0.2/docs/how_to/passthrough/", "How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "How to use a time-weighted vector store retriever": "https://python.langchain.com/v0.2/docs/how_to/time_weighted_vectorstore/", "How to create and query vector stores": "https://python.langchain.com/v0.2/docs/how_to/vectorstores/", "How to use a vectorstore as a retriever": "https://python.langchain.com/v0.2/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/v0.2/docs/how_to/caching_embeddings/", "How to combine results from multiple retrievers": "https://python.langchain.com/v0.2/docs/how_to/ensemble_retriever/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_mmr/", "NVIDIA NIMs ": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/nvidia_ai_endpoints/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere-reranker/", "FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/providers/ragatouille/", "Facebook - Meta": "https://python.langchain.com/v0.2/docs/integrations/providers/facebook/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Faiss (Async)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss_async/", "Faiss": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss/", "VoyageAI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/", "OpenVINO Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openvino_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_generative_ai/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/"}, "OpenAIEmbeddings": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "How to better prompt when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_prompting/", "How to add values to a chain's state": "https://python.langchain.com/v0.2/docs/how_to/assign/", "How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/", "How to do per-user retrieval": "https://python.langchain.com/v0.2/docs/how_to/qa_per_user/", "How to use few shot examples": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples/", "How to inspect runnables": "https://python.langchain.com/v0.2/docs/how_to/inspect/", "How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to use few shot examples in chat models": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples_chat/", "How to select examples by similarity": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_similarity/", "Text embedding models": "https://python.langchain.com/v0.2/docs/how_to/embed_text/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_large_db/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to use the LangChain indexing API": "https://python.langchain.com/v0.2/docs/how_to/indexing/", "How to split text based on semantic similarity": "https://python.langchain.com/v0.2/docs/how_to/semantic-chunker/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/v0.2/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/v0.2/docs/how_to/passthrough/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "How to use a time-weighted vector store retriever": "https://python.langchain.com/v0.2/docs/how_to/time_weighted_vectorstore/", "How to create and query vector stores": "https://python.langchain.com/v0.2/docs/how_to/vectorstores/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/", "How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "How to use the Parent Document Retriever": "https://python.langchain.com/v0.2/docs/how_to/parent_document_retriever/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_high_cardinality/", "How to use a vectorstore as a retriever": "https://python.langchain.com/v0.2/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/v0.2/docs/how_to/caching_embeddings/", "How to combine results from multiple retrievers": "https://python.langchain.com/v0.2/docs/how_to/ensemble_retriever/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_mmr/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/", "Hybrid Search": "https://python.langchain.com/v0.2/docs/how_to/hybrid/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/", "Azure OpenAI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/azureopenai/", "Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azuresearch/", "RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kinetica/", "JaguarDB Vector Database": "https://python.langchain.com/v0.2/docs/integrations/retrievers/jaguar/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/", "SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/singlestoredb/", "kNN": "https://python.langchain.com/v0.2/docs/integrations/retrievers/knn/", "DocArray": "https://python.langchain.com/v0.2/docs/integrations/retrievers/docarray_retriever/", "SVM": "https://python.langchain.com/v0.2/docs/integrations/retrievers/svm/", "Pinecone Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/pinecone_hybrid_search/", "Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "Milvus Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/milvus_hybrid_search/", "FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/", "Milvus": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/milvus/", "PGVector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/databricks_vector_search/", "DingoDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dingo/", "OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/opensearch/", "Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/elasticsearch/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/chroma/", "Timescale Vector (Postgres) ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/supabase/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/redis/", "MyScale": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/myscale/", "Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/mongodb_atlas/", "Qdrant": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/qdrant/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/xata/", "Confident": "https://python.langchain.com/v0.2/docs/integrations/callbacks/confident/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/providers/ragatouille/", "Upstash Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/upstash/", "Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Cassandra": "https://python.langchain.com/v0.2/docs/integrations/stores/cassandra/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "LanceDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lancedb/", "Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/", "Kinetica Vectorstore API": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kinetica/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "Hippo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hippo/", "Rockset": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/rockset/", "Zilliz": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zilliz/", "Azure Cosmos DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azure_cosmos_db/", "viking DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vikingdb/", "Couchbase ": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/couchbase/", "Typesense": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/typesense/", "Momento Vector Index (MVI)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/momento_vector_index/", "TiDB Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tidb_vector/", "Activeloop Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/activeloop_deeplake/", "Neo4j Vector Index": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lantern/", "DuckDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/duckdb/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/alibabacloud_opensearch/", "StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/", "scikit-learn": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sklearn/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/", "DocArray HnswSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_hnsw/", "ClickHouse": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/clickhouse/", "Tigris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tigris/", "China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/ecloud_vector_search/", "Faiss (Async)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss_async/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "USearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/usearch/", "KDB.AI": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kdbai/", "DocArray InMemorySearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_in_memory/", "Postgres Embedding": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgembedding/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Faiss": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss/", "Epsilla": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/epsilla/", "Amazon Document DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/documentdb/", "AnalyticDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/analyticdb/", "Hologres": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hologres/", "Meilisearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/meilisearch/", "RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/", "Psychic": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/psychic/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/", "Vector stores and retrievers": "https://python.langchain.com/v0.2/docs/tutorials/retrievers/"}, "RecursiveCharacterTextSplitter": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to split code": "https://python.langchain.com/v0.2/docs/how_to/code_splitter/", "How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to recursively split text by characters": "https://python.langchain.com/v0.2/docs/how_to/recursive_text_splitter/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "How to split text by tokens ": "https://python.langchain.com/v0.2/docs/how_to/split_by_token/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/", "How to use the Parent Document Retriever": "https://python.langchain.com/v0.2/docs/how_to/parent_document_retriever/", "How to split Markdown by Headers": "https://python.langchain.com/v0.2/docs/how_to/markdown_header_metadata_splitter/", "How to split by HTML header ": "https://python.langchain.com/v0.2/docs/how_to/HTML_header_metadata_splitter/", "How to split by HTML sections": "https://python.langchain.com/v0.2/docs/how_to/HTML_section_aware_splitter/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/", "LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere-reranker/", "Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/providers/ragatouille/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Google Vertex AI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "viking DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vikingdb/", "Zep Cloud": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zep_cloud/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "Zep": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zep/", "Vearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vearch/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/mongodb_atlas/", "VoyageAI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/", "OpenVINO Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openvino_rerank/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/", "Source Code": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/source_code/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/"}, "create_retriever_tool": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/memory/xata_chat_message_history/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/"}, "create_tool_calling_agent": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to use tools in a chain": "https://python.langchain.com/v0.2/docs/how_to/tools_chain/", "How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/", "How to debug your LLM apps": "https://python.langchain.com/v0.2/docs/how_to/debugging/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "Azure Container Apps dynamic sessions": "https://python.langchain.com/v0.2/docs/integrations/tools/azure_dynamic_sessions/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "AgentExecutor": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to use tools in a chain": "https://python.langchain.com/v0.2/docs/how_to/tools_chain/", "How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to debug your LLM apps": "https://python.langchain.com/v0.2/docs/how_to/debugging/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "Tavily Search": "https://python.langchain.com/v0.2/docs/integrations/tools/tavily_search/", "Infobip": "https://python.langchain.com/v0.2/docs/integrations/tools/infobip/", "AskNews": "https://python.langchain.com/v0.2/docs/integrations/tools/asknews/", "Azure Container Apps dynamic sessions": "https://python.langchain.com/v0.2/docs/integrations/tools/azure_dynamic_sessions/", "Semantic Scholar API Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/semanticscholar/", "Passio NutritionAI": "https://python.langchain.com/v0.2/docs/integrations/tools/passio_nutrition_ai/", "Memorize": "https://python.langchain.com/v0.2/docs/integrations/tools/memorize/", "ArXiv": "https://python.langchain.com/v0.2/docs/integrations/tools/arxiv/", "Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/", "You.com Search": "https://python.langchain.com/v0.2/docs/integrations/tools/you/", "Ionic Shopping Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/ionic_shopping/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/", "ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/callbacks/streamlit/", "Cohere": "https://python.langchain.com/v0.2/docs/integrations/providers/cohere/", "Dataherald": "https://python.langchain.com/v0.2/docs/integrations/providers/dataherald/", "Log, Trace, and Monitor": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/index/", "Python": "https://python.langchain.com/v0.2/docs/integrations/toolkits/python/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Gmail": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gmail/", "Slack": "https://python.langchain.com/v0.2/docs/integrations/toolkits/slack/", "Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/", "Robocorp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/robocorp/", "MultiOn": "https://python.langchain.com/v0.2/docs/integrations/toolkits/multion/", "Amadeus": "https://python.langchain.com/v0.2/docs/integrations/toolkits/amadeus/", "Azure AI Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_ai_services/", "Polygon IO Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/polygon/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "AIMessage": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to do tool/function calling": "https://python.langchain.com/v0.2/docs/how_to/function_calling/", "How to add a human-in-the-loop for tools": "https://python.langchain.com/v0.2/docs/how_to/tools_human/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_parse/", "How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling", "How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How to return structured data from a model": "https://python.langchain.com/v0.2/docs/how_to/structured_output/", "How to compose prompts together": "https://python.langchain.com/v0.2/docs/how_to/prompts_composition/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "Twitter (via Apify)": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/twitter/", "Zep Open Source": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_memorystore/", "Zep Cloud": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_cloud_memorystore/", "Google Imagen": "https://python.langchain.com/v0.2/docs/integrations/tools/google_imagen/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/", "ChatAnthropic": "https://python.langchain.com/v0.2/docs/integrations/chat/anthropic/", "ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/", "Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/chat/yuan2/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/", "ChatGLM": "https://python.langchain.com/v0.2/docs/integrations/llms/chatglm/", "Chat Bot Feedback Template": "https://python.langchain.com/v0.2/docs/templates/chat-bot-feedback/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "ChatMessageHistory": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "BaseChatMessageHistory": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "RunnableWithMessageHistory": {"Build an Agent": "https://python.langchain.com/v0.2/docs/how_to/agent_executor/", "How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add message history": "https://python.langchain.com/v0.2/docs/how_to/message_history/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/memory/redis_chat_message_history/", "Google SQL for MySQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mysql/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_alloydb/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "AWS DynamoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/aws_dynamodb/", "MongoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/mongodb_chat_message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/v0.2/docs/integrations/memory/sql_chat_message_history/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/memory/streamlit_chat_message_history/", "Google El Carro Oracle": "https://python.langchain.com/v0.2/docs/integrations/memory/google_el_carro/", "SQLite": "https://python.langchain.com/v0.2/docs/integrations/memory/sqlite/", "Google SQL for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_pg/", "Google SQL for SQL Server": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mssql/", "TiDB": "https://python.langchain.com/v0.2/docs/integrations/memory/tidb_chat_message_history/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "Neo4jGraph": {"How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to map values to a graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_mapping/", "How to construct knowledge graphs": "https://python.langchain.com/v0.2/docs/how_to/graph_constructing/", "How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "Neo4j": "https://python.langchain.com/v0.2/docs/integrations/graphs/neo4j_cypher/", "Diffbot": "https://python.langchain.com/v0.2/docs/integrations/graphs/diffbot/", "Build a Question Answering application over a Graph Database": "https://python.langchain.com/v0.2/docs/tutorials/graph/"}, "AsyncCallbackManagerForToolRun": {"How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to create custom tools": "https://python.langchain.com/v0.2/docs/how_to/custom_tools/"}, "CallbackManagerForToolRun": {"How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to create custom tools": "https://python.langchain.com/v0.2/docs/how_to/custom_tools/"}, "BaseTool": {"How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to create custom tools": "https://python.langchain.com/v0.2/docs/how_to/custom_tools/"}, "format_to_openai_function_messages": {"How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/"}, "OpenAIFunctionsAgentOutputParser": {"How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/"}, "convert_to_openai_function": {"How to add a semantic layer over graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_semantic/", "How to convert tools to OpenAI Functions": "https://python.langchain.com/v0.2/docs/how_to/tools_as_openai_functions/"}, "BSHTMLLoader": {"How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to load HTML": "https://python.langchain.com/v0.2/docs/how_to/document_loader_html/"}, "TokenTextSplitter": {"How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to split text by tokens ": "https://python.langchain.com/v0.2/docs/how_to/split_by_token/", "Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/azure_ai_search/", "Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/", "StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/"}, "Document": {"How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "How to create a custom Document Loader": "https://python.langchain.com/v0.2/docs/how_to/document_loader_custom/", "How to use the LangChain indexing API": "https://python.langchain.com/v0.2/docs/how_to/indexing/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to create a custom Retriever": "https://python.langchain.com/v0.2/docs/how_to/custom_retriever/", "How to construct knowledge graphs": "https://python.langchain.com/v0.2/docs/how_to/graph_constructing/", "How to use a time-weighted vector store retriever": "https://python.langchain.com/v0.2/docs/how_to/time_weighted_vectorstore/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "How to load Markdown": "https://python.langchain.com/v0.2/docs/how_to/document_loader_markdown/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Oracle AI Vector Search: Generate Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/oracleai/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kinetica/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "ChatGPT plugin": "https://python.langchain.com/v0.2/docs/integrations/retrievers/chatgpt-plugin/", "Cohere RAG": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere/", "Weaviate Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/weaviate-hybrid/", "BM25": "https://python.langchain.com/v0.2/docs/integrations/retrievers/bm25/", "Qdrant Sparse Vector": "https://python.langchain.com/v0.2/docs/integrations/retrievers/qdrant-sparse/", "Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/elasticsearch/", "TF-IDF": "https://python.langchain.com/v0.2/docs/integrations/retrievers/tf_idf/", "Milvus": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/milvus/", "PGVector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/weaviate_self_query/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "DashVector": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dashvector/", "Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/opensearch_self_query/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/chroma_self_query/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/", "Timescale Vector (Postgres) ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/redis_self_query/", "MyScale": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/myscale_self_query/", "Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/mongodb_atlas/", "Qdrant": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/qdrant_self_query/", "Oracle AI Vector Search: Generate Summary": "https://python.langchain.com/v0.2/docs/integrations/tools/oracleai/", "Apify": "https://python.langchain.com/v0.2/docs/integrations/tools/apify/", "Cohere": "https://python.langchain.com/v0.2/docs/integrations/providers/cohere/", "Kinetica Vectorstore API": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kinetica/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "PGVector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgvector/", "SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/singlestoredb/", "Annoy": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/annoy/", "Oracle AI Vector Search: Vector Store": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/oracle/", "Neo4j Vector Index": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lantern/", "Google Firestore (Native Mode)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_firestore/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Faiss (Async)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss_async/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "PGVecto.rs": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgvecto_rs/", "Postgres Embedding": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgembedding/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Faiss": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss/", "Nuclia": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/nuclia_transformer/", "AI21SemanticTextSplitter": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/ai21_semantic_text_splitter/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "OpenAI metadata tagger": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openai_metadata_tagger/", "Doctran: extract properties": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/doctran_extract_properties/", "Google Translate": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_translate/", "Doctran: interrogate documents": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/doctran_interrogate_document/", "Doctran: language translation": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/doctran_translate_document/", "TensorFlow Datasets": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/tensorflow_datasets/", "Google Cloud SQL for MySQL": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_cloud_sql_mysql/", "Airbyte Salesforce (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_salesforce/", "Airbyte CDK (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_cdk/", "Airbyte Stripe (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_stripe/", "Copy Paste": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/copypaste/", "Airbyte Typeform (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_typeform/", "Apify Dataset": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/apify_dataset/", "Google Firestore in Datastore Mode": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_datastore/", "Oracle AI Vector Search: Document Processing": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/oracleai/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/", "Airbyte Hubspot (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_hubspot/", "Airbyte Gong (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_gong/", "Google Memorystore for Redis": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_memorystore_redis/", "Google Bigtable": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_bigtable/", "Google Cloud SQL for SQL server": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_cloud_sql_mssql/", "Google El Carro for Oracle Workloads": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_el_carro/", "Airbyte Shopify (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_shopify/", "Airbyte Zendesk Support (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_zendesk_support/", "Google Spanner": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_spanner/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/v0.2/docs/integrations/graphs/azure_cosmosdb_gremlin/", "SageMakerEndpoint": "https://python.langchain.com/v0.2/docs/integrations/llms/sagemaker/", "self-query-qdrant": "https://python.langchain.com/v0.2/docs/templates/self-query-qdrant/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/", "Vector stores and retrievers": "https://python.langchain.com/v0.2/docs/tutorials/retrievers/"}, "CharacterTextSplitter": {"How to handle long text when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_long_text/", "How to split by character": "https://python.langchain.com/v0.2/docs/how_to/character_text_splitter/", "How to use the LangChain indexing API": "https://python.langchain.com/v0.2/docs/how_to/indexing/", "How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "How to create and query vector stores": "https://python.langchain.com/v0.2/docs/how_to/vectorstores/", "How to split text by tokens ": "https://python.langchain.com/v0.2/docs/how_to/split_by_token/", "How to use a vectorstore as a retriever": "https://python.langchain.com/v0.2/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/v0.2/docs/how_to/caching_embeddings/", "Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azuresearch/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kinetica/", "JaguarDB Vector Database": "https://python.langchain.com/v0.2/docs/integrations/retrievers/jaguar/", "SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/singlestoredb/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/", "Confident": "https://python.langchain.com/v0.2/docs/integrations/callbacks/confident/", "Upstash Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/upstash/", "VDMS": "https://python.langchain.com/v0.2/docs/integrations/providers/vdms/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "LanceDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lancedb/", "Kinetica Vectorstore API": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kinetica/", "SQLite-VSS": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sqlitevss/", "Vald": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vald/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "DashVector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dashvector/", "Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/databricks_vector_search/", "ScaNN": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/scann/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/xata/", "Hippo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hippo/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vectara/", "Vespa": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vespa/", "Rockset": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/rockset/", "DingoDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dingo/", "Zilliz": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zilliz/", "Azure Cosmos DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azure_cosmos_db/", "Annoy": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/annoy/", "Couchbase ": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/couchbase/", "Typesense": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/typesense/", "Momento Vector Index (MVI)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/momento_vector_index/", "TiDB Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tidb_vector/", "Relyt": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/relyt/", "Activeloop Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/activeloop_deeplake/", "vlite": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vlite/", "Neo4j Vector Index": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lantern/", "Tair": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tair/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/chroma/", "DuckDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/duckdb/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/alibabacloud_opensearch/", "Clarifai": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/clarifai/", "scikit-learn": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sklearn/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/", "DocArray HnswSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_hnsw/", "MyScale": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/myscale/", "TileDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tiledb/", "ClickHouse": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/clickhouse/", "Google Memorystore for Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_memorystore_redis/", "Qdrant": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/qdrant/", "Tigris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tigris/", "China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/ecloud_vector_search/", "Bagel": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/bagel/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiducloud_vector_search/", "AwaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/awadb/", "Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/supabase/", "SurrealDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/surrealdb/", "OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/opensearch/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pinecone/", "Faiss (Async)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss_async/", "BagelDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/bageldb/", "ManticoreSearch VectorStore": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/manticore_search/", "USearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/usearch/", "Milvus": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/milvus/", "Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/elasticsearch/", "PGVecto.rs": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgvecto_rs/", "Marqo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/marqo/", "DocArray InMemorySearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_in_memory/", "Postgres Embedding": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgembedding/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vdms/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Faiss": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss/", "Epsilla": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/epsilla/", "Amazon Document DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/documentdb/", "SemaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/semadb/", "AnalyticDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/analyticdb/", "Hologres": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hologres/", "Baidu VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiduvectordb/", "Meilisearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/meilisearch/", "Psychic": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/psychic/", "Manifest": "https://python.langchain.com/v0.2/docs/integrations/llms/manifest/", "Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/"}, "PyPDFLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Google Vertex AI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "KDB.AI": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kdbai/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/mongodb_atlas/", "Merge Documents Loader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/merge_doc/", "Google Cloud Storage File": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_cloud_storage_file/"}, "PyMuPDFLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/"}, "MathpixPDFLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/"}, "UnstructuredPDFLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/"}, "OnlinePDFLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/"}, "PyPDFium2Loader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/"}, "PDFMinerLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/"}, "PDFMinerPDFasHTMLLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/"}, "PyPDFDirectoryLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/"}, "PDFPlumberLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/"}, "AmazonTextractPDFLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Amazon Textract ": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/amazon_textract/"}, "AzureAIDocumentIntelligenceLoader": {"How to load PDFs": "https://python.langchain.com/v0.2/docs/how_to/document_loader_pdf/", "How to load Microsoft Office files": "https://python.langchain.com/v0.2/docs/how_to/document_loader_office_file/", "Microsoft Word": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_word/", "Microsoft Excel": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_excel/", "Microsoft PowerPoint": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_powerpoint/", "Azure AI Document Intelligence": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/azure_document_intelligence/"}, "SQLDatabase": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_prompting/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_large_db/", "How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_query_checking/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "CnosDB": "https://python.langchain.com/v0.2/docs/integrations/providers/cnosdb/", "Rebuff": "https://python.langchain.com/v0.2/docs/integrations/providers/rebuff/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/"}, "create_sql_query_chain": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_prompting/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_large_db/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_query_checking/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/"}, "FewShotPromptTemplate": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_prompting/", "How to select examples by n-gram overlap": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_ngram/", "How to select examples by length": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_length_based/", "How to use example selectors": "https://python.langchain.com/v0.2/docs/how_to/example_selectors/", "How to use few shot examples": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples/", "How to select examples by similarity": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_similarity/", "How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_mmr/", "Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "SemanticSimilarityExampleSelector": {"How to better prompt when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_prompting/", "How to use few shot examples": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples/", "How to use few shot examples in chat models": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples_chat/", "How to select examples by similarity": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_similarity/", "How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_mmr/"}, "PydanticOutputParser": {"How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/v0.2/docs/how_to/output_parser_structured/", "How to use prompting alone (no tool calling) to do extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_parse/", "How to use the output-fixing parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_fixing/", "How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/", "How to return structured data from a model": "https://python.langchain.com/v0.2/docs/how_to/structured_output/", "Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "OpenAI": {"How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/v0.2/docs/how_to/output_parser_structured/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/v0.2/docs/how_to/long_context_reorder/", "How to add fallbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/fallbacks/", "How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/", "How to stream responses from an LLM": "https://python.langchain.com/v0.2/docs/how_to/streaming_llm/", "How to cache LLM responses": "https://python.langchain.com/v0.2/docs/how_to/llm_caching/", "How to track token usage for LLMs": "https://python.langchain.com/v0.2/docs/how_to/llm_token_usage_tracking/", "Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Milvus": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/milvus_self_query/", "PGVector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/opensearch_self_query/", "Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/elasticsearch_self_query/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/chroma_self_query/", "Timescale Vector (Postgres) ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/redis_self_query/", "Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/mongodb_atlas/", "Qdrant": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/qdrant_self_query/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/llms/openai/", "Google Jobs": "https://python.langchain.com/v0.2/docs/integrations/tools/google_jobs/", "Google Serper": "https://python.langchain.com/v0.2/docs/integrations/tools/google_serper/", "Human as a tool": "https://python.langchain.com/v0.2/docs/integrations/tools/human_tools/", "Google Finance": "https://python.langchain.com/v0.2/docs/integrations/tools/google_finance/", "AWS Lambda": "https://python.langchain.com/v0.2/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/v0.2/docs/integrations/tools/google_drive/", "OpenWeatherMap": "https://python.langchain.com/v0.2/docs/integrations/tools/openweathermap/", "Search Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/search_tools/", "Eleven Labs Text2Speech": "https://python.langchain.com/v0.2/docs/integrations/tools/eleven_labs_tts/", "Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/", "NVIDIA Riva: ASR and TTS": "https://python.langchain.com/v0.2/docs/integrations/tools/nvidia_riva/", "Lemon Agent": "https://python.langchain.com/v0.2/docs/integrations/tools/lemonai/", "GraphQL": "https://python.langchain.com/v0.2/docs/integrations/tools/graphql/", "SearchApi": "https://python.langchain.com/v0.2/docs/integrations/providers/searchapi/", "Gradio": "https://python.langchain.com/v0.2/docs/integrations/tools/gradio_tools/", "SceneXplain": "https://python.langchain.com/v0.2/docs/integrations/tools/sceneXplain/", "Dall-E Image Generator": "https://python.langchain.com/v0.2/docs/integrations/tools/dalle_image_generator/", "Ionic Shopping Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/ionic_shopping/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/", "Mot\u00f6rhead": "https://python.langchain.com/v0.2/docs/integrations/memory/motorhead_memory/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/", "Confident": "https://python.langchain.com/v0.2/docs/integrations/callbacks/confident/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Fiddler": "https://python.langchain.com/v0.2/docs/integrations/callbacks/fiddler/", "SageMaker Tracking": "https://python.langchain.com/v0.2/docs/integrations/callbacks/sagemaker_tracking/", "Label Studio": "https://python.langchain.com/v0.2/docs/integrations/callbacks/labelstudio/", "Comet Tracing": "https://python.langchain.com/v0.2/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/v0.2/docs/integrations/callbacks/argilla/", "PromptLayer": "https://python.langchain.com/v0.2/docs/integrations/callbacks/promptlayer/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/callbacks/streamlit/", "Trubrics": "https://python.langchain.com/v0.2/docs/integrations/callbacks/trubrics/", "Infino": "https://python.langchain.com/v0.2/docs/integrations/callbacks/infino/", "DSPy": "https://python.langchain.com/v0.2/docs/integrations/providers/dspy/", "Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/", "Log10": "https://python.langchain.com/v0.2/docs/integrations/providers/log10/", "LangChain Decorators \u2728": "https://python.langchain.com/v0.2/docs/integrations/providers/langchain_decorators/", "Rebuff": "https://python.langchain.com/v0.2/docs/integrations/providers/rebuff/", "MLflow": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_tracking/", "Serper - Google Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/google_serper/", "Helicone": "https://python.langchain.com/v0.2/docs/integrations/providers/helicone/", "Shale Protocol": "https://python.langchain.com/v0.2/docs/integrations/providers/shaleprotocol/", "WhyLabs": "https://python.langchain.com/v0.2/docs/integrations/providers/whylabs_profiling/", "WandB Tracing": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/v0.2/docs/integrations/providers/clearml_tracking/", "Ray Serve": "https://python.langchain.com/v0.2/docs/integrations/providers/ray_serve/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/", "CSV": "https://python.langchain.com/v0.2/docs/integrations/toolkits/csv/", "Xorbits": "https://python.langchain.com/v0.2/docs/integrations/toolkits/xorbits/", "Jira": "https://python.langchain.com/v0.2/docs/integrations/toolkits/jira/", "Spark Dataframe": "https://python.langchain.com/v0.2/docs/integrations/toolkits/spark/", "Azure Cognitive Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_cognitive_services/", "Natural Language APIs": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi_nla/", "Steam Game Recommendation & Game Details": "https://python.langchain.com/v0.2/docs/integrations/toolkits/steam/", "JSON": "https://python.langchain.com/v0.2/docs/integrations/toolkits/json/", "ClickUp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/clickup/", "Office365": "https://python.langchain.com/v0.2/docs/integrations/toolkits/office365/", "Pandas Dataframe": "https://python.langchain.com/v0.2/docs/integrations/toolkits/pandas/", "NASA": "https://python.langchain.com/v0.2/docs/integrations/toolkits/nasa/", "Azure AI Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_ai_services/", "OpenAPI": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi/", "Gitlab": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gitlab/", "Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/", "Marqo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/marqo/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Amazon Document DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/documentdb/", "VoyageAI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/voyageai-reranker/", "Psychic": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/psychic/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/", "Amazon Textract ": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/amazon_textract/", "NetworkX": "https://python.langchain.com/v0.2/docs/integrations/graphs/networkx/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/", "Layerup Security": "https://python.langchain.com/v0.2/docs/integrations/llms/layerup_security/", "Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "SimpleJsonOutputParser": {"How to use output parsers to parse an LLM response into structured format": "https://python.langchain.com/v0.2/docs/how_to/output_parser_structured/"}, "AsyncCallbackHandler": {"How to use callbacks in async environments": "https://python.langchain.com/v0.2/docs/how_to/callbacks_async/", "Bedrock": "https://python.langchain.com/v0.2/docs/integrations/llms/bedrock/"}, "BaseCallbackHandler": {"How to use callbacks in async environments": "https://python.langchain.com/v0.2/docs/how_to/callbacks_async/", "How to propagate callbacks constructor": "https://python.langchain.com/v0.2/docs/how_to/callbacks_constructor/", "How to attach callbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/callbacks_attach/", "How to create custom callback handlers": "https://python.langchain.com/v0.2/docs/how_to/custom_callbacks/", "How to pass callbacks in at runtime": "https://python.langchain.com/v0.2/docs/how_to/callbacks_runtime/"}, "LLMResult": {"How to use callbacks in async environments": "https://python.langchain.com/v0.2/docs/how_to/callbacks_async/", "How to propagate callbacks constructor": "https://python.langchain.com/v0.2/docs/how_to/callbacks_constructor/", "How to attach callbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/callbacks_attach/", "How to pass callbacks in at runtime": "https://python.langchain.com/v0.2/docs/how_to/callbacks_runtime/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "RunnableParallel": {"How to add values to a chain's state": "https://python.langchain.com/v0.2/docs/how_to/assign/", "How to invoke runnables in parallel": "https://python.langchain.com/v0.2/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/v0.2/docs/how_to/passthrough/", "How to add message history": "https://python.langchain.com/v0.2/docs/how_to/message_history/", "How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/", "How to chain runnables": "https://python.langchain.com/v0.2/docs/how_to/sequence/", "Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/"}, "RunnablePassthrough": {"How to add values to a chain's state": "https://python.langchain.com/v0.2/docs/how_to/assign/", "How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/", "How to do per-user retrieval": "https://python.langchain.com/v0.2/docs/how_to/qa_per_user/", "How to inspect runnables": "https://python.langchain.com/v0.2/docs/how_to/inspect/", "How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to do tool/function calling": "https://python.langchain.com/v0.2/docs/how_to/function_calling/", "How to add a human-in-the-loop for tools": "https://python.langchain.com/v0.2/docs/how_to/tools_human/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_large_db/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to map values to a graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_mapping/", "How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to add default invocation args to a Runnable": "https://python.langchain.com/v0.2/docs/how_to/binding/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/v0.2/docs/how_to/dynamic_chain/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/v0.2/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/v0.2/docs/how_to/passthrough/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "How to add memory to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_memory/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_high_cardinality/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/v0.2/docs/how_to/tools_prompting/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/", "Hybrid Search": "https://python.langchain.com/v0.2/docs/how_to/hybrid/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "NVIDIA NIMs ": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/nvidia_ai_endpoints/", "You.com": "https://python.langchain.com/v0.2/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/v0.2/docs/integrations/retrievers/asknews/", "Tavily Search API": "https://python.langchain.com/v0.2/docs/integrations/retrievers/tavily/", "Milvus Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/milvus_hybrid_search/", "Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "DSPy": "https://python.langchain.com/v0.2/docs/integrations/providers/dspy/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_summary/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_generative_ai/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/", "Build a Chatbot": "https://python.langchain.com/v0.2/docs/tutorials/chatbot/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/", "Vector stores and retrievers": "https://python.langchain.com/v0.2/docs/tutorials/retrievers/"}, "StrOutputParser": {"How to add values to a chain's state": "https://python.langchain.com/v0.2/docs/how_to/assign/", "How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/", "How to do per-user retrieval": "https://python.langchain.com/v0.2/docs/how_to/qa_per_user/", "How to inspect runnables": "https://python.langchain.com/v0.2/docs/how_to/inspect/", "How to add fallbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/fallbacks/", "How to map values to a graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_mapping/", "How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to add default invocation args to a Runnable": "https://python.langchain.com/v0.2/docs/how_to/binding/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/v0.2/docs/how_to/dynamic_chain/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to invoke runnables in parallel": "https://python.langchain.com/v0.2/docs/how_to/parallel/", "How to pass through arguments from one step to the next": "https://python.langchain.com/v0.2/docs/how_to/passthrough/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "How to run custom functions": "https://python.langchain.com/v0.2/docs/how_to/functions/", "How to chain runnables": "https://python.langchain.com/v0.2/docs/how_to/sequence/", "Hybrid Search": "https://python.langchain.com/v0.2/docs/how_to/hybrid/", "How to do query validation as part of SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_query_checking/", "Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/", "NVIDIA NIMs ": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/nvidia_ai_endpoints/", "You.com": "https://python.langchain.com/v0.2/docs/integrations/retrievers/you-retriever/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "AskNews": "https://python.langchain.com/v0.2/docs/integrations/retrievers/asknews/", "Tavily Search API": "https://python.langchain.com/v0.2/docs/integrations/retrievers/tavily/", "Milvus Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/milvus_hybrid_search/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "ChatOllama": "https://python.langchain.com/v0.2/docs/integrations/chat/ollama/", "Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/", "NVIDIA NIMs": "https://python.langchain.com/v0.2/docs/integrations/chat/nvidia_ai_endpoints/", "Fiddler": "https://python.langchain.com/v0.2/docs/integrations/callbacks/fiddler/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "DSPy": "https://python.langchain.com/v0.2/docs/integrations/providers/dspy/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_summary/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/astradb/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/", "Volc Engine Maas": "https://python.langchain.com/v0.2/docs/integrations/llms/volcengine_maas/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_generative_ai/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/", "AI21LLM": "https://python.langchain.com/v0.2/docs/integrations/llms/ai21/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/", "Build a Simple LLM Application": "https://python.langchain.com/v0.2/docs/tutorials/llm_chain/"}, "RunnableBranch": {"How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/"}, "cosine_similarity": {"How to route between sub-chains": "https://python.langchain.com/v0.2/docs/how_to/routing/"}, "tool": {"How to use tools in a chain": "https://python.langchain.com/v0.2/docs/how_to/tools_chain/", "How to do tool/function calling": "https://python.langchain.com/v0.2/docs/how_to/function_calling/", "How to add a human-in-the-loop for tools": "https://python.langchain.com/v0.2/docs/how_to/tools_human/", "How to create custom tools": "https://python.langchain.com/v0.2/docs/how_to/custom_tools/", "How to pass multimodal data directly to models": "https://python.langchain.com/v0.2/docs/how_to/multimodal_inputs/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/v0.2/docs/how_to/tools_prompting/", "How to migrate from legacy LangChain agents to LangGraph": "https://python.langchain.com/v0.2/docs/how_to/migrate_agent/", "Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "ChatTongyi": "https://python.langchain.com/v0.2/docs/integrations/chat/tongyi/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Log, Trace, and Monitor": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/index/", "JSONFormer": "https://python.langchain.com/v0.2/docs/integrations/llms/jsonformer_experimental/"}, "ConfigurableField": {"How to do per-user retrieval": "https://python.langchain.com/v0.2/docs/how_to/qa_per_user/", "How to configure runtime chain internals": "https://python.langchain.com/v0.2/docs/how_to/configure/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/", "How to combine results from multiple retrievers": "https://python.langchain.com/v0.2/docs/how_to/ensemble_retriever/", "Hybrid Search": "https://python.langchain.com/v0.2/docs/how_to/hybrid/"}, "NGramOverlapExampleSelector": {"How to select examples by n-gram overlap": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_ngram/"}, "get_openai_callback": {"How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/", "How to run custom functions": "https://python.langchain.com/v0.2/docs/how_to/functions/", "How to track token usage for LLMs": "https://python.langchain.com/v0.2/docs/how_to/llm_token_usage_tracking/", "AzureChatOpenAI": "https://python.langchain.com/v0.2/docs/integrations/chat/azure_chat_openai/"}, "load_tools": {"How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/", "Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "ChatGPT Plugins": "https://python.langchain.com/v0.2/docs/integrations/tools/chatgpt_plugins/", "Google Jobs": "https://python.langchain.com/v0.2/docs/integrations/tools/google_jobs/", "Human as a tool": "https://python.langchain.com/v0.2/docs/integrations/tools/human_tools/", "Google Finance": "https://python.langchain.com/v0.2/docs/integrations/tools/google_finance/", "AWS Lambda": "https://python.langchain.com/v0.2/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/v0.2/docs/integrations/tools/google_drive/", "Requests": "https://python.langchain.com/v0.2/docs/integrations/tools/requests/", "OpenWeatherMap": "https://python.langchain.com/v0.2/docs/integrations/providers/openweathermap/", "Memorize": "https://python.langchain.com/v0.2/docs/integrations/tools/memorize/", "Search Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/search_tools/", "Eleven Labs Text2Speech": "https://python.langchain.com/v0.2/docs/integrations/tools/eleven_labs_tts/", "ArXiv": "https://python.langchain.com/v0.2/docs/integrations/tools/arxiv/", "GraphQL": "https://python.langchain.com/v0.2/docs/integrations/tools/graphql/", "SceneXplain": "https://python.langchain.com/v0.2/docs/integrations/tools/sceneXplain/", "Dall-E Image Generator": "https://python.langchain.com/v0.2/docs/integrations/tools/dalle_image_generator/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "SageMaker Tracking": "https://python.langchain.com/v0.2/docs/integrations/callbacks/sagemaker_tracking/", "Comet Tracing": "https://python.langchain.com/v0.2/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/v0.2/docs/integrations/callbacks/argilla/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/callbacks/streamlit/", "SerpAPI": "https://python.langchain.com/v0.2/docs/integrations/providers/serpapi/", "SearchApi": "https://python.langchain.com/v0.2/docs/integrations/providers/searchapi/", "Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/", "Golden": "https://python.langchain.com/v0.2/docs/integrations/providers/golden/", "Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/", "Wolfram Alpha": "https://python.langchain.com/v0.2/docs/integrations/providers/wolfram_alpha/", "MLflow": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_tracking/", "DataForSEO": "https://python.langchain.com/v0.2/docs/integrations/providers/dataforseo/", "SearxNG Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/searx/", "Serper - Google Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/google_serper/", "Stack Exchange": "https://python.langchain.com/v0.2/docs/integrations/providers/stackexchange/", "Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/", "WandB Tracing": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/v0.2/docs/integrations/providers/clearml_tracking/", "Dataherald": "https://python.langchain.com/v0.2/docs/integrations/providers/dataherald/", "Amazon API Gateway": "https://python.langchain.com/v0.2/docs/integrations/llms/amazon_api_gateway/"}, "get_bedrock_anthropic_callback": {"How to track token usage in ChatModels": "https://python.langchain.com/v0.2/docs/how_to/chat_token_usage_tracking/"}, "CallbackManagerForLLMRun": {"How to create a custom LLM class": "https://python.langchain.com/v0.2/docs/how_to/custom_llm/", "How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "LLM": {"How to create a custom LLM class": "https://python.langchain.com/v0.2/docs/how_to/custom_llm/"}, "GenerationChunk": {"How to create a custom LLM class": "https://python.langchain.com/v0.2/docs/how_to/custom_llm/"}, "BaseLoader": {"How to create a custom Document Loader": "https://python.langchain.com/v0.2/docs/how_to/document_loader_custom/", "How to use the LangChain indexing API": "https://python.langchain.com/v0.2/docs/how_to/indexing/"}, "BaseBlobParser": {"How to create a custom Document Loader": "https://python.langchain.com/v0.2/docs/how_to/document_loader_custom/"}, "Blob": {"How to create a custom Document Loader": "https://python.langchain.com/v0.2/docs/how_to/document_loader_custom/", "Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Cloud Document AI": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_docai/"}, "FileSystemBlobLoader": {"How to create a custom Document Loader": "https://python.langchain.com/v0.2/docs/how_to/document_loader_custom/"}, "GenericLoader": {"How to create a custom Document Loader": "https://python.langchain.com/v0.2/docs/how_to/document_loader_custom/", "Grobid": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/grobid/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/", "Source Code": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/source_code/"}, "LengthBasedExampleSelector": {"How to select examples by length": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_length_based/"}, "BaseExampleSelector": {"How to use example selectors": "https://python.langchain.com/v0.2/docs/how_to/example_selectors/"}, "Language": {"How to split code": "https://python.langchain.com/v0.2/docs/how_to/code_splitter/", "Source Code": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/source_code/"}, "Chroma": {"How to use few shot examples": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples/", "How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to use few shot examples in chat models": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples_chat/", "How to select examples by similarity": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_similarity/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/v0.2/docs/how_to/long_context_reorder/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "How to create and query vector stores": "https://python.langchain.com/v0.2/docs/how_to/vectorstores/", "How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/", "How to use the Parent Document Retriever": "https://python.langchain.com/v0.2/docs/how_to/parent_document_retriever/", "How deal with high cardinality categoricals when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_high_cardinality/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/", "RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/", "LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/chroma/", "Confident": "https://python.langchain.com/v0.2/docs/integrations/callbacks/confident/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Psychic": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/psychic/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/", "Vector stores and retrievers": "https://python.langchain.com/v0.2/docs/tutorials/retrievers/"}, "PydanticToolsParser": {"How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to do tool/function calling": "https://python.langchain.com/v0.2/docs/how_to/function_calling/", "How to deal with large databases when doing SQL question-answering": "https://python.langchain.com/v0.2/docs/how_to/sql_large_db/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/"}, "chain": {"How to handle cases where no queries are generated": "https://python.langchain.com/v0.2/docs/how_to/query_no_queries/", "How to handle multiple queries when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_queries/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/v0.2/docs/how_to/dynamic_chain/", "How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to handle multiple retrievers when doing query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_multiple_retrievers/", "How to run custom functions": "https://python.langchain.com/v0.2/docs/how_to/functions/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/"}, "RecursiveJsonSplitter": {"How to split JSON data": "https://python.langchain.com/v0.2/docs/how_to/recursive_json_splitter/"}, "FewShotChatMessagePromptTemplate": {"How to use few shot examples in chat models": "https://python.langchain.com/v0.2/docs/how_to/few_shot_examples_chat/", "Fiddler": "https://python.langchain.com/v0.2/docs/integrations/callbacks/fiddler/"}, "ToolMessage": {"How to do tool/function calling": "https://python.langchain.com/v0.2/docs/how_to/function_calling/", "How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "How to use a model to call tools": "https://python.langchain.com/v0.2/docs/how_to/tool_calling", "How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to return structured data from a model": "https://python.langchain.com/v0.2/docs/how_to/structured_output/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "ChatAnthropic": "https://python.langchain.com/v0.2/docs/integrations/chat/anthropic/"}, "XMLOutputParser": {"How to parse XML output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_xml/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/"}, "Runnable": {"How to add a human-in-the-loop for tools": "https://python.langchain.com/v0.2/docs/how_to/tools_human/", "How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to create a dynamic (self-constructing) chain": "https://python.langchain.com/v0.2/docs/how_to/dynamic_chain/"}, "StructuredTool": {"How to create custom tools": "https://python.langchain.com/v0.2/docs/how_to/custom_tools/", "Infobip": "https://python.langchain.com/v0.2/docs/integrations/tools/infobip/"}, "ToolException": {"How to create custom tools": "https://python.langchain.com/v0.2/docs/how_to/custom_tools/"}, "HuggingFaceEmbeddings": {"Text embedding models": "https://python.langchain.com/v0.2/docs/how_to/embed_text/", "How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/v0.2/docs/how_to/long_context_reorder/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/platforms/huggingface/", "Sentence Transformers on Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/sentence_transformers/", "LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/", "Snowflake": "https://python.langchain.com/v0.2/docs/integrations/providers/snowflake/", "VDMS": "https://python.langchain.com/v0.2/docs/integrations/providers/vdms/", "Vald": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vald/", "ScaNN": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/scann/", "Annoy": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/annoy/", "Oracle AI Vector Search: Vector Store": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/oracle/", "TileDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tiledb/", "SurrealDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/surrealdb/", "Faiss (Async)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss_async/", "Aerospike": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/aerospike/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vdms/", "Faiss": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss/", "Infinispan": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/infinispanvs/", "SemaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/semadb/", "Vearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vearch/", "Cross Encoder Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/cross_encoder_reranker/", "self-query-qdrant": "https://python.langchain.com/v0.2/docs/templates/self-query-qdrant/"}, "LongContextReorder": {"How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/v0.2/docs/how_to/long_context_reorder/", "LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/"}, "create_stuff_documents_chain": {"How to reorder retrieved results to mitigate the \"lost in the middle\" effect": "https://python.langchain.com/v0.2/docs/how_to/long_context_reorder/", "How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "How to add retrieval to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_retrieval/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/retrievers/ragatouille/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "BaseMessage": {"How to use reference examples when doing extraction": "https://python.langchain.com/v0.2/docs/how_to/extraction_examples/", "How to propagate callbacks constructor": "https://python.langchain.com/v0.2/docs/how_to/callbacks_constructor/", "How to attach callbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/callbacks_attach/", "How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/", "How to pass callbacks in at runtime": "https://python.langchain.com/v0.2/docs/how_to/callbacks_runtime/", "How to add examples to the prompt for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_few_shot/", "WeChat": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/wechat/", "Discord": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/discord/", "Chat Bot Feedback Template": "https://python.langchain.com/v0.2/docs/templates/chat-bot-feedback/"}, "DatetimeOutputParser": {"How to add fallbacks to a runnable": "https://python.langchain.com/v0.2/docs/how_to/fallbacks/"}, "CypherQueryCorrector": {"How to map values to a graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_mapping/"}, "Schema": {"How to map values to a graph database": "https://python.langchain.com/v0.2/docs/how_to/graph_mapping/"}, "set_llm_cache": {"How to cache chat model responses": "https://python.langchain.com/v0.2/docs/how_to/chat_model_caching/", "How to cache LLM responses": "https://python.langchain.com/v0.2/docs/how_to/llm_caching/", "Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "DSPy": "https://python.langchain.com/v0.2/docs/integrations/providers/dspy/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/providers/mongodb_atlas/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/providers/astradb/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/providers/redis/", "Cassandra": "https://python.langchain.com/v0.2/docs/integrations/providers/cassandra/", "Momento": "https://python.langchain.com/v0.2/docs/integrations/providers/momento/"}, "InMemoryCache": {"How to cache chat model responses": "https://python.langchain.com/v0.2/docs/how_to/chat_model_caching/", "How to cache LLM responses": "https://python.langchain.com/v0.2/docs/how_to/llm_caching/", "Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/"}, "SQLiteCache": {"How to cache chat model responses": "https://python.langchain.com/v0.2/docs/how_to/chat_model_caching/", "How to cache LLM responses": "https://python.langchain.com/v0.2/docs/how_to/llm_caching/", "Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "DSPy": "https://python.langchain.com/v0.2/docs/integrations/providers/dspy/"}, "create_sql_agent": {"How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "CnosDB": "https://python.langchain.com/v0.2/docs/integrations/providers/cnosdb/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/"}, "PythonAstREPLTool": {"How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/"}, "JsonOutputKeyToolsParser": {"How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/"}, "create_pandas_dataframe_agent": {"How to do question answering over CSVs": "https://python.langchain.com/v0.2/docs/how_to/sql_csv/", "Airbyte Question Answering": "https://python.langchain.com/v0.2/docs/integrations/toolkits/airbyte_structured_qa/", "Pandas Dataframe": "https://python.langchain.com/v0.2/docs/integrations/toolkits/pandas/"}, "create_retrieval_chain": {"How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to get your RAG application to return sources": "https://python.langchain.com/v0.2/docs/how_to/qa_sources/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/retrievers/ragatouille/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/", "Build a Retrieval Augmented Generation (RAG) App": "https://python.langchain.com/v0.2/docs/tutorials/rag/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "create_history_aware_retriever": {"How to stream results from your RAG application": "https://python.langchain.com/v0.2/docs/how_to/qa_streaming/", "How to add chat history": "https://python.langchain.com/v0.2/docs/how_to/qa_chat_history_how_to/", "Conversational RAG": "https://python.langchain.com/v0.2/docs/tutorials/qa_chat_history/"}, "OutputFixingParser": {"How to use the output-fixing parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_fixing/", "How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/"}, "FunctionMessage": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "AIMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/", "How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "FunctionMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "HumanMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "SystemMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "ToolMessageChunk": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "AsyncCallbackManagerForLLMRun": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "SimpleChatModel": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "ChatGeneration": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/", "How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/"}, "ChatGenerationChunk": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "ChatResult": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "run_in_executor": {"How to create a custom chat model class": "https://python.langchain.com/v0.2/docs/how_to/custom_chat_model/"}, "MoveFileTool": {"How to convert tools to OpenAI Functions": "https://python.langchain.com/v0.2/docs/how_to/tools_as_openai_functions/"}, "RunnableConfig": {"How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/", "How to run custom functions": "https://python.langchain.com/v0.2/docs/how_to/functions/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/v0.2/docs/how_to/tools_prompting/", "LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/"}, "ToolCall": {"How to handle tool errors": "https://python.langchain.com/v0.2/docs/how_to/tools_error/"}, "SQLRecordManager": {"How to use the LangChain indexing API": "https://python.langchain.com/v0.2/docs/how_to/indexing/"}, "index": {"How to use the LangChain indexing API": "https://python.langchain.com/v0.2/docs/how_to/indexing/"}, "create_openai_tools_agent": {"How to add tools to chatbots": "https://python.langchain.com/v0.2/docs/how_to/chatbots_tools/", "Log, Trace, and Monitor": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/logging_tracing_portkey/", "Portkey": "https://python.langchain.com/v0.2/docs/integrations/providers/portkey/index/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Slack": "https://python.langchain.com/v0.2/docs/integrations/toolkits/slack/", "Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/"}, "SemanticChunker": {"How to split text based on semantic similarity": "https://python.langchain.com/v0.2/docs/how_to/semantic-chunker/"}, "JsonOutputParser": {"How to stream runnables": "https://python.langchain.com/v0.2/docs/how_to/streaming/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/v0.2/docs/how_to/tools_prompting/", "How to parse JSON output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_json/"}, "InMemoryByteStore": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "Caching": "https://python.langchain.com/v0.2/docs/how_to/caching_embeddings/", "InMemoryByteStore": "https://python.langchain.com/v0.2/docs/integrations/stores/in_memory/"}, "TextLoader": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "How to load documents from a directory": "https://python.langchain.com/v0.2/docs/how_to/document_loader_directory/", "How to create and query vector stores": "https://python.langchain.com/v0.2/docs/how_to/vectorstores/", "How to use the Parent Document Retriever": "https://python.langchain.com/v0.2/docs/how_to/parent_document_retriever/", "How to use a vectorstore as a retriever": "https://python.langchain.com/v0.2/docs/how_to/vectorstore_retriever/", "Caching": "https://python.langchain.com/v0.2/docs/how_to/caching_embeddings/", "Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azuresearch/", "Kinetica Vectorstore based Retriever": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kinetica/", "JaguarDB Vector Database": "https://python.langchain.com/v0.2/docs/integrations/retrievers/jaguar/", "LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere-reranker/", "SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/singlestoredb/", "FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "Confident": "https://python.langchain.com/v0.2/docs/integrations/callbacks/confident/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "Upstash Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/upstash/", "VDMS": "https://python.langchain.com/v0.2/docs/integrations/providers/vdms/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/", "LanceDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lancedb/", "Kinetica Vectorstore API": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kinetica/", "SQLite-VSS": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sqlitevss/", "Vald": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vald/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "DashVector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dashvector/", "Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/databricks_vector_search/", "ScaNN": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/scann/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/xata/", "Hippo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hippo/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vectara/", "Vespa": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vespa/", "Rockset": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/rockset/", "DingoDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dingo/", "Zilliz": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zilliz/", "Azure Cosmos DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azure_cosmos_db/", "viking DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vikingdb/", "Annoy": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/annoy/", "Couchbase ": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/couchbase/", "Typesense": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/typesense/", "Momento Vector Index (MVI)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/momento_vector_index/", "TiDB Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tidb_vector/", "Relyt": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/relyt/", "Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/atlas/", "Activeloop Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/activeloop_deeplake/", "vlite": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vlite/", "Neo4j Vector Index": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/neo4jvector/", "Lantern": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lantern/", "Tair": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tair/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/chroma/", "DuckDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/duckdb/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/alibabacloud_opensearch/", "Clarifai": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/clarifai/", "scikit-learn": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sklearn/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/", "DocArray HnswSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_hnsw/", "MyScale": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/myscale/", "TileDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tiledb/", "ClickHouse": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/clickhouse/", "Google Memorystore for Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_memorystore_redis/", "Qdrant": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/qdrant/", "Tigris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tigris/", "China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/ecloud_vector_search/", "Bagel": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/bagel/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiducloud_vector_search/", "AwaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/awadb/", "Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/supabase/", "SurrealDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/surrealdb/", "OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/opensearch/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pinecone/", "Faiss (Async)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss_async/", "BagelDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/bageldb/", "ManticoreSearch VectorStore": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/manticore_search/", "USearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/usearch/", "Milvus": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/milvus/", "Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/elasticsearch/", "PGVecto.rs": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgvecto_rs/", "Marqo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/marqo/", "DocArray InMemorySearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_in_memory/", "Postgres Embedding": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgembedding/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vdms/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Faiss": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/faiss/", "Epsilla": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/epsilla/", "Amazon Document DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/documentdb/", "SemaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/semadb/", "AnalyticDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/analyticdb/", "Hologres": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hologres/", "Baidu VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiduvectordb/", "Vearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vearch/", "Meilisearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/meilisearch/", "VoyageAI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/", "OpenVINO Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openvino_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/"}, "MultiVectorRetriever": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/"}, "SearchType": {"How to retrieve using multiple vectors per document": "https://python.langchain.com/v0.2/docs/how_to/multi_vector/", "Zep Open Source": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_memorystore/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/"}, "SQLChatMessageHistory": {"How to add message history": "https://python.langchain.com/v0.2/docs/how_to/message_history/", "SQL (SQLAlchemy)": "https://python.langchain.com/v0.2/docs/integrations/memory/sql_chat_message_history/", "SQLite": "https://python.langchain.com/v0.2/docs/integrations/providers/sqlite/"}, "ConfigurableFieldSpec": {"How to add message history": "https://python.langchain.com/v0.2/docs/how_to/message_history/"}, "Ollama": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/v0.2/docs/how_to/tools_prompting/", "Ollama": "https://python.langchain.com/v0.2/docs/integrations/llms/ollama/"}, "CallbackManager": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "ChatLiteLLM": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm/", "GPTRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/gpt_router/", "ChatLiteLLMRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm_router/", "ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/", "Llama.cpp": "https://python.langchain.com/v0.2/docs/integrations/llms/llamacpp/", "Titan Takeoff": "https://python.langchain.com/v0.2/docs/integrations/llms/titan_takeoff/"}, "StreamingStdOutCallbackHandler": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "DeepInfra": "https://python.langchain.com/v0.2/docs/integrations/chat/deepinfra/", "ChatLiteLLM": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm/", "ChatEverlyAI": "https://python.langchain.com/v0.2/docs/integrations/chat/everlyai/", "GPTRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/gpt_router/", "ChatLiteLLMRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm_router/", "ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/", "Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/chat/yuan2/", "GPT4All": "https://python.langchain.com/v0.2/docs/integrations/llms/gpt4all/", "Arthur": "https://python.langchain.com/v0.2/docs/integrations/providers/arthur_tracking/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/", "TextGen": "https://python.langchain.com/v0.2/docs/integrations/llms/textgen/", "Bedrock": "https://python.langchain.com/v0.2/docs/integrations/llms/bedrock/", "Llama.cpp": "https://python.langchain.com/v0.2/docs/integrations/llms/llamacpp/", "Titan Takeoff": "https://python.langchain.com/v0.2/docs/integrations/llms/titan_takeoff/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/llms/edenai/", "C Transformers": "https://python.langchain.com/v0.2/docs/integrations/llms/ctransformers/", "ExLlamaV2": "https://python.langchain.com/v0.2/docs/integrations/llms/exllamav2/", "Huggingface Endpoints": "https://python.langchain.com/v0.2/docs/integrations/llms/huggingface_endpoint/", "Replicate": "https://python.langchain.com/v0.2/docs/integrations/llms/replicate/"}, "LlamaCpp": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/", "Llama.cpp": "https://python.langchain.com/v0.2/docs/integrations/llms/llamacpp/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/"}, "GPT4All": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "PromptLayer": "https://python.langchain.com/v0.2/docs/integrations/callbacks/promptlayer/", "GPT4All": "https://python.langchain.com/v0.2/docs/integrations/llms/gpt4all/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/"}, "Llamafile": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "Llamafile": "https://python.langchain.com/v0.2/docs/integrations/llms/llamafile/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/"}, "LLMChain": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/", "Clarifai": "https://python.langchain.com/v0.2/docs/integrations/llms/clarifai/", "RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/", "Memorize": "https://python.langchain.com/v0.2/docs/integrations/tools/memorize/", "Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/", "Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/", "Dall-E Image Generator": "https://python.langchain.com/v0.2/docs/integrations/tools/dalle_image_generator/", "Mot\u00f6rhead": "https://python.langchain.com/v0.2/docs/integrations/memory/motorhead_memory/", "Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/", "Context": "https://python.langchain.com/v0.2/docs/integrations/callbacks/context/", "SageMaker Tracking": "https://python.langchain.com/v0.2/docs/integrations/callbacks/sagemaker_tracking/", "Argilla": "https://python.langchain.com/v0.2/docs/integrations/callbacks/argilla/", "Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/", "MLflow Deployments for LLMs": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow/", "MLflow AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_ai_gateway/", "Rebuff": "https://python.langchain.com/v0.2/docs/integrations/providers/rebuff/", "Prediction Guard": "https://python.langchain.com/v0.2/docs/integrations/llms/predictionguard/", "MLflow": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_tracking/", "Shale Protocol": "https://python.langchain.com/v0.2/docs/integrations/providers/shaleprotocol/", "Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/", "Ray Serve": "https://python.langchain.com/v0.2/docs/integrations/providers/ray_serve/", "Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Baseten": "https://python.langchain.com/v0.2/docs/integrations/llms/baseten/", "StochasticAI": "https://python.langchain.com/v0.2/docs/integrations/llms/stochasticai/", "Solar": "https://python.langchain.com/v0.2/docs/integrations/llms/solar/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/", "IPEX-LLM": "https://python.langchain.com/v0.2/docs/integrations/llms/ipex_llm/", "Banana": "https://python.langchain.com/v0.2/docs/integrations/llms/banana/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/v0.2/docs/integrations/llms/alibabacloud_pai_eas_endpoint/", "OpenLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/openllm/", "OctoAI": "https://python.langchain.com/v0.2/docs/integrations/llms/octoai/", "Writer": "https://python.langchain.com/v0.2/docs/integrations/llms/writer/", "Modal": "https://python.langchain.com/v0.2/docs/integrations/llms/modal/", "TextGen": "https://python.langchain.com/v0.2/docs/integrations/llms/textgen/", "Xorbits Inference (Xinference)": "https://python.langchain.com/v0.2/docs/integrations/llms/xinference/", "Nebula (Symbl.ai)": "https://python.langchain.com/v0.2/docs/integrations/llms/symblai_nebula/", "DeepInfra": "https://python.langchain.com/v0.2/docs/integrations/llms/deepinfra/", "NLP Cloud": "https://python.langchain.com/v0.2/docs/integrations/llms/nlpcloud/", "GPT4All": "https://python.langchain.com/v0.2/docs/integrations/llms/gpt4all/", "ForefrontAI": "https://python.langchain.com/v0.2/docs/integrations/llms/forefrontai/", "MosaicML": "https://python.langchain.com/v0.2/docs/integrations/llms/mosaicml/", "CerebriumAI": "https://python.langchain.com/v0.2/docs/integrations/llms/cerebriumai/", "Predibase": "https://python.langchain.com/v0.2/docs/integrations/llms/predibase/", "GigaChat": "https://python.langchain.com/v0.2/docs/integrations/llms/gigachat/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_generative_ai/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/", "Aphrodite Engine": "https://python.langchain.com/v0.2/docs/integrations/llms/aphrodite/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/llms/edenai/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/v0.2/docs/integrations/llms/javelin/", "C Transformers": "https://python.langchain.com/v0.2/docs/integrations/llms/ctransformers/", "vLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/vllm/", "Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/", "Minimax": "https://python.langchain.com/v0.2/docs/integrations/llms/minimax/", "Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/llms/yuan2/", "Huggingface Endpoints": "https://python.langchain.com/v0.2/docs/integrations/llms/huggingface_endpoint/", "Runhouse": "https://python.langchain.com/v0.2/docs/integrations/llms/runhouse/", "Anyscale": "https://python.langchain.com/v0.2/docs/integrations/llms/anyscale/", "YandexGPT": "https://python.langchain.com/v0.2/docs/integrations/llms/yandex/", "GooseAI": "https://python.langchain.com/v0.2/docs/integrations/llms/gooseai/", "OpenLM": "https://python.langchain.com/v0.2/docs/integrations/llms/openlm/", "Cloudflare Workers AI": "https://python.langchain.com/v0.2/docs/integrations/llms/cloudflare_workersai/", "CTranslate2": "https://python.langchain.com/v0.2/docs/integrations/llms/ctranslate2/", "PipelineAI": "https://python.langchain.com/v0.2/docs/integrations/llms/pipelineai/", "ChatGLM": "https://python.langchain.com/v0.2/docs/integrations/llms/chatglm/", "Gradient": "https://python.langchain.com/v0.2/docs/integrations/llms/gradient/", "Petals": "https://python.langchain.com/v0.2/docs/integrations/llms/petals/", "Replicate": "https://python.langchain.com/v0.2/docs/integrations/llms/replicate/", "Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/"}, "ConditionalPromptSelector": {"Run LLMs locally": "https://python.langchain.com/v0.2/docs/how_to/local_llms/"}, "HubRunnable": {"How to configure runtime chain internals": "https://python.langchain.com/v0.2/docs/how_to/configure/"}, "ContextualCompressionRetriever": {"How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/", "Cohere reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere-reranker/", "FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "RAGatouille": "https://python.langchain.com/v0.2/docs/integrations/providers/ragatouille/", "VoyageAI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/", "OpenVINO Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openvino_rerank/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Cross Encoder Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/cross_encoder_reranker/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/"}, "LLMChainExtractor": {"How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/"}, "LLMChainFilter": {"How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/"}, "EmbeddingsFilter": {"How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/"}, "DocumentCompressorPipeline": {"How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/"}, "EmbeddingsRedundantFilter": {"How to do retrieval with contextual compression": "https://python.langchain.com/v0.2/docs/how_to/contextual_compression/", "LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/"}, "Comparator": {"How to construct filters for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_constructing_filters/"}, "Comparison": {"How to construct filters for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_constructing_filters/"}, "Operation": {"How to construct filters for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_constructing_filters/"}, "Operator": {"How to construct filters for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_constructing_filters/"}, "StructuredQuery": {"How to construct filters for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_constructing_filters/"}, "ChromaTranslator": {"How to construct filters for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_constructing_filters/", "How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/"}, "ElasticsearchTranslator": {"How to construct filters for query analysis": "https://python.langchain.com/v0.2/docs/how_to/query_constructing_filters/"}, "WikipediaQueryRun": {"How to use built-in tools and toolkits": "https://python.langchain.com/v0.2/docs/how_to/tools_builtin/", "Wikipedia": "https://python.langchain.com/v0.2/docs/integrations/tools/wikipedia/"}, "WikipediaAPIWrapper": {"How to use built-in tools and toolkits": "https://python.langchain.com/v0.2/docs/how_to/tools_builtin/", "Wikipedia": "https://python.langchain.com/v0.2/docs/integrations/tools/wikipedia/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/"}, "CallbackManagerForRetrieverRun": {"How to create a custom Retriever": "https://python.langchain.com/v0.2/docs/how_to/custom_retriever/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/"}, "BaseRetriever": {"How to create a custom Retriever": "https://python.langchain.com/v0.2/docs/how_to/custom_retriever/"}, "LLMGraphTransformer": {"How to construct knowledge graphs": "https://python.langchain.com/v0.2/docs/how_to/graph_constructing/"}, "RetryOutputParser": {"How to retry when a parsing error occurs": "https://python.langchain.com/v0.2/docs/how_to/output_parser_retry/"}, "TimeWeightedVectorStoreRetriever": {"How to use a time-weighted vector store retriever": "https://python.langchain.com/v0.2/docs/how_to/time_weighted_vectorstore/"}, "InMemoryDocstore": {"How to use a time-weighted vector store retriever": "https://python.langchain.com/v0.2/docs/how_to/time_weighted_vectorstore/", "Annoy": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/annoy/"}, "mock_now": {"How to use a time-weighted vector store retriever": "https://python.langchain.com/v0.2/docs/how_to/time_weighted_vectorstore/"}, "RunnableGenerator": {"How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/"}, "OutputParserException": {"How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/"}, "BaseOutputParser": {"How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/", "How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/"}, "BaseGenerationOutputParser": {"How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/"}, "Generation": {"How to create a custom Output Parser": "https://python.langchain.com/v0.2/docs/how_to/output_parser_custom/"}, "DirectoryLoader": {"How to load documents from a directory": "https://python.langchain.com/v0.2/docs/how_to/document_loader_directory/", "Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/azure_ai_search/", "Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/", "StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/"}, "PythonLoader": {"How to load documents from a directory": "https://python.langchain.com/v0.2/docs/how_to/document_loader_directory/"}, "LanceDB": {"How to create and query vector stores": "https://python.langchain.com/v0.2/docs/how_to/vectorstores/", "LanceDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lancedb/"}, "SpacyTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/v0.2/docs/how_to/split_by_token/", "spaCy": "https://python.langchain.com/v0.2/docs/integrations/providers/spacy/", "Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/atlas/"}, "SentenceTransformersTokenTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/v0.2/docs/how_to/split_by_token/"}, "NLTKTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/v0.2/docs/how_to/split_by_token/"}, "KonlpyTextSplitter": {"How to split text by tokens ": "https://python.langchain.com/v0.2/docs/how_to/split_by_token/"}, "WikipediaRetriever": {"How to get a RAG application to add citations": "https://python.langchain.com/v0.2/docs/how_to/qa_citations/", "Wikipedia": "https://python.langchain.com/v0.2/docs/integrations/providers/wikipedia/"}, "UnstructuredHTMLLoader": {"How to load HTML": "https://python.langchain.com/v0.2/docs/how_to/document_loader_html/", "Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/"}, "MultiQueryRetriever": {"How to use the MultiQueryRetriever": "https://python.langchain.com/v0.2/docs/how_to/MultiQueryRetriever/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_summary/"}, "GraphCypherQAChain": {"How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "Neo4j": "https://python.langchain.com/v0.2/docs/integrations/graphs/neo4j_cypher/", "Memgraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/memgraph/", "Diffbot": "https://python.langchain.com/v0.2/docs/integrations/graphs/diffbot/", "Apache AGE": "https://python.langchain.com/v0.2/docs/integrations/graphs/apache_age/", "Build a Question Answering application over a Graph Database": "https://python.langchain.com/v0.2/docs/tutorials/graph/"}, "Neo4jVector": {"How to best prompt for Graph-RAG": "https://python.langchain.com/v0.2/docs/how_to/graph_prompting/", "Neo4j": "https://python.langchain.com/v0.2/docs/integrations/providers/neo4j/", "Neo4j Vector Index": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/neo4jvector/"}, "ParentDocumentRetriever": {"How to use the Parent Document Retriever": "https://python.langchain.com/v0.2/docs/how_to/parent_document_retriever/"}, "InMemoryStore": {"How to use the Parent Document Retriever": "https://python.langchain.com/v0.2/docs/how_to/parent_document_retriever/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/"}, "YamlOutputParser": {"How to parse YAML output": "https://python.langchain.com/v0.2/docs/how_to/output_parser_yaml/"}, "PipelinePromptTemplate": {"How to compose prompts together": "https://python.langchain.com/v0.2/docs/how_to/prompts_composition/"}, "CacheBackedEmbeddings": {"Caching": "https://python.langchain.com/v0.2/docs/how_to/caching_embeddings/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/stores/astradb/", "Cassandra": "https://python.langchain.com/v0.2/docs/integrations/stores/cassandra/"}, "LocalFileStore": {"Caching": "https://python.langchain.com/v0.2/docs/how_to/caching_embeddings/", "LocalFileStore": "https://python.langchain.com/v0.2/docs/integrations/stores/file_system/"}, "render_text_description": {"How to add ad-hoc tool calling capability to LLMs and Chat Models": "https://python.langchain.com/v0.2/docs/how_to/tools_prompting/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/"}, "RunnableSerializable": {"LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/"}, "Run": {"LangChain Expression Language Cheatsheet": "https://python.langchain.com/v0.2/docs/how_to/lcel_cheatsheet/"}, "MarkdownHeaderTextSplitter": {"How to split Markdown by Headers": "https://python.langchain.com/v0.2/docs/how_to/markdown_header_metadata_splitter/"}, "HTMLHeaderTextSplitter": {"How to split by HTML header ": "https://python.langchain.com/v0.2/docs/how_to/HTML_header_metadata_splitter/"}, "EnsembleRetriever": {"How to combine results from multiple retrievers": "https://python.langchain.com/v0.2/docs/how_to/ensemble_retriever/"}, "BM25Retriever": {"How to combine results from multiple retrievers": "https://python.langchain.com/v0.2/docs/how_to/ensemble_retriever/", "BM25": "https://python.langchain.com/v0.2/docs/integrations/retrievers/bm25/", "Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/"}, "ChatVertexAI": {"Response metadata": "https://python.langchain.com/v0.2/docs/how_to/response_metadata/", "Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google SQL for MySQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mysql/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_alloydb/", "Google El Carro Oracle": "https://python.langchain.com/v0.2/docs/integrations/memory/google_el_carro/", "Google SQL for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_pg/", "Google SQL for SQL Server": "https://python.langchain.com/v0.2/docs/integrations/memory/google_sql_mssql/", "ChatVertexAI": "https://python.langchain.com/v0.2/docs/integrations/chat/google_vertex_ai_palm/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "ChatMistralAI": {"Response metadata": "https://python.langchain.com/v0.2/docs/how_to/response_metadata/", "MistralAI": "https://python.langchain.com/v0.2/docs/integrations/providers/mistralai/", "Build an Extraction Chain": "https://python.langchain.com/v0.2/docs/tutorials/extraction/"}, "ChatGroq": {"Response metadata": "https://python.langchain.com/v0.2/docs/how_to/response_metadata/", "Groq": "https://python.langchain.com/v0.2/docs/integrations/chat/groq/"}, "ChatFireworks": {"Response metadata": "https://python.langchain.com/v0.2/docs/how_to/response_metadata/", "ChatFireworks": "https://python.langchain.com/v0.2/docs/integrations/chat/fireworks/"}, "set_verbose": {"How to debug your LLM apps": "https://python.langchain.com/v0.2/docs/how_to/debugging/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/"}, "set_debug": {"How to debug your LLM apps": "https://python.langchain.com/v0.2/docs/how_to/debugging/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/", "TextGen": "https://python.langchain.com/v0.2/docs/integrations/llms/textgen/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/"}, "MaxMarginalRelevanceExampleSelector": {"How to select examples by maximal marginal relevance (MMR)": "https://python.langchain.com/v0.2/docs/how_to/example_selectors_mmr/"}, "AttributeInfo": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "Milvus": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/milvus_self_query/", "PGVector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/weaviate_self_query/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "DashVector": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dashvector/", "Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/opensearch_self_query/", "Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/elasticsearch_self_query/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/chroma_self_query/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/tencentvectordb/", "Timescale Vector (Postgres) ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/redis_self_query/", "MyScale": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/myscale_self_query/", "Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/mongodb_atlas/", "Qdrant": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/qdrant_self_query/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/", "self-query-qdrant": "https://python.langchain.com/v0.2/docs/templates/self-query-qdrant/"}, "SelfQueryRetriever": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/", "How to add scores to retriever results": "https://python.langchain.com/v0.2/docs/how_to/add_scores_retriever/", "Milvus": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/milvus_self_query/", "PGVector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pgvector_self_query/", "Weaviate": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/weaviate_self_query/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "DashVector": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dashvector/", "Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/databricks_vector_search/", "DingoDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dingo/", "OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/opensearch_self_query/", "Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/elasticsearch_self_query/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/providers/chroma/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/tencentvectordb/", "Timescale Vector (Postgres) ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Astra DB (Cassandra)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/astradb/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pinecone/", "Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/supabase_self_query/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/redis_self_query/", "MyScale": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/myscale_self_query/", "Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/mongodb_atlas/", "Qdrant": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/qdrant_self_query/", "Astra DB": "https://python.langchain.com/v0.2/docs/integrations/providers/astradb/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/"}, "StructuredQueryOutputParser": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/"}, "get_query_constructor_prompt": {"How to do \"self-querying\" retrieval": "https://python.langchain.com/v0.2/docs/how_to/self_query/"}, "Cassandra": {"Hybrid Search": "https://python.langchain.com/v0.2/docs/how_to/hybrid/", "Cassandra": "https://python.langchain.com/v0.2/docs/integrations/providers/cassandra/", "Apache Cassandra": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/cassandra/"}, "HTMLSectionSplitter": {"How to split by HTML sections": "https://python.langchain.com/v0.2/docs/how_to/HTML_section_aware_splitter/"}, "JSONLoader": {"How to load JSON": "https://python.langchain.com/v0.2/docs/how_to/document_loader_json/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/"}, "UpstashRedisCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Upstash Vector": "https://python.langchain.com/v0.2/docs/integrations/providers/upstash/"}, "RedisCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/providers/redis/"}, "RedisSemanticCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Redis": "https://python.langchain.com/v0.2/docs/integrations/providers/redis/"}, "GPTCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/"}, "MomentoCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Momento": "https://python.langchain.com/v0.2/docs/integrations/providers/momento/"}, "SQLAlchemyCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/"}, "CassandraCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Cassandra": "https://python.langchain.com/v0.2/docs/integrations/providers/cassandra/"}, "CassandraSemanticCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Cassandra": "https://python.langchain.com/v0.2/docs/integrations/providers/cassandra/"}, "AzureCosmosDBSemanticCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/"}, "CosmosDBSimilarityType": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Azure Cosmos DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azure_cosmos_db/"}, "CosmosDBVectorSearchType": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Azure Cosmos DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azure_cosmos_db/"}, "load_summarize_chain": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/", "Infino": "https://python.langchain.com/v0.2/docs/integrations/callbacks/infino/", "LarkSuite (FeiShu)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/larksuite/", "Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/"}, "OpenSearchSemanticCache": {"Model caches": "https://python.langchain.com/v0.2/docs/integrations/llm_caching/"}, "map_ai_messages": {"WeChat": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/wechat/", "Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "GMail": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/gmail/", "Slack": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/slack/", "WhatsApp": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/whatsapp/", "iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/discord/"}, "merge_chat_runs": {"WeChat": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/wechat/", "Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "Slack": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/slack/", "WhatsApp": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/whatsapp/", "iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/discord/"}, "ChatSession": {"WeChat": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/wechat/", "Slack": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/slack/", "WhatsApp": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/whatsapp/", "iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/", "Telegram": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/telegram/", "Discord": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/discord/"}, "FolderFacebookMessengerChatLoader": {"Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "Facebook - Meta": "https://python.langchain.com/v0.2/docs/integrations/providers/facebook/"}, "SingleFileFacebookMessengerChatLoader": {"Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "Facebook - Meta": "https://python.langchain.com/v0.2/docs/integrations/providers/facebook/"}, "convert_messages_for_finetuning": {"Facebook Messenger": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/facebook/", "LangSmith LLM Runs": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_llm_runs/", "LangSmith Chat Datasets": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_dataset/", "iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/"}, "convert_message_to_dict": {"Twitter (via Apify)": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/twitter/"}, "convert_pydantic_to_openai_function": {"LangSmith LLM Runs": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_llm_runs/"}, "PydanticOutputFunctionsParser": {"LangSmith LLM Runs": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_llm_runs/"}, "LangSmithRunChatLoader": {"LangSmith LLM Runs": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_llm_runs/"}, "GMailLoader": {"GMail": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/gmail/"}, "SlackChatLoader": {"Slack": "https://python.langchain.com/v0.2/docs/integrations/providers/slack/"}, "WhatsAppChatLoader": {"WhatsApp": "https://python.langchain.com/v0.2/docs/integrations/providers/whatsapp/", "Facebook - Meta": "https://python.langchain.com/v0.2/docs/integrations/providers/facebook/", "WhatsApp Chat": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/whatsapp_chat/"}, "LangSmithDatasetChatLoader": {"LangSmith Chat Datasets": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/langsmith_dataset/"}, "IMessageChatLoader": {"iMessage": "https://python.langchain.com/v0.2/docs/integrations/chat_loaders/imessage/"}, "TelegramChatLoader": {"Telegram": "https://python.langchain.com/v0.2/docs/integrations/providers/telegram/"}, "BookendEmbeddings": {"Bookend AI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/bookend/"}, "SolarEmbeddings": {"Solar": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/solar/"}, "HuggingFaceBgeEmbeddings": {"BGE on Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/bge_huggingface/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/platforms/huggingface/"}, "QuantizedBiEncoderEmbeddings": {"Embedding Documents using Optimized and Quantized Embedders": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/optimum_intel/", "Intel": "https://python.langchain.com/v0.2/docs/integrations/providers/intel/"}, "FireworksEmbeddings": {"FireworksEmbeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/fireworks/"}, "XinferenceEmbeddings": {"Xorbits inference (Xinference)": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/xinference/"}, "LLMRailsEmbeddings": {"LLMRails": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/llm_rails/"}, "DeepInfraEmbeddings": {"DeepInfra": "https://python.langchain.com/v0.2/docs/integrations/providers/deepinfra/"}, "HuggingFaceInferenceAPIEmbeddings": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/huggingfacehub/"}, "HuggingFaceEndpointEmbeddings": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/huggingfacehub/", "Text Embeddings Inference": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/text_embeddings_inference/"}, "GoogleGenerativeAIEmbeddings": {"Google Generative AI Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/google_generative_ai/", "Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/"}, "GPT4AllEmbeddings": {"GPT4All": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/gpt4all/", "ManticoreSearch VectorStore": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/manticore_search/", "Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/"}, "MosaicMLInstructorEmbeddings": {"MosaicML": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/mosaicml/"}, "QuantizedBgeEmbeddings": {"Intel\u00ae Extension for Transformers Quantized Text Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/itrex/", "Intel": "https://python.langchain.com/v0.2/docs/integrations/providers/intel/"}, "VertexAIEmbeddings": {"Google Vertex AI PaLM ": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/google_vertex_ai_palm/", "Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Cloud SQL for MySQL": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_cloud_sql_mysql/", "Google Vertex AI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "Google AlloyDB for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_alloydb/", "Google Firestore (Native Mode)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_firestore/", "Google BigQuery Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_bigquery_vector_search/", "Google Spanner": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_spanner/", "Google Cloud SQL for PostgreSQL": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_cloud_sql_pg/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/"}, "BedrockEmbeddings": {"Bedrock": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/bedrock/", "AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/"}, "GigaChatEmbeddings": {"GigaChat": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/gigachat/", "Salute Devices": "https://python.langchain.com/v0.2/docs/integrations/providers/salute_devices/"}, "OllamaEmbeddings": {"Ollama": "https://python.langchain.com/v0.2/docs/integrations/providers/ollama/"}, "OCIGenAIEmbeddings": {"Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/oci_generative_ai/", "Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/v0.2/docs/integrations/providers/oci/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_generative_ai/"}, "FastEmbedEmbeddings": {"FastEmbed by Qdrant": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/fastembed/"}, "LlamaCppEmbeddings": {"Llama-cpp": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/llamacpp/", "Llama.cpp": "https://python.langchain.com/v0.2/docs/integrations/providers/llamacpp/"}, "NLPCloudEmbeddings": {"NLP Cloud": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/nlp_cloud/", "NLPCloud": "https://python.langchain.com/v0.2/docs/integrations/providers/nlpcloud/"}, "LaserEmbeddings": {"LASER Language-Agnostic SEntence Representations Embeddings by Meta AI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/laser/", "Facebook - Meta": "https://python.langchain.com/v0.2/docs/integrations/providers/facebook/"}, "OpenCLIPEmbeddings": {"OpenClip": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/open_clip/", "SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/singlestoredb/"}, "TitanTakeoffEmbed": {"Titan Takeoff": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/titan_takeoff/"}, "MistralAIEmbeddings": {"MistralAI": "https://python.langchain.com/v0.2/docs/integrations/providers/mistralai/"}, "SpacyEmbeddings": {"SpaCy": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/spacy_embedding/", "spaCy": "https://python.langchain.com/v0.2/docs/integrations/providers/spacy/"}, "BaichuanTextEmbeddings": {"Baichuan Text Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/baichuan/", "Baichuan": "https://python.langchain.com/v0.2/docs/integrations/providers/baichuan/"}, "TogetherEmbeddings": {"TogetherEmbeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/together/"}, "HuggingFaceInstructEmbeddings": {"Instruct Embeddings on Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/instruct_embeddings/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/platforms/huggingface/"}, "OracleEmbeddings": {"Oracle AI Vector Search: Generate Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/oracleai/", "OracleAI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/providers/oracleai/"}, "QianfanEmbeddingsEndpoint": {"Baidu Qianfan": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/baidu_qianfan_endpoint/", "ERNIE": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/ernie/", "Baidu": "https://python.langchain.com/v0.2/docs/integrations/providers/baidu/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiducloud_vector_search/"}, "EdenAiEmbeddings": {"EDEN AI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/edenai/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "JohnSnowLabsEmbeddings": {"John Snow Labs": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/johnsnowlabs_embedding/"}, "ErnieEmbeddings": {"ERNIE": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/ernie/"}, "ClarifaiEmbeddings": {"Clarifai": "https://python.langchain.com/v0.2/docs/integrations/providers/clarifai/"}, "AzureOpenAIEmbeddings": {"Azure OpenAI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/azureopenai/", "Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azuresearch/", "Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/"}, "InfinityEmbeddings": {"Infinity": "https://python.langchain.com/v0.2/docs/integrations/providers/infinity/"}, "InfinityEmbeddingsLocal": {"Infinity": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/infinity/"}, "AwaEmbeddings": {"AwaDB": "https://python.langchain.com/v0.2/docs/integrations/providers/awadb/"}, "VolcanoEmbeddings": {"Volc Engine": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/volcengine/"}, "MiniMaxEmbeddings": {"MiniMax": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/minimax/", "Minimax": "https://python.langchain.com/v0.2/docs/integrations/providers/minimax/"}, "FakeEmbeddings": {"Fake Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/fake/", "DocArray": "https://python.langchain.com/v0.2/docs/integrations/retrievers/docarray_retriever/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vectara/", "Relyt": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/relyt/", "Tair": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tair/", "Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/", "Google Memorystore for Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_memorystore_redis/", "PGVecto.rs": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgvecto_rs/", "Baidu VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiduvectordb/"}, "ClovaEmbeddings": {"Clova Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/clova/"}, "NeMoEmbeddings": {"NVIDIA NeMo embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/nemo/"}, "SparkLLMTextEmbeddings": {"SparkLLM Text Embeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/sparkllm/"}, "PremAIEmbeddings": {"PremAI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/premai/"}, "KNNRetriever": {"Voyage AI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/voyageai/", "kNN": "https://python.langchain.com/v0.2/docs/integrations/retrievers/knn/"}, "SelfHostedEmbeddings": {"Self Hosted": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/self-hosted/"}, "SelfHostedHuggingFaceEmbeddings": {"Self Hosted": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/self-hosted/"}, "SelfHostedHuggingFaceInstructEmbeddings": {"Self Hosted": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/self-hosted/"}, "AnyscaleEmbeddings": {"Anyscale": "https://python.langchain.com/v0.2/docs/integrations/providers/anyscale/"}, "EmbaasEmbeddings": {"Embaas": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/embaas/"}, "YandexGPTEmbeddings": {"YandexGPT": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/yandex/"}, "JinaEmbeddings": {"Jina": "https://python.langchain.com/v0.2/docs/integrations/providers/jina/", "Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/"}, "AlephAlphaAsymmetricSemanticEmbedding": {"Aleph Alpha": "https://python.langchain.com/v0.2/docs/integrations/providers/aleph_alpha/"}, "AlephAlphaSymmetricSemanticEmbedding": {"Aleph Alpha": "https://python.langchain.com/v0.2/docs/integrations/providers/aleph_alpha/"}, "CloudflareWorkersAIEmbeddings": {"Cloudflare Workers AI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/cloudflare_workersai/", "Cloudflare": "https://python.langchain.com/v0.2/docs/integrations/providers/cloudflare/"}, "DashScopeEmbeddings": {"DashScope": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/dashscope/", "DashVector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dashvector/"}, "TensorflowHubEmbeddings": {"TensorFlow Hub": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/tensorflowhub/"}, "LlamafileEmbeddings": {"llamafile": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/llamafile/"}, "GradientEmbeddings": {"Gradient": "https://python.langchain.com/v0.2/docs/integrations/providers/gradient/"}, "ModelScopeEmbeddings": {"ModelScope": "https://python.langchain.com/v0.2/docs/integrations/providers/modelscope/"}, "SagemakerEndpointEmbeddings": {"SageMaker": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/sagemaker-endpoint/", "AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/"}, "EmbeddingsContentHandler": {"SageMaker": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/sagemaker-endpoint/"}, "DocArrayInMemorySearch": {"UpstageEmbeddings": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/upstage/", "DocArray InMemorySearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_in_memory/"}, "SambaStudioEmbeddings": {"SambaNova": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/sambanova/"}, "OpenVINOEmbeddings": {"OpenVINO": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/openvino/", "OpenVINO Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openvino_rerank/"}, "OpenVINOBgeEmbeddings": {"OpenVINO": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/openvino/"}, "LocalAIEmbeddings": {"LocalAI": "https://python.langchain.com/v0.2/docs/integrations/text_embedding/localai/"}, "AzureAISearchRetriever": {"Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/azure_ai_search/", "Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/"}, "AzureSearch": {"Azure AI Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azuresearch/"}, "RePhraseQueryRetriever": {"RePhraseQuery": "https://python.langchain.com/v0.2/docs/integrations/retrievers/re_phrase/"}, "YouSearchAPIWrapper": {"You.com": "https://python.langchain.com/v0.2/docs/integrations/retrievers/you-retriever/", "You.com Search": "https://python.langchain.com/v0.2/docs/integrations/tools/you/"}, "YouRetriever": {"You.com": "https://python.langchain.com/v0.2/docs/integrations/retrievers/you-retriever/"}, "Kinetica": {"Kinetica Vectorstore based Retriever": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kinetica/", "Kinetica": "https://python.langchain.com/v0.2/docs/integrations/providers/kinetica/", "Kinetica Vectorstore API": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kinetica/"}, "KineticaSettings": {"Kinetica Vectorstore based Retriever": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kinetica/", "Kinetica Vectorstore API": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kinetica/", "Kinetica": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/kinetica/"}, "Jaguar": {"JaguarDB Vector Database": "https://python.langchain.com/v0.2/docs/integrations/retrievers/jaguar/", "Jaguar": "https://python.langchain.com/v0.2/docs/integrations/providers/jaguar/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/"}, "BaseStore": {"Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/"}, "VectorStore": {"Fleet AI Context": "https://python.langchain.com/v0.2/docs/integrations/retrievers/fleet_context/"}, "AskNewsRetriever": {"AskNews": "https://python.langchain.com/v0.2/docs/integrations/retrievers/asknews/"}, "LLMLinguaCompressor": {"LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/"}, "RetrievalQA": {"LLMLingua Document Compressor": "https://python.langchain.com/v0.2/docs/integrations/retrievers/llmlingua/", "Bedrock (Knowledge Bases)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/bedrock/", "Cohere reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere-reranker/", "Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "Confident": "https://python.langchain.com/v0.2/docs/integrations/callbacks/confident/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/", "ScaNN": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/scann/", "Google Vertex AI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "Momento Vector Index (MVI)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/momento_vector_index/", "Activeloop Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/activeloop_deeplake/", "StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/", "KDB.AI": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kdbai/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/", "Amazon Document DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/documentdb/", "MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/mongodb_atlas/", "VoyageAI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/voyageai-reranker/", "RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/", "Docugami": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docugami/"}, "ElasticSearchBM25Retriever": {"ElasticSearch BM25": "https://python.langchain.com/v0.2/docs/integrations/retrievers/elastic_search_bm25/"}, "OutlineRetriever": {"Outline": "https://python.langchain.com/v0.2/docs/integrations/providers/outline/"}, "ConversationalRetrievalChain": {"Outline": "https://python.langchain.com/v0.2/docs/integrations/retrievers/outline/", "Wikipedia": "https://python.langchain.com/v0.2/docs/integrations/retrievers/wikipedia/", "SEC filing": "https://python.langchain.com/v0.2/docs/integrations/retrievers/sec_filings/", "Arxiv": "https://python.langchain.com/v0.2/docs/integrations/retrievers/arxiv/", "Rememberizer": "https://python.langchain.com/v0.2/docs/integrations/retrievers/rememberizer/", "Kay.ai": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kay/", "Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/"}, "ZepMemory": {"Zep Open Source": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_memorystore/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/"}, "SearchScope": {"Zep Open Source": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_memorystore/"}, "ZepRetriever": {"Zep Open Source": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_memorystore/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/"}, "VespaRetriever": {"Vespa": "https://python.langchain.com/v0.2/docs/integrations/providers/vespa/"}, "AmazonKendraRetriever": {"Amazon Kendra": "https://python.langchain.com/v0.2/docs/integrations/retrievers/amazon_kendra_retriever/"}, "AmazonKnowledgeBasesRetriever": {"Bedrock (Knowledge Bases)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/bedrock/"}, "Bedrock": {"Bedrock (Knowledge Bases)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/bedrock/", "Bedrock": "https://python.langchain.com/v0.2/docs/integrations/llms/bedrock/"}, "CohereEmbeddings": {"Cohere reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere-reranker/"}, "Cohere": {"Cohere reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere-reranker/", "self-query-qdrant": "https://python.langchain.com/v0.2/docs/templates/self-query-qdrant/"}, "ZepCloudMemory": {"Zep Cloud": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_cloud_memorystore/", "ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/"}, "ZepCloudRetriever": {"Zep Cloud": "https://python.langchain.com/v0.2/docs/integrations/retrievers/zep_cloud_memorystore/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/", "Zep": "https://python.langchain.com/v0.2/docs/integrations/providers/zep/"}, "NeuralDBRetriever": {"**NeuralDB**": "https://python.langchain.com/v0.2/docs/integrations/retrievers/thirdai_neuraldb/"}, "SingleStoreDB": {"SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/singlestoredb/"}, "MetalRetriever": {"Metal": "https://python.langchain.com/v0.2/docs/integrations/providers/metal/"}, "BreebsRetriever": {"BREEBS (Open Knowledge)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/breebs/"}, "ChatGPTPluginRetriever": {"ChatGPT plugin": "https://python.langchain.com/v0.2/docs/integrations/retrievers/chatgpt-plugin/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/"}, "KayAiRetriever": {"SEC filing": "https://python.langchain.com/v0.2/docs/integrations/retrievers/sec_filings/", "Kay.ai": "https://python.langchain.com/v0.2/docs/integrations/retrievers/kay/"}, "CohereRagRetriever": {"Cohere RAG": "https://python.langchain.com/v0.2/docs/integrations/retrievers/cohere/", "Cohere": "https://python.langchain.com/v0.2/docs/integrations/providers/cohere/"}, "DriaRetriever": {"Dria": "https://python.langchain.com/v0.2/docs/integrations/retrievers/dria_index/"}, "DocArrayRetriever": {"DocArray": "https://python.langchain.com/v0.2/docs/integrations/retrievers/docarray_retriever/"}, "SVMRetriever": {"SVM": "https://python.langchain.com/v0.2/docs/integrations/retrievers/svm/"}, "TavilySearchAPIRetriever": {"Tavily Search API": "https://python.langchain.com/v0.2/docs/integrations/retrievers/tavily/"}, "PineconeHybridSearchRetriever": {"Pinecone Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/pinecone_hybrid_search/", "Pinecone": "https://python.langchain.com/v0.2/docs/integrations/providers/pinecone/"}, "DeepLake": {"Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/activeloop_deeplake_self_query/", "Activeloop Deep Lake": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/activeloop_deeplake/"}, "AsyncHtmlLoader": {"Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "HTML to text": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/html2text/", "Markdownify": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/markdownify/", "AsyncHtml": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/async_html/"}, "Html2TextTransformer": {"Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "HTML to text": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/html2text/", "Async Chromium": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/async_chromium/"}, "create_structured_output_chain": {"Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/"}, "HumanMessagePromptTemplate": {"Activeloop Deep Memory": "https://python.langchain.com/v0.2/docs/integrations/retrievers/activeloop/", "JinaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/jinachat/", "Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/", "vLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/vllm/", "Context": "https://python.langchain.com/v0.2/docs/integrations/callbacks/context/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Figma": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/figma/"}, "PubMedRetriever": {"PubMed": "https://python.langchain.com/v0.2/docs/integrations/providers/pubmed/"}, "WeaviateHybridSearchRetriever": {"Weaviate Hybrid Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/weaviate-hybrid/"}, "EmbedchainRetriever": {"Embedchain": "https://python.langchain.com/v0.2/docs/integrations/retrievers/embedchain/"}, "ArxivRetriever": {"Arxiv": "https://python.langchain.com/v0.2/docs/integrations/providers/arxiv/"}, "QdrantSparseVectorRetriever": {"Qdrant Sparse Vector": "https://python.langchain.com/v0.2/docs/integrations/retrievers/qdrant-sparse/"}, "DeterministicFakeEmbedding": {"Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/elasticsearch_retriever/"}, "Embeddings": {"Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/retrievers/elasticsearch_retriever/", "Infinispan": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/infinispanvs/"}, "RememberizerRetriever": {"Rememberizer": "https://python.langchain.com/v0.2/docs/integrations/retrievers/rememberizer/"}, "ArceeRetriever": {"Arcee": "https://python.langchain.com/v0.2/docs/integrations/providers/arcee/"}, "FlashrankRerank": {"FlashRank reranker": "https://python.langchain.com/v0.2/docs/integrations/retrievers/flashrank-reranker/", "UpTrain": "https://python.langchain.com/v0.2/docs/integrations/callbacks/uptrain/"}, "ChaindeskRetriever": {"Chaindesk": "https://python.langchain.com/v0.2/docs/integrations/providers/chaindesk/"}, "MergerRetriever": {"LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/"}, "EmbeddingsClusteringFilter": {"LOTR (Merger Retriever)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/merger_retriever/"}, "TFIDFRetriever": {"TF-IDF": "https://python.langchain.com/v0.2/docs/integrations/retrievers/tf_idf/"}, "GoogleVertexAIMultiTurnSearchRetriever": {"Google Vertex AI Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/google_vertex_ai_search/"}, "GoogleVertexAISearchRetriever": {"Google Vertex AI Search": "https://python.langchain.com/v0.2/docs/integrations/retrievers/google_vertex_ai_search/", "Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/"}, "PGVector": {"PGVector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/pgvector_self_query/", "PGVector": "https://python.langchain.com/v0.2/docs/integrations/providers/pgvector/"}, "Weaviate": {"Weaviate": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/weaviate_self_query/"}, "Vectara": {"Vectara ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/vectara_self_query/", "Vectara": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vectara/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/"}, "DashVector": {"DashVector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dashvector/"}, "Tongyi": {"DashVector": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/dashvector/", "Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/", "Tongyi Qwen": "https://python.langchain.com/v0.2/docs/integrations/llms/tongyi/"}, "DatabricksVectorSearch": {"Databricks Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/databricks_vector_search/"}, "Dingo": {"DingoDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/dingo/"}, "OpenSearchVectorSearch": {"OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/opensearch/", "AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/"}, "ConnectionParams": {"Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/", "Baidu VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiduvectordb/"}, "MetaField": {"Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/"}, "TencentVectorDB": {"Tencent Cloud VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tencentvectordb/", "Tencent": "https://python.langchain.com/v0.2/docs/integrations/providers/tencent/"}, "TimescaleVector": {"Timescale Vector (Postgres) ": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/timescalevector_self_query/", "Timescale Vector (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/timescalevector/"}, "AstraDB": {"Astra DB (Cassandra)": "https://python.langchain.com/v0.2/docs/integrations/retrievers/self_query/astradb/"}, "SupabaseVectorStore": {"Supabase (Postgres)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/supabase/"}, "Redis": {"Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/redis/"}, "MyScale": {"MyScale": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/myscale/"}, "MongoDBAtlasVectorSearch": {"MongoDB Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/mongodb_atlas/"}, "Qdrant": {"Qdrant": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/qdrant/"}, "AzureMLOnlineEndpoint": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/"}, "AzureOpenAI": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/", "Azure OpenAI": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_openai/"}, "AzureChatOpenAI": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/", "AzureChatOpenAI": "https://python.langchain.com/v0.2/docs/integrations/chat/azure_chat_openai/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/v0.2/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "AzureAIDataLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure AI Data": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/azure_ai_data/"}, "AzureBlobStorageContainerLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure Blob Storage Container": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/azure_blob_storage_container/"}, "AzureBlobStorageFileLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure Blob Storage File": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/azure_blob_storage_file/"}, "OneDriveLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Microsoft OneDrive": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_onedrive/"}, "UnstructuredWordDocumentLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Microsoft Word": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_word/"}, "UnstructuredExcelLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Microsoft Excel": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_excel/"}, "SharePointLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Microsoft SharePoint": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_sharepoint/"}, "UnstructuredPowerPointLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Microsoft PowerPoint": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_powerpoint/"}, "OneNoteLoader": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Microsoft OneNote": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_onenote/"}, "AzureCosmosDBVectorSearch": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure Cosmos DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/azure_cosmos_db/"}, "O365Toolkit": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Office365": "https://python.langchain.com/v0.2/docs/integrations/toolkits/office365/"}, "PowerBIToolkit": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "PowerBI Dataset": "https://python.langchain.com/v0.2/docs/integrations/toolkits/powerbi/"}, "PowerBIDataset": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "PowerBI Dataset": "https://python.langchain.com/v0.2/docs/integrations/toolkits/powerbi/"}, "GremlinGraph": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/v0.2/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "GraphDocument": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/v0.2/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "Node": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/v0.2/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "Relationship": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/v0.2/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "BingSearchAPIWrapper": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/", "Bing Search": "https://python.langchain.com/v0.2/docs/integrations/tools/bing_search/"}, "PresidioAnonymizer": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/"}, "PresidioReversibleAnonymizer": {"Microsoft": "https://python.langchain.com/v0.2/docs/integrations/platforms/microsoft/"}, "AmazonAPIGateway": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Amazon API Gateway": "https://python.langchain.com/v0.2/docs/integrations/llms/amazon_api_gateway/"}, "ContentHandlerBase": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/"}, "S3DirectoryLoader": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "AWS S3 Directory": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/aws_s3_directory/"}, "S3FileLoader": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "AWS S3 File": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/aws_s3_file/"}, "AthenaLoader": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Athena": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/athena/"}, "DynamoDBChatMessageHistory": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "AWS DynamoDB": "https://python.langchain.com/v0.2/docs/integrations/memory/aws_dynamodb/"}, "NeptuneGraph": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Amazon Neptune with Cypher": "https://python.langchain.com/v0.2/docs/integrations/graphs/amazon_neptune_open_cypher/"}, "NeptuneAnalyticsGraph": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Amazon Neptune with Cypher": "https://python.langchain.com/v0.2/docs/integrations/graphs/amazon_neptune_open_cypher/"}, "NeptuneOpenCypherQAChain": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Amazon Neptune with Cypher": "https://python.langchain.com/v0.2/docs/integrations/graphs/amazon_neptune_open_cypher/"}, "NeptuneRdfGraph": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Amazon Neptune with SPARQL": "https://python.langchain.com/v0.2/docs/integrations/graphs/amazon_neptune_sparql/"}, "NeptuneSparqlQAChain": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "Amazon Neptune with SPARQL": "https://python.langchain.com/v0.2/docs/integrations/graphs/amazon_neptune_sparql/"}, "SageMakerCallbackHandler": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/", "SageMaker Tracking": "https://python.langchain.com/v0.2/docs/integrations/callbacks/sagemaker_tracking/"}, "AmazonComprehendModerationChain": {"AWS": "https://python.langchain.com/v0.2/docs/integrations/platforms/aws/"}, "ChatHuggingFace": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/"}, "HuggingFacePipeline": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/platforms/huggingface/", "Hugging Face Local Pipelines": "https://python.langchain.com/v0.2/docs/integrations/llms/huggingface_pipelines/", "LM Format Enforcer": "https://python.langchain.com/v0.2/docs/integrations/llms/lmformatenforcer_experimental/", "RELLM": "https://python.langchain.com/v0.2/docs/integrations/llms/rellm_experimental/", "JSONFormer": "https://python.langchain.com/v0.2/docs/integrations/llms/jsonformer_experimental/", "OpenVINO": "https://python.langchain.com/v0.2/docs/integrations/llms/openvino/"}, "HuggingFaceHubEmbeddings": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/platforms/huggingface/"}, "HuggingFaceDatasetLoader": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/platforms/huggingface/", "HuggingFace dataset": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/hugging_face_dataset/"}, "load_huggingface_tool": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/platforms/huggingface/", "HuggingFace Hub Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/huggingface_tools/"}, "ChatGPTLoader": {"OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/", "ChatGPT Data": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/chatgpt_loader/"}, "DallEAPIWrapper": {"OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/", "Dall-E Image Generator": "https://python.langchain.com/v0.2/docs/integrations/tools/dalle_image_generator/"}, "OpenAIModerationChain": {"OpenAI": "https://python.langchain.com/v0.2/docs/integrations/platforms/openai/"}, "GoogleGenerativeAI": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_ai/"}, "VertexAIModelGarden": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "ChatGoogleGenerativeAI": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google AI chat models": "https://python.langchain.com/v0.2/docs/integrations/chat/google_generative_ai/"}, "VectorSearchVectorStore": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Vertex AI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_vertex_ai_vector_search/"}, "ScaNN": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "ScaNN": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/scann/"}, "GoogleDocumentAIWarehouseRetriever": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/"}, "GoogleFinanceQueryRun": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Finance": "https://python.langchain.com/v0.2/docs/integrations/tools/google_finance/"}, "GoogleFinanceAPIWrapper": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Finance": "https://python.langchain.com/v0.2/docs/integrations/tools/google_finance/"}, "GoogleJobsQueryRun": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Jobs": "https://python.langchain.com/v0.2/docs/integrations/tools/google_jobs/"}, "GoogleLensQueryRun": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Lens": "https://python.langchain.com/v0.2/docs/integrations/tools/google_lens/"}, "GoogleLensAPIWrapper": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Lens": "https://python.langchain.com/v0.2/docs/integrations/tools/google_lens/"}, "GooglePlacesTool": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Places": "https://python.langchain.com/v0.2/docs/integrations/tools/google_places/"}, "GoogleScholarQueryRun": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Scholar": "https://python.langchain.com/v0.2/docs/integrations/tools/google_scholar/"}, "GoogleScholarAPIWrapper": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Scholar": "https://python.langchain.com/v0.2/docs/integrations/tools/google_scholar/"}, "GoogleTrendsQueryRun": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Trends": "https://python.langchain.com/v0.2/docs/integrations/tools/google_trends/"}, "GoogleTrendsAPIWrapper": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Trends": "https://python.langchain.com/v0.2/docs/integrations/tools/google_trends/"}, "SearchApiAPIWrapper": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "SearchApi": "https://python.langchain.com/v0.2/docs/integrations/providers/searchapi/"}, "SerpAPIWrapper": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "SerpAPI": "https://python.langchain.com/v0.2/docs/integrations/providers/serpapi/", "Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/"}, "GoogleSerperAPIWrapper": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "Google Serper": "https://python.langchain.com/v0.2/docs/integrations/tools/google_serper/", "Serper - Google Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/google_serper/"}, "YouTubeSearchTool": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "YouTube": "https://python.langchain.com/v0.2/docs/integrations/tools/youtube/"}, "YoutubeAudioLoader": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/"}, "OpenAIWhisperParser": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "YouTube audio": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_audio/"}, "YoutubeLoader": {"Google": "https://python.langchain.com/v0.2/docs/integrations/platforms/google/", "YouTube": "https://python.langchain.com/v0.2/docs/integrations/providers/youtube/", "YouTube transcripts": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_transcript/", "Build a Query Analysis System": "https://python.langchain.com/v0.2/docs/tutorials/query_analysis/"}, "AnthropicLLM": {"Anthropic": "https://python.langchain.com/v0.2/docs/integrations/platforms/anthropic/", "AnthropicLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/anthropic/"}, "AIPluginTool": {"ChatGPT Plugins": "https://python.langchain.com/v0.2/docs/integrations/tools/chatgpt_plugins/"}, "AgentType": {"ChatGPT Plugins": "https://python.langchain.com/v0.2/docs/integrations/tools/chatgpt_plugins/", "Connery Action Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/connery/", "Google Jobs": "https://python.langchain.com/v0.2/docs/integrations/tools/google_jobs/", "Google Serper": "https://python.langchain.com/v0.2/docs/integrations/tools/google_serper/", "E2B Data Analysis": "https://python.langchain.com/v0.2/docs/integrations/tools/e2b_data_analysis/", "Human as a tool": "https://python.langchain.com/v0.2/docs/integrations/tools/human_tools/", "Yahoo Finance News": "https://python.langchain.com/v0.2/docs/integrations/tools/yahoo_finance_news/", "Google Finance": "https://python.langchain.com/v0.2/docs/integrations/tools/google_finance/", "AWS Lambda": "https://python.langchain.com/v0.2/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/v0.2/docs/integrations/tools/google_drive/", "OpenWeatherMap": "https://python.langchain.com/v0.2/docs/integrations/tools/openweathermap/", "Memorize": "https://python.langchain.com/v0.2/docs/integrations/tools/memorize/", "Search Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/search_tools/", "Eleven Labs Text2Speech": "https://python.langchain.com/v0.2/docs/integrations/tools/eleven_labs_tts/", "Bearly Code Interpreter": "https://python.langchain.com/v0.2/docs/integrations/tools/bearly/", "Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/", "GraphQL": "https://python.langchain.com/v0.2/docs/integrations/tools/graphql/", "SearchApi": "https://python.langchain.com/v0.2/docs/integrations/providers/searchapi/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/tools/edenai_tools/", "Shell (bash)": "https://python.langchain.com/v0.2/docs/integrations/tools/bash/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/memory/xata_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Comet Tracing": "https://python.langchain.com/v0.2/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/v0.2/docs/integrations/callbacks/argilla/", "Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/", "MLflow": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_tracking/", "Serper - Google Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/google_serper/", "Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/", "WandB Tracing": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/v0.2/docs/integrations/providers/clearml_tracking/", "Connery Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/connery/", "CSV": "https://python.langchain.com/v0.2/docs/integrations/toolkits/csv/", "Jira": "https://python.langchain.com/v0.2/docs/integrations/toolkits/jira/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Azure Cognitive Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_cognitive_services/", "Natural Language APIs": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi_nla/", "Steam Game Recommendation & Game Details": "https://python.langchain.com/v0.2/docs/integrations/toolkits/steam/", "Airbyte Question Answering": "https://python.langchain.com/v0.2/docs/integrations/toolkits/airbyte_structured_qa/", "Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/", "ClickUp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/clickup/", "AINetwork": "https://python.langchain.com/v0.2/docs/integrations/toolkits/ainetwork/", "PlayWright Browser": "https://python.langchain.com/v0.2/docs/integrations/toolkits/playwright/", "Office365": "https://python.langchain.com/v0.2/docs/integrations/toolkits/office365/", "Pandas Dataframe": "https://python.langchain.com/v0.2/docs/integrations/toolkits/pandas/", "NASA": "https://python.langchain.com/v0.2/docs/integrations/toolkits/nasa/", "Gitlab": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gitlab/", "Amazon API Gateway": "https://python.langchain.com/v0.2/docs/integrations/llms/amazon_api_gateway/"}, "initialize_agent": {"ChatGPT Plugins": "https://python.langchain.com/v0.2/docs/integrations/tools/chatgpt_plugins/", "Connery Action Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/connery/", "Google Jobs": "https://python.langchain.com/v0.2/docs/integrations/tools/google_jobs/", "Google Serper": "https://python.langchain.com/v0.2/docs/integrations/tools/google_serper/", "E2B Data Analysis": "https://python.langchain.com/v0.2/docs/integrations/tools/e2b_data_analysis/", "Human as a tool": "https://python.langchain.com/v0.2/docs/integrations/tools/human_tools/", "Yahoo Finance News": "https://python.langchain.com/v0.2/docs/integrations/tools/yahoo_finance_news/", "Google Finance": "https://python.langchain.com/v0.2/docs/integrations/tools/google_finance/", "AWS Lambda": "https://python.langchain.com/v0.2/docs/integrations/tools/awslambda/", "Google Drive": "https://python.langchain.com/v0.2/docs/integrations/tools/google_drive/", "OpenWeatherMap": "https://python.langchain.com/v0.2/docs/integrations/tools/openweathermap/", "Memorize": "https://python.langchain.com/v0.2/docs/integrations/tools/memorize/", "Search Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/search_tools/", "Eleven Labs Text2Speech": "https://python.langchain.com/v0.2/docs/integrations/tools/eleven_labs_tts/", "Bearly Code Interpreter": "https://python.langchain.com/v0.2/docs/integrations/tools/bearly/", "Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/", "GraphQL": "https://python.langchain.com/v0.2/docs/integrations/tools/graphql/", "SearchApi": "https://python.langchain.com/v0.2/docs/integrations/providers/searchapi/", "Gradio": "https://python.langchain.com/v0.2/docs/integrations/tools/gradio_tools/", "SceneXplain": "https://python.langchain.com/v0.2/docs/integrations/tools/sceneXplain/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/tools/edenai_tools/", "Dall-E Image Generator": "https://python.langchain.com/v0.2/docs/integrations/tools/dalle_image_generator/", "Shell (bash)": "https://python.langchain.com/v0.2/docs/integrations/tools/bash/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/memory/xata_chat_message_history/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "SageMaker Tracking": "https://python.langchain.com/v0.2/docs/integrations/callbacks/sagemaker_tracking/", "Comet Tracing": "https://python.langchain.com/v0.2/docs/integrations/callbacks/comet_tracing/", "Argilla": "https://python.langchain.com/v0.2/docs/integrations/callbacks/argilla/", "Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/", "MLflow": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_tracking/", "Serper - Google Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/google_serper/", "Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/", "WandB Tracing": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracing/", "ClearML": "https://python.langchain.com/v0.2/docs/integrations/providers/clearml_tracking/", "Connery Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/connery/", "Jira": "https://python.langchain.com/v0.2/docs/integrations/toolkits/jira/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Azure Cognitive Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_cognitive_services/", "Natural Language APIs": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi_nla/", "Steam Game Recommendation & Game Details": "https://python.langchain.com/v0.2/docs/integrations/toolkits/steam/", "Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/", "ClickUp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/clickup/", "AINetwork": "https://python.langchain.com/v0.2/docs/integrations/toolkits/ainetwork/", "PlayWright Browser": "https://python.langchain.com/v0.2/docs/integrations/toolkits/playwright/", "Office365": "https://python.langchain.com/v0.2/docs/integrations/toolkits/office365/", "NASA": "https://python.langchain.com/v0.2/docs/integrations/toolkits/nasa/", "Gitlab": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gitlab/", "Amazon API Gateway": "https://python.langchain.com/v0.2/docs/integrations/llms/amazon_api_gateway/"}, "DataForSeoAPIWrapper": {"DataForSEO": "https://python.langchain.com/v0.2/docs/integrations/providers/dataforseo/"}, "Tool": {"DataForSEO": "https://python.langchain.com/v0.2/docs/integrations/tools/dataforseo/", "Python REPL": "https://python.langchain.com/v0.2/docs/integrations/tools/python/", "Google Serper": "https://python.langchain.com/v0.2/docs/integrations/tools/google_serper/", "SerpAPI": "https://python.langchain.com/v0.2/docs/integrations/tools/serpapi/", "SearchApi": "https://python.langchain.com/v0.2/docs/integrations/providers/searchapi/", "Google Search": "https://python.langchain.com/v0.2/docs/integrations/tools/google_search/", "Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/", "Ionic Shopping Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/ionic_shopping/", "Zep Open Source Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory/", "Zep Cloud Memory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_memory_cloud/", "Serper - Google Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/google_serper/", "Document Comparison": "https://python.langchain.com/v0.2/docs/integrations/toolkits/document_comparison_toolkit/", "Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/"}, "ConneryService": {"Connery Action Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/connery/", "Connery Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/connery/"}, "DataheraldAPIWrapper": {"Dataherald": "https://python.langchain.com/v0.2/docs/integrations/providers/dataherald/"}, "SearxSearchWrapper": {"SearxNG Search": "https://python.langchain.com/v0.2/docs/integrations/tools/searx_search/", "SearxNG Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/searx/"}, "PythonREPL": {"Python REPL": "https://python.langchain.com/v0.2/docs/integrations/tools/python/"}, "GoogleJobsAPIWrapper": {"Google Jobs": "https://python.langchain.com/v0.2/docs/integrations/tools/google_jobs/"}, "create_openai_functions_agent": {"Tavily Search": "https://python.langchain.com/v0.2/docs/integrations/tools/tavily_search/", "Infobip": "https://python.langchain.com/v0.2/docs/integrations/tools/infobip/", "AskNews": "https://python.langchain.com/v0.2/docs/integrations/tools/asknews/", "Semantic Scholar API Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/semanticscholar/", "Passio NutritionAI": "https://python.langchain.com/v0.2/docs/integrations/tools/passio_nutrition_ai/", "You.com Search": "https://python.langchain.com/v0.2/docs/integrations/tools/you/", "Python": "https://python.langchain.com/v0.2/docs/integrations/toolkits/python/", "Gmail": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gmail/", "MultiOn": "https://python.langchain.com/v0.2/docs/integrations/toolkits/multion/", "Polygon IO Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/polygon/"}, "InfobipAPIWrapper": {"Infobip": "https://python.langchain.com/v0.2/docs/integrations/tools/infobip/"}, "AskNewsSearch": {"AskNews": "https://python.langchain.com/v0.2/docs/integrations/tools/asknews/"}, "E2BDataAnalysisTool": {"E2B Data Analysis": "https://python.langchain.com/v0.2/docs/integrations/tools/e2b_data_analysis/"}, "HumanInputRun": {"Human as a tool": "https://python.langchain.com/v0.2/docs/integrations/tools/human_tools/"}, "NucliaUnderstandingAPI": {"Nuclia Understanding": "https://python.langchain.com/v0.2/docs/integrations/tools/nuclia/", "Nuclia": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/nuclia/"}, "YahooFinanceNewsTool": {"Yahoo Finance News": "https://python.langchain.com/v0.2/docs/integrations/tools/yahoo_finance_news/"}, "WikidataAPIWrapper": {"Wikidata": "https://python.langchain.com/v0.2/docs/integrations/tools/wikidata/"}, "WikidataQueryRun": {"Wikidata": "https://python.langchain.com/v0.2/docs/integrations/tools/wikidata/"}, "TwilioAPIWrapper": {"Twilio": "https://python.langchain.com/v0.2/docs/integrations/tools/twilio/"}, "IFTTTWebhook": {"IFTTT WebHooks": "https://python.langchain.com/v0.2/docs/integrations/tools/ifttt/"}, "SemanticScholarQueryRun": {"Semantic Scholar API Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/semanticscholar/"}, "AlphaVantageAPIWrapper": {"Alpha Vantage": "https://python.langchain.com/v0.2/docs/integrations/tools/alpha_vantage/"}, "GoogleCloudTextToSpeechTool": {"Google Cloud Text-to-Speech": "https://python.langchain.com/v0.2/docs/integrations/tools/google_cloud_texttospeech/"}, "OracleSummary": {"Oracle AI Vector Search: Generate Summary": "https://python.langchain.com/v0.2/docs/integrations/tools/oracleai/", "OracleAI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/providers/oracleai/"}, "StackExchangeAPIWrapper": {"StackExchange": "https://python.langchain.com/v0.2/docs/integrations/tools/stackexchange/", "Stack Exchange": "https://python.langchain.com/v0.2/docs/integrations/providers/stackexchange/"}, "TextRequestsWrapper": {"Requests": "https://python.langchain.com/v0.2/docs/integrations/tools/requests/"}, "JsonRequestsWrapper": {"Requests": "https://python.langchain.com/v0.2/docs/integrations/tools/requests/"}, "OpenWeatherMapAPIWrapper": {"OpenWeatherMap": "https://python.langchain.com/v0.2/docs/integrations/providers/openweathermap/"}, "get_from_env": {"Passio NutritionAI": "https://python.langchain.com/v0.2/docs/integrations/tools/passio_nutrition_ai/"}, "NutritionAI": {"Passio NutritionAI": "https://python.langchain.com/v0.2/docs/integrations/tools/passio_nutrition_ai/"}, "NutritionAIAPI": {"Passio NutritionAI": "https://python.langchain.com/v0.2/docs/integrations/tools/passio_nutrition_ai/"}, "PubmedQueryRun": {"PubMed": "https://python.langchain.com/v0.2/docs/integrations/tools/pubmed/"}, "ConversationBufferMemory": {"Memorize": "https://python.langchain.com/v0.2/docs/integrations/tools/memorize/", "Gradio": "https://python.langchain.com/v0.2/docs/integrations/tools/gradio_tools/", "SceneXplain": "https://python.langchain.com/v0.2/docs/integrations/tools/sceneXplain/", "Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/", "Xata": "https://python.langchain.com/v0.2/docs/integrations/memory/xata_chat_message_history/", "Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/", "NVIDIA NIMs": "https://python.langchain.com/v0.2/docs/integrations/chat/nvidia_ai_endpoints/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/", "Bedrock": "https://python.langchain.com/v0.2/docs/integrations/llms/bedrock/"}, "GradientLLM": {"Memorize": "https://python.langchain.com/v0.2/docs/integrations/tools/memorize/", "Gradient": "https://python.langchain.com/v0.2/docs/integrations/llms/gradient/"}, "ElevenLabsText2SpeechTool": {"Eleven Labs Text2Speech": "https://python.langchain.com/v0.2/docs/integrations/tools/eleven_labs_tts/", "ElevenLabs": "https://python.langchain.com/v0.2/docs/integrations/providers/elevenlabs/"}, "BearlyInterpreterTool": {"Bearly Code Interpreter": "https://python.langchain.com/v0.2/docs/integrations/tools/bearly/"}, "VectorstoreIndexCreator": {"Apify": "https://python.langchain.com/v0.2/docs/integrations/tools/apify/", "HuggingFace dataset": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/hugging_face_dataset/", "Spreedly": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/spreedly/", "Image captions": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/image_captions/", "Figma": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/figma/", "Apify Dataset": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/apify_dataset/", "Iugu": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/iugu/", "Stripe": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/stripe/", "Modern Treasury": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/modern_treasury/"}, "ApifyWrapper": {"Apify": "https://python.langchain.com/v0.2/docs/integrations/providers/apify/"}, "ZapierToolkit": {"Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/"}, "ZapierNLAWrapper": {"Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/"}, "SimpleSequentialChain": {"Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/", "SageMaker Tracking": "https://python.langchain.com/v0.2/docs/integrations/callbacks/sagemaker_tracking/", "Rebuff": "https://python.langchain.com/v0.2/docs/integrations/providers/rebuff/", "Predibase": "https://python.langchain.com/v0.2/docs/integrations/llms/predibase/", "Eden AI": "https://python.langchain.com/v0.2/docs/integrations/llms/edenai/", "Replicate": "https://python.langchain.com/v0.2/docs/integrations/llms/replicate/"}, "TransformChain": {"Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/", "Rebuff": "https://python.langchain.com/v0.2/docs/integrations/providers/rebuff/"}, "ZapierNLARunAction": {"Zapier Natural Language Actions": "https://python.langchain.com/v0.2/docs/integrations/tools/zapier/"}, "RivaASR": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/v0.2/docs/integrations/tools/nvidia_riva/"}, "RivaTTS": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/v0.2/docs/integrations/tools/nvidia_riva/"}, "RivaAudioEncoding": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/v0.2/docs/integrations/tools/nvidia_riva/"}, "AudioStream": {"NVIDIA Riva: ASR and TTS": "https://python.langchain.com/v0.2/docs/integrations/tools/nvidia_riva/"}, "GoldenQueryAPIWrapper": {"Golden Query": "https://python.langchain.com/v0.2/docs/integrations/tools/golden_query/", "Golden": "https://python.langchain.com/v0.2/docs/integrations/providers/golden/"}, "create_react_agent": {"ArXiv": "https://python.langchain.com/v0.2/docs/integrations/tools/arxiv/", "Ionic Shopping Tool": "https://python.langchain.com/v0.2/docs/integrations/tools/ionic_shopping/", "Streamlit": "https://python.langchain.com/v0.2/docs/integrations/callbacks/streamlit/", "Dataherald": "https://python.langchain.com/v0.2/docs/integrations/providers/dataherald/", "Python": "https://python.langchain.com/v0.2/docs/integrations/toolkits/python/", "Amadeus": "https://python.langchain.com/v0.2/docs/integrations/toolkits/amadeus/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/"}, "ArxivAPIWrapper": {"ArXiv": "https://python.langchain.com/v0.2/docs/integrations/tools/arxiv/"}, "DuckDuckGoSearchRun": {"DuckDuckGo Search": "https://python.langchain.com/v0.2/docs/integrations/tools/ddg/", "Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/"}, "DuckDuckGoSearchResults": {"DuckDuckGo Search": "https://python.langchain.com/v0.2/docs/integrations/tools/ddg/"}, "DuckDuckGoSearchAPIWrapper": {"DuckDuckGo Search": "https://python.langchain.com/v0.2/docs/integrations/tools/ddg/"}, "SceneXplainTool": {"SceneXplain": "https://python.langchain.com/v0.2/docs/integrations/tools/sceneXplain/"}, "WolframAlphaAPIWrapper": {"Wolfram Alpha": "https://python.langchain.com/v0.2/docs/integrations/providers/wolfram_alpha/"}, "OpenAIFunctionsAgent": {"Exa Search": "https://python.langchain.com/v0.2/docs/integrations/tools/exa_search/", "LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/", "Robocorp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/robocorp/"}, "EdenAiExplicitImageTool": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "EdenAiObjectDetectionTool": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "EdenAiParsingIDTool": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "EdenAiParsingInvoiceTool": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "EdenAiSpeechToTextTool": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "EdenAiTextModerationTool": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "EdenAiTextToSpeechTool": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "EdenAI": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/llms/edenai/"}, "MojeekSearch": {"Mojeek Search": "https://python.langchain.com/v0.2/docs/integrations/tools/mojeek_search/"}, "GoogleSearchAPIWrapper": {"Google Search": "https://python.langchain.com/v0.2/docs/integrations/tools/google_search/", "Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/"}, "RedditSearchRun": {"Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/"}, "RedditSearchAPIWrapper": {"Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/"}, "RedditSearchSchema": {"Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/"}, "StructuredChatAgent": {"Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/"}, "ReadOnlySharedMemory": {"Reddit Search ": "https://python.langchain.com/v0.2/docs/integrations/tools/reddit_search/"}, "YouSearchTool": {"You.com Search": "https://python.langchain.com/v0.2/docs/integrations/tools/you/"}, "VertexAIImageGeneratorChat": {"Google Imagen": "https://python.langchain.com/v0.2/docs/integrations/tools/google_imagen/"}, "VertexAIImageEditorChat": {"Google Imagen": "https://python.langchain.com/v0.2/docs/integrations/tools/google_imagen/"}, "VertexAIImageCaptioning": {"Google Imagen": "https://python.langchain.com/v0.2/docs/integrations/tools/google_imagen/"}, "VertexAIVisualQnAChat": {"Google Imagen": "https://python.langchain.com/v0.2/docs/integrations/tools/google_imagen/"}, "ShellTool": {"Shell (bash)": "https://python.langchain.com/v0.2/docs/integrations/tools/bash/"}, "PolygonAggregates": {"Polygon Stock Market API Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/polygon/"}, "PolygonFinancials": {"Polygon Stock Market API Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/polygon/"}, "PolygonLastQuote": {"Polygon Stock Market API Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/polygon/"}, "PolygonTickerNews": {"Polygon Stock Market API Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/polygon/"}, "PolygonAPIWrapper": {"Polygon Stock Market API Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/polygon/", "Polygon IO Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/polygon/"}, "PolygonAggregatesSchema": {"Polygon Stock Market API Tools": "https://python.langchain.com/v0.2/docs/integrations/tools/polygon/"}, "FileManagementToolkit": {"File System": "https://python.langchain.com/v0.2/docs/integrations/tools/filesystem/"}, "BraveSearch": {"Brave Search": "https://python.langchain.com/v0.2/docs/integrations/providers/brave_search/"}, "RedisChatMessageHistory": {"Redis": "https://python.langchain.com/v0.2/docs/integrations/memory/redis_chat_message_history/"}, "ElasticsearchChatMessageHistory": {"Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/memory/elasticsearch_chat_message_history/"}, "UpstashRedisChatMessageHistory": {"Upstash Redis": "https://python.langchain.com/v0.2/docs/integrations/memory/upstash_redis_chat_message_history/", "Upstash Vector": "https://python.langchain.com/v0.2/docs/integrations/providers/upstash/"}, "ZepCloudChatMessageHistory": {"ZepCloudChatMessageHistory": "https://python.langchain.com/v0.2/docs/integrations/memory/zep_cloud_chat_message_history/", "Zep": "https://python.langchain.com/v0.2/docs/integrations/providers/zep/"}, "SingleStoreDBChatMessageHistory": {"SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/providers/singlestoredb/"}, "PostgresChatMessageHistory": {"Postgres": "https://python.langchain.com/v0.2/docs/integrations/memory/postgres_chat_message_history/"}, "MomentoChatMessageHistory": {"Momento Cache": "https://python.langchain.com/v0.2/docs/integrations/memory/momento_chat_message_history/", "Momento": "https://python.langchain.com/v0.2/docs/integrations/providers/momento/"}, "XataChatMessageHistory": {"Xata": "https://python.langchain.com/v0.2/docs/integrations/providers/xata/"}, "XataVectorStore": {"Xata": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/xata/"}, "CassandraChatMessageHistory": {"Cassandra ": "https://python.langchain.com/v0.2/docs/integrations/memory/cassandra_chat_message_history/", "Cassandra": "https://python.langchain.com/v0.2/docs/integrations/providers/cassandra/"}, "MotorheadMemory": {"Mot\u00f6rhead": "https://python.langchain.com/v0.2/docs/integrations/providers/motorhead/"}, "AstraDBChatMessageHistory": {"Astra DB ": "https://python.langchain.com/v0.2/docs/integrations/memory/astradb_chat_message_history/"}, "StreamlitChatMessageHistory": {"Streamlit": "https://python.langchain.com/v0.2/docs/integrations/providers/streamlit/"}, "Neo4jChatMessageHistory": {"Neo4j": "https://python.langchain.com/v0.2/docs/integrations/memory/neo4j_chat_message_history/"}, "TiDBChatMessageHistory": {"TiDB": "https://python.langchain.com/v0.2/docs/integrations/providers/tidb/"}, "RocksetChatMessageHistory": {"Rockset": "https://python.langchain.com/v0.2/docs/integrations/providers/rockset/"}, "SolarChat": {"solar.md": "https://python.langchain.com/v0.2/docs/integrations/chat/solar/"}, "HuggingFaceEndpoint": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "Huggingface Endpoints": "https://python.langchain.com/v0.2/docs/integrations/llms/huggingface_endpoint/"}, "format_log_to_str": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/"}, "ReActJsonSingleInputOutputParser": {"Hugging Face": "https://python.langchain.com/v0.2/docs/integrations/chat/huggingface/", "MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/", "Amadeus": "https://python.langchain.com/v0.2/docs/integrations/toolkits/amadeus/"}, "AzureMLChatOnlineEndpoint": {"AzureMLChatOnlineEndpoint": "https://python.langchain.com/v0.2/docs/integrations/chat/azureml_chat_endpoint/"}, "AzureMLEndpointApiType": {"AzureMLChatOnlineEndpoint": "https://python.langchain.com/v0.2/docs/integrations/chat/azureml_chat_endpoint/", "Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/"}, "CustomOpenAIChatContentFormatter": {"AzureMLChatOnlineEndpoint": "https://python.langchain.com/v0.2/docs/integrations/chat/azureml_chat_endpoint/"}, "ChatKinetica": {"Kinetica SqlAssist LLM Demo": "https://python.langchain.com/v0.2/docs/integrations/chat/kinetica/", "Kinetica": "https://python.langchain.com/v0.2/docs/integrations/providers/kinetica/"}, "KineticaSqlOutputParser": {"Kinetica SqlAssist LLM Demo": "https://python.langchain.com/v0.2/docs/integrations/chat/kinetica/"}, "KineticaSqlResponse": {"Kinetica SqlAssist LLM Demo": "https://python.langchain.com/v0.2/docs/integrations/chat/kinetica/"}, "PaiEasChatEndpoint": {"Alibaba Cloud PAI EAS": "https://python.langchain.com/v0.2/docs/integrations/chat/alibaba_cloud_pai_eas/", "Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/"}, "ChatCoze": {"Chat with Coze Bot": "https://python.langchain.com/v0.2/docs/integrations/chat/coze/"}, "ChatOctoAI": {"ChatOctoAI": "https://python.langchain.com/v0.2/docs/integrations/chat/octoai/"}, "ChatDeepInfra": {"DeepInfra": "https://python.langchain.com/v0.2/docs/integrations/providers/deepinfra/"}, "ToolsOutputParser": {"ChatAnthropic": "https://python.langchain.com/v0.2/docs/integrations/chat/anthropic/"}, "ChatLiteLLM": {"ChatLiteLLM": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm/"}, "LlamaEdgeChatService": {"LlamaEdge": "https://python.langchain.com/v0.2/docs/integrations/chat/llama_edge/"}, "HarmBlockThreshold": {"Google AI chat models": "https://python.langchain.com/v0.2/docs/integrations/chat/google_generative_ai/", "ChatVertexAI": "https://python.langchain.com/v0.2/docs/integrations/chat/google_vertex_ai_palm/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/", "Google AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_ai/"}, "HarmCategory": {"Google AI chat models": "https://python.langchain.com/v0.2/docs/integrations/chat/google_generative_ai/", "ChatVertexAI": "https://python.langchain.com/v0.2/docs/integrations/chat/google_vertex_ai_palm/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/", "Google AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_ai/"}, "OllamaFunctions": {"OllamaFunctions": "https://python.langchain.com/v0.2/docs/integrations/chat/ollama_functions/", "Ollama": "https://python.langchain.com/v0.2/docs/integrations/providers/ollama/"}, "VolcEngineMaasChat": {"VolcEngineMaasChat": "https://python.langchain.com/v0.2/docs/integrations/chat/volcengine_maas/"}, "ChatLlamaAPI": {"ChatLlamaAPI": "https://python.langchain.com/v0.2/docs/integrations/chat/llama_api/"}, "create_tagging_chain": {"ChatLlamaAPI": "https://python.langchain.com/v0.2/docs/integrations/chat/llama_api/"}, "ChatKonko": {"ChatKonko": "https://python.langchain.com/v0.2/docs/integrations/chat/konko/"}, "create_structured_runnable": {"ChatVertexAI": "https://python.langchain.com/v0.2/docs/integrations/chat/google_vertex_ai_palm/"}, "MLXPipeline": {"MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/", "MLX Local Pipelines": "https://python.langchain.com/v0.2/docs/integrations/llms/mlx_pipelines/"}, "ChatMLX": {"MLX": "https://python.langchain.com/v0.2/docs/integrations/chat/mlx/"}, "GigaChat": {"GigaChat": "https://python.langchain.com/v0.2/docs/integrations/llms/gigachat/", "Salute Devices": "https://python.langchain.com/v0.2/docs/integrations/providers/salute_devices/"}, "JinaChat": {"JinaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/jinachat/"}, "SystemMessagePromptTemplate": {"JinaChat": "https://python.langchain.com/v0.2/docs/integrations/chat/jinachat/", "vLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/vllm/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Figma": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/figma/"}, "ChatOllama": {"ChatOllama": "https://python.langchain.com/v0.2/docs/integrations/chat/ollama/", "Ollama": "https://python.langchain.com/v0.2/docs/integrations/providers/ollama/"}, "ChatEverlyAI": {"ChatEverlyAI": "https://python.langchain.com/v0.2/docs/integrations/chat/everlyai/"}, "GPTRouter": {"GPTRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/gpt_router/"}, "GPTRouterModel": {"GPTRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/gpt_router/"}, "ChatLiteLLMRouter": {"ChatLiteLLMRouter": "https://python.langchain.com/v0.2/docs/integrations/chat/litellm_router/"}, "ChatFriendli": {"ChatFriendli": "https://python.langchain.com/v0.2/docs/integrations/chat/friendli/"}, "ChatZhipuAI": {"ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/"}, "create_json_chat_agent": {"ZHIPU AI": "https://python.langchain.com/v0.2/docs/integrations/chat/zhipuai/"}, "ChatBaichuan": {"Chat with Baichuan-192K": "https://python.langchain.com/v0.2/docs/integrations/chat/baichuan/", "Baichuan": "https://python.langchain.com/v0.2/docs/integrations/providers/baichuan/"}, "ChatTogether": {"Together AI": "https://python.langchain.com/v0.2/docs/integrations/llms/together/"}, "Together": {"Together AI": "https://python.langchain.com/v0.2/docs/integrations/llms/together/"}, "Llama2Chat": {"Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/"}, "HuggingFaceTextGenInference": {"Llama2Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/llama2_chat/"}, "QianfanChatEndpoint": {"QianfanChatEndpoint": "https://python.langchain.com/v0.2/docs/integrations/chat/baidu_qianfan_endpoint/", "ErnieBotChat": "https://python.langchain.com/v0.2/docs/integrations/chat/ernie/", "Baidu": "https://python.langchain.com/v0.2/docs/integrations/providers/baidu/"}, "ChatEdenAI": {"Eden AI": "https://python.langchain.com/v0.2/docs/integrations/providers/edenai/"}, "ErnieBotChat": {"ErnieBotChat": "https://python.langchain.com/v0.2/docs/integrations/chat/ernie/"}, "ChatHunyuan": {"Tencent Hunyuan": "https://python.langchain.com/v0.2/docs/integrations/chat/tencent_hunyuan/", "Tencent": "https://python.langchain.com/v0.2/docs/integrations/providers/tencent/"}, "MiniMaxChat": {"MiniMaxChat": "https://python.langchain.com/v0.2/docs/integrations/chat/minimax/", "Minimax": "https://python.langchain.com/v0.2/docs/integrations/providers/minimax/"}, "ChatYuan2": {"Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/chat/yuan2/"}, "ChatTongyi": {"ChatTongyi": "https://python.langchain.com/v0.2/docs/integrations/chat/tongyi/", "Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/"}, "PromptLayerChatOpenAI": {"PromptLayerChatOpenAI": "https://python.langchain.com/v0.2/docs/integrations/chat/promptlayer_chatopenai/", "PromptLayer": "https://python.langchain.com/v0.2/docs/integrations/providers/promptlayer/"}, "ChatSparkLLM": {"SparkLLM Chat": "https://python.langchain.com/v0.2/docs/integrations/chat/sparkllm/"}, "MoonshotChat": {"MoonshotChat": "https://python.langchain.com/v0.2/docs/integrations/chat/moonshot/"}, "ChatDappierAI": {"Dappier AI": "https://python.langchain.com/v0.2/docs/integrations/chat/dappier/"}, "ChatMaritalk": {"Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/"}, "load_qa_chain": {"Maritalk": "https://python.langchain.com/v0.2/docs/integrations/chat/maritalk/", "Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/", "Amazon Textract ": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/amazon_textract/", "SageMakerEndpoint": "https://python.langchain.com/v0.2/docs/integrations/llms/sagemaker/"}, "ChatPremAI": {"ChatPremAI": "https://python.langchain.com/v0.2/docs/integrations/chat/premai/", "PremAI": "https://python.langchain.com/v0.2/docs/integrations/providers/premai/"}, "ChatAnyscale": {"ChatAnyscale": "https://python.langchain.com/v0.2/docs/integrations/chat/anyscale/", "Anyscale": "https://python.langchain.com/v0.2/docs/integrations/providers/anyscale/"}, "ChatYandexGPT": {"ChatYandexGPT": "https://python.langchain.com/v0.2/docs/integrations/chat/yandex/", "Yandex": "https://python.langchain.com/v0.2/docs/integrations/providers/yandex/"}, "ChatPerplexity": {"ChatPerplexity": "https://python.langchain.com/v0.2/docs/integrations/chat/perplexity/"}, "ChatAnthropicTools": {"[Deprecated] Experimental Anthropic Tools Wrapper": "https://python.langchain.com/v0.2/docs/integrations/chat/anthropic_functions/"}, "ConversationChain": {"NVIDIA NIMs": "https://python.langchain.com/v0.2/docs/integrations/chat/nvidia_ai_endpoints/", "Bedrock": "https://python.langchain.com/v0.2/docs/integrations/llms/bedrock/"}, "DeepEvalCallbackHandler": {"Confident": "https://python.langchain.com/v0.2/docs/integrations/callbacks/confident/", "Confident AI": "https://python.langchain.com/v0.2/docs/integrations/providers/confident/"}, "LLMonitorCallbackHandler": {"LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/providers/llmonitor/"}, "identify": {"LLMonitor": "https://python.langchain.com/v0.2/docs/integrations/callbacks/llmonitor/"}, "ContextCallbackHandler": {"Context": "https://python.langchain.com/v0.2/docs/integrations/providers/context/"}, "FiddlerCallbackHandler": {"Fiddler": "https://python.langchain.com/v0.2/docs/integrations/providers/fiddler/"}, "LabelStudioCallbackHandler": {"Label Studio": "https://python.langchain.com/v0.2/docs/integrations/providers/labelstudio/"}, "CometTracer": {"Comet Tracing": "https://python.langchain.com/v0.2/docs/integrations/callbacks/comet_tracing/", "Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/"}, "ArgillaCallbackHandler": {"Argilla": "https://python.langchain.com/v0.2/docs/integrations/providers/argilla/"}, "StdOutCallbackHandler": {"Argilla": "https://python.langchain.com/v0.2/docs/integrations/callbacks/argilla/", "Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/", "Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/", "Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/", "ClearML": "https://python.langchain.com/v0.2/docs/integrations/providers/clearml_tracking/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/"}, "PromptLayerCallbackHandler": {"PromptLayer": "https://python.langchain.com/v0.2/docs/integrations/providers/promptlayer/"}, "StreamlitCallbackHandler": {"Streamlit": "https://python.langchain.com/v0.2/docs/integrations/providers/streamlit/", "GPT4All": "https://python.langchain.com/v0.2/docs/integrations/providers/gpt4all/"}, "UpTrainCallbackHandler": {"UpTrain": "https://python.langchain.com/v0.2/docs/integrations/providers/uptrain/"}, "TrubricsCallbackHandler": {"Trubrics": "https://python.langchain.com/v0.2/docs/integrations/providers/trubrics/"}, "InfinoCallbackHandler": {"Infino": "https://python.langchain.com/v0.2/docs/integrations/providers/infino/"}, "FigmaFileLoader": {"Figma": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/figma/"}, "Baseten": {"Baseten": "https://python.langchain.com/v0.2/docs/integrations/llms/baseten/"}, "WeatherDataLoader": {"Weather": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/weather/"}, "Tair": {"Tair": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tair/", "Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/"}, "CollegeConfidentialLoader": {"College Confidential": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/college_confidential/"}, "RWKV": {"RWKV-4": "https://python.langchain.com/v0.2/docs/integrations/providers/rwkv/"}, "LakeFSLoader": {"lakeFS": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/lakefs/"}, "FaunaLoader": {"Fauna": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/fauna/"}, "OCIGenAI": {"Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/v0.2/docs/integrations/providers/oci/", "# Oracle Cloud Infrastructure Generative AI": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_generative_ai/"}, "OCIModelDeploymentVLLM": {"Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/v0.2/docs/integrations/providers/oci/", "OCI Data Science Model Deployment Endpoint": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_model_deployment_endpoint/"}, "OCIModelDeploymentTGI": {"Oracle Cloud Infrastructure (OCI)": "https://python.langchain.com/v0.2/docs/integrations/providers/oci/", "OCI Data Science Model Deployment Endpoint": "https://python.langchain.com/v0.2/docs/integrations/llms/oci_model_deployment_endpoint/"}, "OracleDocLoader": {"OracleAI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/providers/oracleai/", "Oracle AI Vector Search: Document Processing": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/oracleai/"}, "OracleTextSplitter": {"OracleAI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/providers/oracleai/", "Oracle AI Vector Search: Document Processing": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/oracleai/"}, "OracleVS": {"OracleAI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/providers/oracleai/", "Oracle AI Vector Search: Vector Store": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/oracle/"}, "Lantern": {"Lantern": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/lantern/"}, "Fireworks": {"Fireworks": "https://python.langchain.com/v0.2/docs/integrations/llms/fireworks/"}, "DropboxLoader": {"Dropbox": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/dropbox/"}, "ForefrontAI": {"ForefrontAI": "https://python.langchain.com/v0.2/docs/integrations/llms/forefrontai/"}, "CometCallbackHandler": {"Comet": "https://python.langchain.com/v0.2/docs/integrations/providers/comet_tracking/"}, "CTransformers": {"C Transformers": "https://python.langchain.com/v0.2/docs/integrations/llms/ctransformers/"}, "BiliBiliLoader": {"BiliBili": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/bilibili/"}, "TencentCOSDirectoryLoader": {"Tencent": "https://python.langchain.com/v0.2/docs/integrations/providers/tencent/", "Tencent COS Directory": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/tencent_cos_directory/"}, "TencentCOSFileLoader": {"Tencent": "https://python.langchain.com/v0.2/docs/integrations/providers/tencent/", "Tencent COS File": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/tencent_cos_file/"}, "OBSDirectoryLoader": {"Huawei": "https://python.langchain.com/v0.2/docs/integrations/providers/huawei/", "Huawei OBS Directory": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/huawei_obs_directory/"}, "OBSFileLoader": {"Huawei": "https://python.langchain.com/v0.2/docs/integrations/providers/huawei/", "Huawei OBS File": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/huawei_obs_file/"}, "DiffbotLoader": {"Diffbot": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/diffbot/"}, "DiffbotGraphTransformer": {"Diffbot": "https://python.langchain.com/v0.2/docs/integrations/graphs/diffbot/", "Neo4j": "https://python.langchain.com/v0.2/docs/integrations/providers/neo4j/"}, "DeepSparse": {"DeepSparse": "https://python.langchain.com/v0.2/docs/integrations/llms/deepsparse/"}, "AimCallbackHandler": {"Aim": "https://python.langchain.com/v0.2/docs/integrations/providers/aim_tracking/"}, "ModernTreasuryLoader": {"Modern Treasury": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/modern_treasury/"}, "GitHubIssuesLoader": {"GitHub": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/github/"}, "GithubFileLoader": {"GitHub": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/github/"}, "Banana": {"Banana": "https://python.langchain.com/v0.2/docs/integrations/llms/banana/"}, "InfinispanVS": {"Infinispan VS": "https://python.langchain.com/v0.2/docs/integrations/providers/infinispanvs/", "Infinispan": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/infinispanvs/"}, "CerebriumAI": {"CerebriumAI": "https://python.langchain.com/v0.2/docs/integrations/llms/cerebriumai/"}, "GutenbergLoader": {"Gutenberg": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/gutenberg/"}, "WikipediaLoader": {"Wikipedia": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/wikipedia/", "Diffbot": "https://python.langchain.com/v0.2/docs/integrations/graphs/diffbot/"}, "ConfluenceLoader": {"Confluence": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/confluence/"}, "Predibase": {"Predibase": "https://python.langchain.com/v0.2/docs/integrations/llms/predibase/"}, "Beam": {"Beam": "https://python.langchain.com/v0.2/docs/integrations/llms/beam/"}, "GrobidParser": {"Grobid": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/grobid/"}, "Typesense": {"Typesense": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/typesense/"}, "Hologres": {"Hologres": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hologres/", "Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/"}, "ArangoGraph": {"ArangoDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/arangodb/"}, "ArangoGraphQAChain": {"ArangoDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/arangodb/"}, "ArcGISLoader": {"ArcGIS": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/arcgis/"}, "WandbCallbackHandler": {"Weights & Biases": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracking/"}, "ObsidianLoader": {"Obsidian": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/obsidian/"}, "SQLDatabaseToolkit": {"CnosDB": "https://python.langchain.com/v0.2/docs/integrations/providers/cnosdb/", "SQL Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/sql_database/", "Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/"}, "BrowserbaseLoader": {"Browserbase": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/browserbase/"}, "Nebula": {"Nebula": "https://python.langchain.com/v0.2/docs/integrations/providers/symblai_nebula/", "Nebula (Symbl.ai)": "https://python.langchain.com/v0.2/docs/integrations/llms/symblai_nebula/"}, "Writer": {"Writer": "https://python.langchain.com/v0.2/docs/integrations/llms/writer/"}, "BaichuanLLM": {"Baichuan": "https://python.langchain.com/v0.2/docs/integrations/providers/baichuan/", "Baichuan LLM": "https://python.langchain.com/v0.2/docs/integrations/llms/baichuan/"}, "ApacheDoris": {"Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/"}, "ZepCloudVectorStore": {"Zep": "https://python.langchain.com/v0.2/docs/integrations/providers/zep/", "Zep Cloud": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zep_cloud/"}, "BrowserlessLoader": {"Browserless": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/browserless/"}, "AZLyricsLoader": {"AZLyrics": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/azlyrics/"}, "ToMarkdownLoader": {"2Markdown": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/tomarkdown/"}, "Mlflow": {"MLflow Deployments for LLMs": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow/"}, "MlflowEmbeddings": {"MLflow Deployments for LLMs": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow/"}, "ChatMlflow": {"MLflow Deployments for LLMs": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow/"}, "GitLoader": {"Git": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/git/"}, "MlflowAIGateway": {"MLflow AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_ai_gateway/"}, "MlflowAIGatewayEmbeddings": {"MLflow AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_ai_gateway/"}, "ChatMLflowAIGateway": {"MLflow AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_ai_gateway/"}, "Tigris": {"Tigris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tigris/"}, "Meilisearch": {"Meilisearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/meilisearch/"}, "SQLDatabaseChain": {"Rebuff": "https://python.langchain.com/v0.2/docs/integrations/providers/rebuff/"}, "SnowflakeLoader": {"Snowflake": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/snowflake/"}, "CubeSemanticLoader": {"Cube": "https://python.langchain.com/v0.2/docs/integrations/providers/cube/", "Cube Semantic Layer": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/cube_semantic/"}, "Clickhouse": {"ClickHouse": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/clickhouse/"}, "ClickhouseSettings": {"ClickHouse": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/clickhouse/"}, "ChatDatabricks": {"-> content='Hello! How can I assist you today?'": "https://python.langchain.com/v0.2/docs/integrations/providers/databricks/", "Databricks": "https://python.langchain.com/v0.2/docs/integrations/llms/databricks/"}, "DatabricksEmbeddings": {"-> content='Hello! How can I assist you today?'": "https://python.langchain.com/v0.2/docs/integrations/providers/databricks/", "Databricks": "https://python.langchain.com/v0.2/docs/integrations/llms/databricks/"}, "TelegramChatFileLoader": {"Telegram": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/telegram/"}, "TelegramChatApiLoader": {"Telegram": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/telegram/"}, "PredictionGuard": {"Prediction Guard": "https://python.langchain.com/v0.2/docs/integrations/llms/predictionguard/"}, "NotionDirectoryLoader": {"Notion DB": "https://python.langchain.com/v0.2/docs/integrations/providers/notion/", "Notion DB 1/2": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/notion/"}, "NotionDBLoader": {"Notion DB": "https://python.langchain.com/v0.2/docs/integrations/providers/notion/", "Notion DB 2/2": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/notiondb/"}, "MWDumpLoader": {"MediaWikiDump": "https://python.langchain.com/v0.2/docs/integrations/providers/mediawikidump/", "MediaWiki Dump": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/mediawikidump/"}, "BraveSearchLoader": {"Brave Search": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/brave_search/"}, "StarRocks": {"StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/"}, "GooseAI": {"GooseAI": "https://python.langchain.com/v0.2/docs/integrations/llms/gooseai/"}, "DatadogLogsLoader": {"Datadog Logs": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/datadog_logs/"}, "ApifyDatasetLoader": {"Apify": "https://python.langchain.com/v0.2/docs/integrations/providers/apify/", "Apify Dataset": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/apify_dataset/"}, "NLPCloud": {"NLPCloud": "https://python.langchain.com/v0.2/docs/integrations/providers/nlpcloud/", "NLP Cloud": "https://python.langchain.com/v0.2/docs/integrations/llms/nlpcloud/"}, "Milvus": {"Milvus": "https://python.langchain.com/v0.2/docs/integrations/providers/milvus/", "Zilliz": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zilliz/"}, "SemaDB": {"SemaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/semadb/"}, "GitbookLoader": {"GitBook": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/gitbook/"}, "Rockset": {"Rockset": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/rockset/"}, "RocksetLoader": {"Rockset": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/rockset/"}, "Minimax": {"Minimax": "https://python.langchain.com/v0.2/docs/integrations/llms/minimax/"}, "UnstructuredAPIFileIOLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/"}, "UnstructuredAPIFileLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Unstructured File": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/unstructured_file/"}, "UnstructuredCHMLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/"}, "UnstructuredCSVLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "CSV": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/csv/"}, "UnstructuredEmailLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Email": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/email/"}, "UnstructuredEPubLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "EPub ": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/epub/"}, "UnstructuredFileIOLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Google Drive": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/google_drive/"}, "UnstructuredFileLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Unstructured File": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/unstructured_file/"}, "UnstructuredImageLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Images": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/image/"}, "UnstructuredODTLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Open Document Format (ODT)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/odt/"}, "UnstructuredOrgModeLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "Org-mode": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/org_mode/"}, "UnstructuredRSTLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "RST": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/rst/"}, "UnstructuredRTFLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/"}, "UnstructuredTSVLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "TSV": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/tsv/"}, "UnstructuredURLLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "URL": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/url/"}, "UnstructuredXMLLoader": {"Unstructured": "https://python.langchain.com/v0.2/docs/integrations/providers/unstructured/", "XML": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/xml/"}, "SelfHostedPipeline": {"Runhouse": "https://python.langchain.com/v0.2/docs/integrations/llms/runhouse/"}, "SelfHostedHuggingFaceLLM": {"Runhouse": "https://python.langchain.com/v0.2/docs/integrations/llms/runhouse/"}, "MlflowCallbackHandler": {"MLflow": "https://python.langchain.com/v0.2/docs/integrations/providers/mlflow_tracking/"}, "SpreedlyLoader": {"Spreedly": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/spreedly/"}, "OpenLLM": {"OpenLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/openllm/"}, "PubMedLoader": {"PubMed": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/pubmed/"}, "SearxSearchResults": {"SearxNG Search API": "https://python.langchain.com/v0.2/docs/integrations/providers/searx/"}, "Modal": {"Modal": "https://python.langchain.com/v0.2/docs/integrations/llms/modal/"}, "OpenCityDataLoader": {"Geopandas": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/geopandas/", "Open City Data": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/open_city_data/"}, "PGEmbedding": {"Postgres Embedding": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgembedding/"}, "SQLiteVSS": {"SQLite": "https://python.langchain.com/v0.2/docs/integrations/providers/sqlite/", "SQLite-VSS": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sqlitevss/"}, "Xinference": {"Xorbits Inference (Xinference)": "https://python.langchain.com/v0.2/docs/integrations/llms/xinference/"}, "IFixitLoader": {"iFixit": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/ifixit/"}, "AlephAlpha": {"Aleph Alpha": "https://python.langchain.com/v0.2/docs/integrations/llms/aleph_alpha/"}, "PipelineAI": {"PipelineAI": "https://python.langchain.com/v0.2/docs/integrations/llms/pipelineai/"}, "FacebookChatLoader": {"Facebook - Meta": "https://python.langchain.com/v0.2/docs/integrations/providers/facebook/", "Facebook Chat": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/facebook_chat/"}, "Epsilla": {"Epsilla": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/epsilla/"}, "AwaDB": {"AwaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/awadb/"}, "ArxivLoader": {"Arxiv": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/arxiv/"}, "BlockchainDocumentLoader": {"Alchemy": "https://python.langchain.com/v0.2/docs/integrations/providers/alchemy/", "Blockchain": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/blockchain/"}, "BlockchainType": {"Alchemy": "https://python.langchain.com/v0.2/docs/integrations/providers/alchemy/", "Blockchain": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/blockchain/"}, "Anyscale": {"Anyscale": "https://python.langchain.com/v0.2/docs/integrations/llms/anyscale/"}, "AINetworkToolkit": {"AINetwork": "https://python.langchain.com/v0.2/docs/integrations/toolkits/ainetwork/"}, "StripeLoader": {"Stripe": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/stripe/"}, "StochasticAI": {"StochasticAI": "https://python.langchain.com/v0.2/docs/integrations/llms/stochasticai/"}, "Bagel": {"BagelDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/bageldb/", "Bagel": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/bagel/"}, "TigerGraph": {"TigerGraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/tigergraph/"}, "BlackboardLoader": {"Blackboard": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/blackboard/"}, "YandexGPT": {"Yandex": "https://python.langchain.com/v0.2/docs/integrations/providers/yandex/", "YandexGPT": "https://python.langchain.com/v0.2/docs/integrations/llms/yandex/"}, "UpstashVectorStore": {"Upstash Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/upstash/"}, "NucliaTextTransformer": {"Nuclia": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/nuclia_transformer/"}, "NucliaLoader": {"Nuclia": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/nuclia/"}, "NucliaDB": {"Nuclia": "https://python.langchain.com/v0.2/docs/integrations/providers/nuclia/", "NucliaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/nucliadb/"}, "AnalyticDB": {"AnalyticDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/analyticdb/", "Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/"}, "GoogleApiYoutubeLoader": {"YouTube": "https://python.langchain.com/v0.2/docs/integrations/providers/youtube/", "YouTube transcripts": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_transcript/"}, "PromptLayerOpenAI": {"PromptLayer": "https://python.langchain.com/v0.2/docs/integrations/providers/promptlayer/", "PromptLayer OpenAI": "https://python.langchain.com/v0.2/docs/integrations/llms/promptlayer_openai/"}, "USearch": {"USearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/usearch/"}, "EtherscanLoader": {"Etherscan": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/etherscan/"}, "Arcee": {"Arcee": "https://python.langchain.com/v0.2/docs/integrations/llms/arcee/"}, "WhyLabsCallbackHandler": {"WhyLabs": "https://python.langchain.com/v0.2/docs/integrations/providers/whylabs_profiling/"}, "IuguLoader": {"Iugu": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/iugu/"}, "CouchbaseLoader": {"Couchbase": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/couchbase/"}, "FlyteCallbackHandler": {"Flyte": "https://python.langchain.com/v0.2/docs/integrations/providers/flyte/"}, "wandb_tracing_enabled": {"WandB Tracing": "https://python.langchain.com/v0.2/docs/integrations/providers/wandb_tracing/"}, "ManifestWrapper": {"Hazy Research": "https://python.langchain.com/v0.2/docs/integrations/providers/hazy_research/", "Manifest": "https://python.langchain.com/v0.2/docs/integrations/llms/manifest/"}, "OntotextGraphDBGraph": {"Ontotext GraphDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/ontotext/"}, "OntotextGraphDBQAChain": {"Ontotext GraphDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/ontotext/"}, "Marqo": {"Marqo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/marqo/"}, "IMSDbLoader": {"IMSDb": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/imsdb/"}, "TiDBLoader": {"TiDB": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/tidb/"}, "TiDBVectorStore": {"TiDB": "https://python.langchain.com/v0.2/docs/integrations/providers/tidb/", "TiDB Vector": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tidb_vector/"}, "DeepInfra": {"DeepInfra": "https://python.langchain.com/v0.2/docs/integrations/llms/deepinfra/"}, "RedditPostsLoader": {"Reddit": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/reddit/"}, "TrelloLoader": {"Trello": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/trello/"}, "AtlasDB": {"Atlas": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/atlas/"}, "SKLearnVectorStore": {"scikit-learn": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sklearn/"}, "EverNoteLoader": {"EverNote": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/evernote/"}, "VDMS": {"VDMS": "https://python.langchain.com/v0.2/docs/integrations/providers/vdms/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vdms/"}, "VDMS_Client": {"VDMS": "https://python.langchain.com/v0.2/docs/integrations/providers/vdms/", "Intel's Visual Data Management System (VDMS)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vdms/"}, "TwitterTweetLoader": {"Twitter": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/twitter/"}, "DiscordChatLoader": {"Discord": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/discord/"}, "AssemblyAIAudioTranscriptLoader": {"AssemblyAI": "https://python.langchain.com/v0.2/docs/integrations/providers/assemblyai/", "AssemblyAI Audio Transcripts": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/assemblyai/"}, "KineticaLoader": {"Kinetica": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/kinetica/"}, "ClearMLCallbackHandler": {"ClearML": "https://python.langchain.com/v0.2/docs/integrations/providers/clearml_tracking/"}, "SlackDirectoryLoader": {"Slack": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/slack/"}, "HNLoader": {"Hacker News": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/hacker_news/", "Google Spanner": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_spanner/"}, "CTranslate2": {"CTranslate2": "https://python.langchain.com/v0.2/docs/integrations/llms/ctranslate2/"}, "QianfanLLMEndpoint": {"Baidu": "https://python.langchain.com/v0.2/docs/integrations/providers/baidu/", "Baidu Qianfan": "https://python.langchain.com/v0.2/docs/integrations/llms/baidu_qianfan_endpoint/"}, "BESVectorStore": {"Baidu": "https://python.langchain.com/v0.2/docs/integrations/providers/baidu/", "Baidu Cloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiducloud_vector_search/"}, "BaiduVectorDB": {"Baidu": "https://python.langchain.com/v0.2/docs/integrations/providers/baidu/", "Baidu VectorDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/baiduvectordb/"}, "Aphrodite": {"PygmalionAI": "https://python.langchain.com/v0.2/docs/integrations/providers/pygmalionai/", "Aphrodite Engine": "https://python.langchain.com/v0.2/docs/integrations/llms/aphrodite/"}, "PaiEasEndpoint": {"Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud PAI EAS": "https://python.langchain.com/v0.2/docs/integrations/llms/alibabacloud_pai_eas_endpoint/"}, "MaxComputeLoader": {"Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud MaxCompute": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/alibaba_cloud_maxcompute/"}, "AlibabaCloudOpenSearch": {"Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/alibabacloud_opensearch/"}, "AlibabaCloudOpenSearchSettings": {"Alibaba Cloud": "https://python.langchain.com/v0.2/docs/integrations/providers/alibaba_cloud/", "Alibaba Cloud OpenSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/alibabacloud_opensearch/"}, "DocusaurusLoader": {"Docusaurus": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/docusaurus/"}, "Annoy": {"Annoy": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/annoy/"}, "BibtexLoader": {"BibTeX": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/bibtex/"}, "CassandraLoader": {"Cassandra": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/cassandra/"}, "Vearch": {"Vearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vearch/"}, "JoplinLoader": {"Joplin": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/joplin/"}, "ArthurCallbackHandler": {"Arthur": "https://python.langchain.com/v0.2/docs/integrations/providers/arthur_tracking/"}, "AcreomLoader": {"Acreom": "https://python.langchain.com/v0.2/docs/integrations/providers/acreom/", "acreom": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/acreom/"}, "KDBAI": {"KDB.AI": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kdbai/"}, "DuckDBLoader": {"DuckDB": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/duckdb/"}, "Petals": {"Petals": "https://python.langchain.com/v0.2/docs/integrations/llms/petals/"}, "MomentoVectorIndex": {"Momento": "https://python.langchain.com/v0.2/docs/integrations/providers/momento/", "Momento Vector Index (MVI)": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/momento_vector_index/"}, "NIBittensorLLM": {"Bittensor": "https://python.langchain.com/v0.2/docs/integrations/llms/bittensor/"}, "AirtableLoader": {"Airtable": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airtable/"}, "LarkSuiteDocLoader": {"ByteDance": "https://python.langchain.com/v0.2/docs/integrations/providers/byte_dance/", "LarkSuite (FeiShu)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/larksuite/"}, "JavelinAIGateway": {"Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/v0.2/docs/integrations/llms/javelin/"}, "JavelinAIGatewayEmbeddings": {"Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/v0.2/docs/integrations/llms/javelin/"}, "ChatJavelinAIGateway": {"Javelin AI Gateway": "https://python.langchain.com/v0.2/docs/integrations/providers/javelin_ai_gateway/", "Javelin AI Gateway Tutorial": "https://python.langchain.com/v0.2/docs/integrations/llms/javelin/"}, "TensorflowDatasetLoader": {"TensorFlow Datasets": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/tensorflow_datasets/"}, "Clarifai": {"Clarifai": "https://python.langchain.com/v0.2/docs/integrations/llms/clarifai/"}, "DataheraldTextToSQL": {"Dataherald": "https://python.langchain.com/v0.2/docs/integrations/providers/dataherald/"}, "RoamLoader": {"Roam": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/roam/"}, "CONDENSE_QUESTION_PROMPT": {"Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/"}, "load_qa_with_sources_chain": {"Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/"}, "QA_PROMPT": {"Chat Over Documents with Vectara": "https://python.langchain.com/v0.2/docs/integrations/providers/vectara/vectara_chat/"}, "RedisStore": {"RedisStore": "https://python.langchain.com/v0.2/docs/integrations/stores/redis/"}, "AstraDBStore": {"Astra DB": "https://python.langchain.com/v0.2/docs/integrations/stores/astradb/"}, "AstraDBByteStore": {"Astra DB": "https://python.langchain.com/v0.2/docs/integrations/stores/astradb/"}, "CassandraByteStore": {"Cassandra": "https://python.langchain.com/v0.2/docs/integrations/stores/cassandra/"}, "UpstashRedisByteStore": {"UpstashRedisByteStore": "https://python.langchain.com/v0.2/docs/integrations/stores/upstash_redis/"}, "ConneryToolkit": {"Connery Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/connery/"}, "create_csv_agent": {"CSV": "https://python.langchain.com/v0.2/docs/integrations/toolkits/csv/"}, "create_xorbits_agent": {"Xorbits": "https://python.langchain.com/v0.2/docs/integrations/toolkits/xorbits/"}, "JiraToolkit": {"Jira": "https://python.langchain.com/v0.2/docs/integrations/toolkits/jira/"}, "JiraAPIWrapper": {"Jira": "https://python.langchain.com/v0.2/docs/integrations/toolkits/jira/"}, "create_spark_dataframe_agent": {"Spark Dataframe": "https://python.langchain.com/v0.2/docs/integrations/toolkits/spark/"}, "PythonREPLTool": {"Python": "https://python.langchain.com/v0.2/docs/integrations/toolkits/python/"}, "create_pbi_agent": {"PowerBI Dataset": "https://python.langchain.com/v0.2/docs/integrations/toolkits/powerbi/"}, "AzureCognitiveServicesToolkit": {"Azure Cognitive Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_cognitive_services/"}, "NLAToolkit": {"Natural Language APIs": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi_nla/"}, "Requests": {"Natural Language APIs": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi_nla/"}, "GmailToolkit": {"Gmail": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gmail/"}, "build_resource_service": {"Gmail": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gmail/"}, "get_gmail_credentials": {"Gmail": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gmail/"}, "SlackToolkit": {"Slack": "https://python.langchain.com/v0.2/docs/integrations/toolkits/slack/"}, "SteamToolkit": {"Steam Game Recommendation & Game Details": "https://python.langchain.com/v0.2/docs/integrations/toolkits/steam/"}, "SteamWebAPIWrapper": {"Steam Game Recommendation & Game Details": "https://python.langchain.com/v0.2/docs/integrations/toolkits/steam/"}, "CassandraDatabaseToolkit": {"Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/"}, "GetSchemaCassandraDatabaseTool": {"Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/"}, "GetTableDataCassandraDatabaseTool": {"Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/"}, "QueryCassandraDatabaseTool": {"Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/"}, "CassandraDatabase": {"Cassandra Database": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cassandra_database/"}, "JsonToolkit": {"JSON": "https://python.langchain.com/v0.2/docs/integrations/toolkits/json/"}, "create_json_agent": {"JSON": "https://python.langchain.com/v0.2/docs/integrations/toolkits/json/"}, "JsonSpec": {"JSON": "https://python.langchain.com/v0.2/docs/integrations/toolkits/json/", "OpenAPI": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi/"}, "AirbyteStripeLoader": {"Airbyte Question Answering": "https://python.langchain.com/v0.2/docs/integrations/toolkits/airbyte_structured_qa/", "Airbyte Stripe (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_stripe/"}, "GitHubToolkit": {"Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/"}, "GitHubAPIWrapper": {"Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/"}, "ConversationSummaryBufferMemory": {"Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/"}, "tracing_v2_enabled": {"Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/", "Chat Bot Feedback Template": "https://python.langchain.com/v0.2/docs/templates/chat-bot-feedback/"}, "render_text_description_and_args": {"Github": "https://python.langchain.com/v0.2/docs/integrations/toolkits/github/", "Amadeus": "https://python.langchain.com/v0.2/docs/integrations/toolkits/amadeus/"}, "ClickupToolkit": {"ClickUp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/clickup/"}, "ClickupAPIWrapper": {"ClickUp": "https://python.langchain.com/v0.2/docs/integrations/toolkits/clickup/"}, "SparkSQLToolkit": {"Spark SQL": "https://python.langchain.com/v0.2/docs/integrations/toolkits/spark_sql/"}, "create_spark_sql_agent": {"Spark SQL": "https://python.langchain.com/v0.2/docs/integrations/toolkits/spark_sql/"}, "SparkSQL": {"Spark SQL": "https://python.langchain.com/v0.2/docs/integrations/toolkits/spark_sql/"}, "PlayWrightBrowserToolkit": {"PlayWright Browser": "https://python.langchain.com/v0.2/docs/integrations/toolkits/playwright/"}, "create_async_playwright_browser": {"PlayWright Browser": "https://python.langchain.com/v0.2/docs/integrations/toolkits/playwright/"}, "create_conversational_retrieval_agent": {"# Cogniswitch Tools": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cogniswitch/"}, "CogniswitchToolkit": {"# Cogniswitch Tools": "https://python.langchain.com/v0.2/docs/integrations/toolkits/cogniswitch/"}, "NasaToolkit": {"NASA": "https://python.langchain.com/v0.2/docs/integrations/toolkits/nasa/"}, "NasaAPIWrapper": {"NASA": "https://python.langchain.com/v0.2/docs/integrations/toolkits/nasa/"}, "MultionToolkit": {"MultiOn": "https://python.langchain.com/v0.2/docs/integrations/toolkits/multion/"}, "AmadeusToolkit": {"Amadeus": "https://python.langchain.com/v0.2/docs/integrations/toolkits/amadeus/"}, "HuggingFaceHub": {"Amadeus": "https://python.langchain.com/v0.2/docs/integrations/toolkits/amadeus/"}, "AzureAiServicesToolkit": {"Azure AI Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_ai_services/"}, "create_structured_chat_agent": {"Azure AI Services": "https://python.langchain.com/v0.2/docs/integrations/toolkits/azure_ai_services/"}, "reduce_openapi_spec": {"OpenAPI": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi/"}, "RequestsWrapper": {"OpenAPI": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi/"}, "OpenAPIToolkit": {"OpenAPI": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi/"}, "create_openapi_agent": {"OpenAPI": "https://python.langchain.com/v0.2/docs/integrations/toolkits/openapi/"}, "GitLabToolkit": {"Gitlab": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gitlab/"}, "GitLabAPIWrapper": {"Gitlab": "https://python.langchain.com/v0.2/docs/integrations/toolkits/gitlab/"}, "PolygonToolkit": {"Polygon IO Toolkit": "https://python.langchain.com/v0.2/docs/integrations/toolkits/polygon/"}, "ApacheDorisSettings": {"Apache Doris": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/apache_doris/"}, "DistanceStrategy": {"Kinetica Vectorstore API": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/kinetica/", "SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/", "SingleStoreDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/singlestoredb/", "Oracle AI Vector Search: Vector Store": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/oracle/", "Google BigQuery Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_bigquery_vector_search/", "SemaDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/semadb/"}, "SentenceTransformerEmbeddings": {"SQLite-VSS": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sqlitevss/", "Vespa": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vespa/", "Chroma": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/chroma/"}, "Vald": {"Vald": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vald/"}, "RetrievalQAWithSourcesChain": {"Weaviate": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/weaviate/", "Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/", "Jaguar Vector Database": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/jaguar/", "Neo4j Vector Index": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/neo4jvector/", "Marqo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/marqo/", "Psychic": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/psychic/"}, "Yellowbrick": {"Yellowbrick": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/yellowbrick/"}, "LLMRails": {"LLMRails": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/llm_rails/"}, "HanaDB": {"SAP HANA Cloud Vector Engine": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/sap_hanavector/"}, "VectorSearchVectorStoreDatastore": {"Google Vertex AI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_vertex_ai_vector_search/"}, "VertexAI": {"Google Vertex AI Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_vertex_ai_vector_search/", "Google Cloud Vertex AI Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/google_cloud_vertexai_rerank/", "Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "Hippo": {"Hippo": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/hippo/"}, "RedisText": {"Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/redis/"}, "RedisNum": {"Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/redis/"}, "RedisTag": {"Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/redis/"}, "RedisFilter": {"Redis": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/redis/"}, "VespaStore": {"Vespa": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vespa/"}, "NeuralDBVectorStore": {"ThirdAI NeuralDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/thirdai_neuraldb/"}, "VikingDB": {"viking DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vikingdb/"}, "VikingDBConfig": {"viking DB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vikingdb/"}, "CouchbaseVectorStore": {"Couchbase ": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/couchbase/"}, "Relyt": {"Relyt": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/relyt/"}, "oraclevs": {"Oracle AI Vector Search: Vector Store": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/oracle/"}, "VLite": {"vlite": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/vlite/"}, "DuckDB": {"DuckDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/duckdb/"}, "StarRocksSettings": {"StarRocks": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/starrocks/"}, "PathwayVectorClient": {"Pathway": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pathway/"}, "DocArrayHnswSearch": {"DocArray HnswSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/docarray_hnsw/"}, "TileDB": {"TileDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/tiledb/"}, "EcloudESVectorStore": {"China Mobile ECloud ElasticSearch VectorSearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/ecloud_vector_search/"}, "SurrealDBStore": {"SurrealDB": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/surrealdb/"}, "ManticoreSearch": {"ManticoreSearch VectorStore": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/manticore_search/"}, "ManticoreSearchSettings": {"ManticoreSearch VectorStore": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/manticore_search/"}, "Aerospike": {"Aerospike": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/aerospike/"}, "ElasticVectorSearch": {"Elasticsearch": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/elasticsearch/"}, "PGVecto_rs": {"PGVecto.rs": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/pgvecto_rs/"}, "BigQueryVectorSearch": {"Google BigQuery Vector Search": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/google_bigquery_vector_search/"}, "ZepVectorStore": {"Zep": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zep/"}, "CollectionConfig": {"Zep": "https://python.langchain.com/v0.2/docs/integrations/vectorstores/zep/"}, "openai": {"OpenAI Adapter(Old)": "https://python.langchain.com/v0.2/docs/integrations/adapters/openai-old/", "OpenAI Adapter": "https://python.langchain.com/v0.2/docs/integrations/adapters/openai/"}, "RankLLMRerank": {"RankLLM Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/rankllm-reranker/"}, "AsyncChromiumLoader": {"Beautiful Soup": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/beautiful_soup/", "Async Chromium": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/async_chromium/"}, "BeautifulSoupTransformer": {"Beautiful Soup": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/beautiful_soup/"}, "OpenVINOReranker": {"OpenVINO Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openvino_rerank/"}, "create_metadata_tagger": {"OpenAI metadata tagger": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/openai_metadata_tagger/"}, "DoctranPropertyExtractor": {"Doctran: extract properties": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/doctran_extract_properties/"}, "DoctranQATransformer": {"Doctran: interrogate documents": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/doctran_interrogate_document/"}, "CrossEncoderReranker": {"Cross Encoder Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/cross_encoder_reranker/"}, "HuggingFaceCrossEncoder": {"Cross Encoder Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/cross_encoder_reranker/"}, "JinaRerank": {"Jina Reranker": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/"}, "DoctranTextTranslator": {"Doctran: language translation": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/doctran_translate_document/"}, "MarkdownifyTransformer": {"Markdownify": "https://python.langchain.com/v0.2/docs/integrations/document_transformers/markdownify/"}, "XorbitsLoader": {"Xorbits Pandas DataFrame": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/xorbits/"}, "OutlookMessageLoader": {"Email": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/email/"}, "TranscriptFormat": {"AssemblyAI Audio Transcripts": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/assemblyai/"}, "AirbyteSalesforceLoader": {"Airbyte Salesforce (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_salesforce/"}, "AirbyteCDKLoader": {"Airbyte CDK (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_cdk/"}, "Docx2txtLoader": {"Microsoft Word": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/microsoft_word/"}, "RSpaceLoader": {"# replace these ids with some from your own research notes.": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/rspace/"}, "SeleniumURLLoader": {"URL": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/url/"}, "PlaywrightURLLoader": {"URL": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/url/"}, "AirbyteJSONLoader": {"Airbyte JSON (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_json/"}, "GeoDataFrameLoader": {"Geopandas": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/geopandas/"}, "AirbyteTypeformLoader": {"Airbyte Typeform (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_typeform/"}, "MHTMLLoader": {"mhtml": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/mhtml/"}, "SpiderLoader": {"Spider": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/spider/"}, "NewsURLLoader": {"News URL": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/news/"}, "ImageCaptionLoader": {"Image captions": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/image_captions/"}, "LLMSherpaFileLoader": {"LLM Sherpa": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/llmsherpa/"}, "ScrapflyLoader": {"# ScrapFly": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/scrapfly/"}, "TomlLoader": {"TOML": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/toml/"}, "PsychicLoader": {"Psychic": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/psychic/"}, "FireCrawlLoader": {"FireCrawl": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/firecrawl/"}, "LarkSuiteWikiLoader": {"LarkSuite (FeiShu)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/larksuite/"}, "FakeListLLM": {"LarkSuite (FeiShu)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/larksuite/"}, "MergedDataLoader": {"Merge Documents Loader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/merge_doc/"}, "RecursiveUrlLoader": {"Recursive URL": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/recursive_url/"}, "AirbyteHubspotLoader": {"Airbyte Hubspot (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_hubspot/"}, "AirbyteGongLoader": {"Airbyte Gong (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_gong/"}, "AstraDBLoader": {"AstraDB": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/astradb/"}, "ReadTheDocsLoader": {"ReadTheDocs Documentation": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/readthedocs_documentation/"}, "PolarsDataFrameLoader": {"Polars DataFrame": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/polars_dataframe/"}, "DataFrameLoader": {"Pandas DataFrame": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/pandas_dataframe/"}, "SurrealDBLoader": {"SurrealDB": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/surrealdb/"}, "GoogleApiClient": {"YouTube transcripts": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/youtube_transcript/"}, "ConcurrentLoader": {"Concurrent Loader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/concurrent/"}, "RSSFeedLoader": {"RSS Feeds": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/rss/"}, "PebbloSafeLoader": {"Pebblo Safe DocumentLoader": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/pebblo/"}, "VsdxLoader": {"Vsdx": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/vsdx/"}, "NotebookLoader": {"Jupyter Notebook": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/jupyter_notebook/"}, "OracleAutonomousDatabaseLoader": {"Oracle Autonomous Database": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/oracleadb_loader/"}, "LanguageParser": {"Source Code": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/source_code/"}, "SRTLoader": {"Subtitle": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/subtitle/"}, "MastodonTootsLoader": {"Mastodon": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/mastodon/"}, "AirbyteShopifyLoader": {"Airbyte Shopify (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_shopify/"}, "GlueCatalogLoader": {"Glue Catalog": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/glue_catalog/"}, "PySparkDataFrameLoader": {"PySpark": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/pyspark_dataframe/"}, "AirbyteZendeskSupportLoader": {"Airbyte Zendesk Support (Deprecated)": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/airbyte_zendesk_support/"}, "CoNLLULoader": {"CoNLL-U": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/conll-u/"}, "MongodbLoader": {"MongoDB": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/mongodb/"}, "SitemapLoader": {"Sitemap": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/sitemap/"}, "YuqueLoader": {"Yuque": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/yuque/"}, "QuipLoader": {"Quip": "https://python.langchain.com/v0.2/docs/integrations/document_loaders/quip/"}, "MemgraphGraph": {"Memgraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/memgraph/"}, "GraphSparqlQAChain": {"RDFLib": "https://python.langchain.com/v0.2/docs/integrations/graphs/rdflib_sparql/"}, "RdfGraph": {"RDFLib": "https://python.langchain.com/v0.2/docs/integrations/graphs/rdflib_sparql/"}, "NebulaGraphQAChain": {"NebulaGraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/nebula_graph/"}, "NebulaGraph": {"NebulaGraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/nebula_graph/"}, "GremlinQAChain": {"Azure Cosmos DB for Apache Gremlin": "https://python.langchain.com/v0.2/docs/integrations/graphs/azure_cosmosdb_gremlin/"}, "GraphIndexCreator": {"NetworkX": "https://python.langchain.com/v0.2/docs/integrations/graphs/networkx/"}, "GraphQAChain": {"NetworkX": "https://python.langchain.com/v0.2/docs/integrations/graphs/networkx/"}, "NetworkxEntityGraph": {"NetworkX": "https://python.langchain.com/v0.2/docs/integrations/graphs/networkx/"}, "HugeGraphQAChain": {"HugeGraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/hugegraph/"}, "HugeGraph": {"HugeGraph": "https://python.langchain.com/v0.2/docs/integrations/graphs/hugegraph/"}, "AGEGraph": {"Apache AGE": "https://python.langchain.com/v0.2/docs/integrations/graphs/apache_age/"}, "KuzuQAChain": {"Kuzu": "https://python.langchain.com/v0.2/docs/integrations/graphs/kuzu_db/"}, "KuzuGraph": {"Kuzu": "https://python.langchain.com/v0.2/docs/integrations/graphs/kuzu_db/"}, "FalkorDBQAChain": {"FalkorDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/falkordb/"}, "FalkorDBGraph": {"FalkorDB": "https://python.langchain.com/v0.2/docs/integrations/graphs/falkordb/"}, "ConversationBufferWindowMemory": {"Baseten": "https://python.langchain.com/v0.2/docs/integrations/llms/baseten/", "OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/"}, "Solar": {"Solar": "https://python.langchain.com/v0.2/docs/integrations/llms/solar/"}, "IpexLLM": {"IPEX-LLM": "https://python.langchain.com/v0.2/docs/integrations/llms/ipex_llm/"}, "SagemakerEndpoint": {"SageMakerEndpoint": "https://python.langchain.com/v0.2/docs/integrations/llms/sagemaker/"}, "LLMContentHandler": {"SageMakerEndpoint": "https://python.langchain.com/v0.2/docs/integrations/llms/sagemaker/"}, "OctoAIEndpoint": {"OctoAI": "https://python.langchain.com/v0.2/docs/integrations/llms/octoai/"}, "TextGen": {"TextGen": "https://python.langchain.com/v0.2/docs/integrations/llms/textgen/"}, "MosaicML": {"MosaicML": "https://python.langchain.com/v0.2/docs/integrations/llms/mosaicml/"}, "VolcEngineMaasLLM": {"Volc Engine Maas": "https://python.langchain.com/v0.2/docs/integrations/llms/volcengine_maas/"}, "KoboldApiLLM": {"KoboldAI API": "https://python.langchain.com/v0.2/docs/integrations/llms/koboldai/"}, "Konko": {"Konko": "https://python.langchain.com/v0.2/docs/integrations/llms/konko/"}, "GemmaChatVertexAIModelGarden": {"Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "GemmaVertexAIModelGarden": {"Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "ChatAnthropicVertex": {"Google Cloud Vertex AI": "https://python.langchain.com/v0.2/docs/integrations/llms/google_vertex_ai_palm/"}, "OpaquePrompts": {"OpaquePrompts": "https://python.langchain.com/v0.2/docs/integrations/llms/opaqueprompts/"}, "TitanTakeoff": {"Titan Takeoff": "https://python.langchain.com/v0.2/docs/integrations/llms/titan_takeoff/"}, "Friendli": {"Friendli": "https://python.langchain.com/v0.2/docs/integrations/llms/friendli/"}, "Databricks": {"Databricks": "https://python.langchain.com/v0.2/docs/integrations/llms/databricks/"}, "LMFormatEnforcer": {"LM Format Enforcer": "https://python.langchain.com/v0.2/docs/integrations/llms/lmformatenforcer_experimental/"}, "VLLM": {"vLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/vllm/"}, "VLLMOpenAI": {"vLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/vllm/"}, "CustomOpenAIContentFormatter": {"Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/"}, "ContentFormatterBase": {"Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/"}, "DollyContentFormatter": {"Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/"}, "load_llm": {"Azure ML": "https://python.langchain.com/v0.2/docs/integrations/llms/azure_ml/"}, "MapReduceChain": {"Manifest": "https://python.langchain.com/v0.2/docs/integrations/llms/manifest/"}, "ModelLaboratory": {"Manifest": "https://python.langchain.com/v0.2/docs/integrations/llms/manifest/"}, "ExLlamaV2": {"ExLlamaV2": "https://python.langchain.com/v0.2/docs/integrations/llms/exllamav2/"}, "RELLM": {"RELLM": "https://python.langchain.com/v0.2/docs/integrations/llms/rellm_experimental/"}, "Yuan2": {"Yuan2.0": "https://python.langchain.com/v0.2/docs/integrations/llms/yuan2/"}, "SparkLLM": {"SparkLLM": "https://python.langchain.com/v0.2/docs/integrations/llms/sparkllm/"}, "Moonshot": {"MoonshotChat": "https://python.langchain.com/v0.2/docs/integrations/llms/moonshot/"}, "OpenLM": {"OpenLM": "https://python.langchain.com/v0.2/docs/integrations/llms/openlm/"}, "CloudflareWorkersAI": {"Cloudflare Workers AI": "https://python.langchain.com/v0.2/docs/integrations/llms/cloudflare_workersai/"}, "ChatGLM3": {"ChatGLM": "https://python.langchain.com/v0.2/docs/integrations/llms/chatglm/"}, "ChatGLM": {"ChatGLM": "https://python.langchain.com/v0.2/docs/integrations/llms/chatglm/"}, "Sambaverse": {"SambaNova": "https://python.langchain.com/v0.2/docs/integrations/llms/sambanova/"}, "SambaStudio": {"SambaNova": "https://python.langchain.com/v0.2/docs/integrations/llms/sambanova/"}, "LayerupSecurity": {"Layerup Security": "https://python.langchain.com/v0.2/docs/integrations/llms/layerup_security/"}, "JsonFormer": {"JSONFormer": "https://python.langchain.com/v0.2/docs/integrations/llms/jsonformer_experimental/"}, "WeightOnlyQuantPipeline": {"Intel Weight-Only Quantization": "https://python.langchain.com/v0.2/docs/integrations/llms/weight_only_quantization/"}, "Replicate": {"Replicate": "https://python.langchain.com/v0.2/docs/integrations/llms/replicate/"}, "RunnablePick": {"Build a Local RAG Application": "https://python.langchain.com/v0.2/docs/tutorials/local_rag/"}, "StuffDocumentsChain": {"Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/"}, "MapReduceDocumentsChain": {"Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/"}, "ReduceDocumentsChain": {"Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/"}, "AnalyzeDocumentChain": {"Summarize Text": "https://python.langchain.com/v0.2/docs/tutorials/summarization/"}, "QuerySQLDataBaseTool": {"Build a Question/Answering system over SQL data": "https://python.langchain.com/v0.2/docs/tutorials/sql_qa/"}, "OPENAI_TEMPLATE": {"Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "create_openai_data_generator": {"Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "DatasetGenerator": {"Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "create_data_generation_chain": {"Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}, "create_extraction_chain_pydantic": {"Generate Synthetic Data": "https://python.langchain.com/v0.2/docs/tutorials/data_generation/"}} \ No newline at end of file diff --git a/docs/docs/concepts.mdx b/docs/docs/concepts.mdx index 30671511805bc..c0be58b56f46c 100644 --- a/docs/docs/concepts.mdx +++ b/docs/docs/concepts.mdx @@ -875,7 +875,7 @@ The standard interface consists of: The following how-to guides are good practical resources for using function/tool calling: - [How to return structured data from an LLM](/docs/how_to/structured_output/) -- [How to use a model to call tools](/docs/how_to/tool_calling/) +- [How to use a model to call tools](/docs/how_to/tool_calling) For a full list of model providers that support tool calling, [see this table](/docs/integrations/chat/#advanced-features). diff --git a/docs/docs/how_to/binding.ipynb b/docs/docs/how_to/binding.ipynb index 744998ff6d7d6..55f6255fedc13 100644 --- a/docs/docs/how_to/binding.ipynb +++ b/docs/docs/how_to/binding.ipynb @@ -23,7 +23,7 @@ "This guide assumes familiarity with the following concepts:\n", "- [LangChain Expression Language (LCEL)](/docs/concepts/#langchain-expression-language)\n", "- [Chaining runnables](/docs/how_to/sequence/)\n", - "- [Tool calling](/docs/how_to/tool_calling/)\n", + "- [Tool calling](/docs/how_to/tool_calling)\n", "\n", ":::\n", "\n", @@ -142,7 +142,7 @@ "\n", "## Attaching OpenAI tools\n", "\n", - "Another common use-case is tool calling. While you should generally use the [`.bind_tools()`](/docs/how_to/tool_calling/) method for tool-calling models, you can also bind provider-specific args directly if you want lower level control:" + "Another common use-case is tool calling. While you should generally use the [`.bind_tools()`](/docs/how_to/tool_calling) method for tool-calling models, you can also bind provider-specific args directly if you want lower level control:" ] }, { diff --git a/docs/docs/how_to/index.mdx b/docs/docs/how_to/index.mdx index 68c344e86b7b2..9765e894726a0 100644 --- a/docs/docs/how_to/index.mdx +++ b/docs/docs/how_to/index.mdx @@ -21,7 +21,7 @@ For comprehensive descriptions of every class and function see the [API Referenc This highlights functionality that is core to using LangChain. - [How to: return structured data from a model](/docs/how_to/structured_output/) -- [How to: use a model to call tools](/docs/how_to/tool_calling/) +- [How to: use a model to call tools](/docs/how_to/tool_calling) - [How to: stream runnables](/docs/how_to/streaming) - [How to: debug your LLM apps](/docs/how_to/debugging/) @@ -79,6 +79,12 @@ These are the core building blocks you can use when building applications. - [How to: stream a response back](/docs/how_to/chat_streaming) - [How to: track token usage](/docs/how_to/chat_token_usage_tracking) - [How to: track response metadata across providers](/docs/how_to/response_metadata) +- [How to: let your end users choose their model](/docs/how_to/chat_models_universal_init/) +- [How to: use chat model to call tools](/docs/how_to/tool_calling) +- [How to: stream tool calls](/docs/how_to/tool_streaming) +- [How to: few shot prompt tool behavior](/docs/how_to/tools_few_shot) +- [How to: bind model-specific formated tools](/docs/how_to/tools_model_specific) +- [How to: force specific tool call](/docs/how_to/tool_choice) - [How to: init any model in one line](/docs/how_to/chat_models_universal_init/) ### Messages @@ -176,15 +182,17 @@ Indexing is the process of keeping your vectorstore in-sync with the underlying ### Tools -LangChain [Tools](/docs/concepts/#tools) contain a description of the tool (to pass to the language model) as well as the implementation of the function to call). +LangChain [Tools](/docs/concepts/#tools) contain a description of the tool (to pass to the language model) as well as the implementation of the function to call. - [How to: create custom tools](/docs/how_to/custom_tools) - [How to: use built-in tools and built-in toolkits](/docs/how_to/tools_builtin) -- [How to: use a chat model to call tools](/docs/how_to/tool_calling/) +- [How to: use chat model to call tools](/docs/how_to/tool_calling) +- [How to: pass tool results back to model](/docs/how_to/tool_results_pass_to_model) - [How to: add ad-hoc tool calling capability to LLMs and chat models](/docs/how_to/tools_prompting) - [How to: pass run time values to tools](/docs/how_to/tool_runtime) - [How to: add a human in the loop to tool usage](/docs/how_to/tools_human) - [How to: handle errors when calling tools](/docs/how_to/tools_error) +- [How to: disable parallel tool calling](/docs/how_to/tool_choice) ### Multimodal diff --git a/docs/docs/how_to/sql_csv.ipynb b/docs/docs/how_to/sql_csv.ipynb index fc379c219db5f..0930b24f9f527 100644 --- a/docs/docs/how_to/sql_csv.ipynb +++ b/docs/docs/how_to/sql_csv.ipynb @@ -351,7 +351,7 @@ "id": "ab1b2e7c-6ea8-4674-98eb-a43c69f5c19d", "metadata": {}, "source": [ - "To help enforce proper use of our Python tool, we'll using [tool calling](/docs/how_to/tool_calling/):" + "To help enforce proper use of our Python tool, we'll using [tool calling](/docs/how_to/tool_calling):" ] }, { diff --git a/docs/docs/how_to/structured_output.ipynb b/docs/docs/how_to/structured_output.ipynb index 4c8b0fd26e0e3..b6765bca22b28 100644 --- a/docs/docs/how_to/structured_output.ipynb +++ b/docs/docs/how_to/structured_output.ipynb @@ -250,7 +250,7 @@ "id": "e28c14d3", "metadata": {}, "source": [ - "Alternatively, you can use tool calling directly to allow the model to choose between options, if your [chosen model supports it](/docs/integrations/chat/). This involves a bit more parsing and setup but in some instances leads to better performance because you don't have to use nested schemas. See [this how-to guide](/docs/how_to/tool_calling/) for more details." + "Alternatively, you can use tool calling directly to allow the model to choose between options, if your [chosen model supports it](/docs/integrations/chat/). This involves a bit more parsing and setup but in some instances leads to better performance because you don't have to use nested schemas. See [this how-to guide](/docs/how_to/tool_calling) for more details." ] }, { diff --git a/docs/docs/how_to/tool_calling.ipynb b/docs/docs/how_to/tool_calling.ipynb index 864949a22b2cb..e9f4f34890968 100644 --- a/docs/docs/how_to/tool_calling.ipynb +++ b/docs/docs/how_to/tool_calling.ipynb @@ -52,8 +52,13 @@ "support variants of a tool calling feature.\n", "\n", "LangChain implements standard interfaces for defining tools, passing them to LLMs, \n", - "and representing tool calls. This guide will show you how to use them.\n", - "\n", + "and representing tool calls. This guide and the other How-to pages in the Tool section will show you how to use tools with LangChain." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ "## Passing tools to chat models\n", "\n", "Chat models that support tool calling features implement a `.bind_tools` method, which \n", @@ -67,7 +72,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -98,7 +103,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -146,9 +151,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], "source": [ "# | output: false\n", "# | echo: false\n", @@ -167,76 +180,13 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "llm_with_tools = llm.bind_tools(tools)" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also use the `tool_choice` parameter to ensure certain behavior. For example, we can force our tool to call the multiply tool by using the following code:" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_9cViskmLvPnHjXk9tbVla5HA', 'function': {'arguments': '{\"a\":2,\"b\":4}', 'name': 'Multiply'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 9, 'prompt_tokens': 103, 'total_tokens': 112}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-095b827e-2bdd-43bb-8897-c843f4504883-0', tool_calls=[{'name': 'Multiply', 'args': {'a': 2, 'b': 4}, 'id': 'call_9cViskmLvPnHjXk9tbVla5HA'}], usage_metadata={'input_tokens': 103, 'output_tokens': 9, 'total_tokens': 112})" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "llm_forced_to_multiply = llm.bind_tools(tools, tool_choice=\"Multiply\")\n", - "llm_forced_to_multiply.invoke(\"what is 2 + 4\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Even if we pass it something that doesn't require multiplcation - it will still call the tool!" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also just force our tool to select at least one of our tools by passing in the \"any\" (or \"required\" which is OpenAI specific) keyword to the `tool_choice` parameter." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_mCSiJntCwHJUBfaHZVUB2D8W', 'function': {'arguments': '{\"a\":1,\"b\":2}', 'name': 'Add'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 15, 'prompt_tokens': 94, 'total_tokens': 109}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-28f75260-9900-4bed-8cd3-f1579abb65e5-0', tool_calls=[{'name': 'Add', 'args': {'a': 1, 'b': 2}, 'id': 'call_mCSiJntCwHJUBfaHZVUB2D8W'}], usage_metadata={'input_tokens': 94, 'output_tokens': 15, 'total_tokens': 109})" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "llm_forced_to_use_tool = llm.bind_tools(tools, tool_choice=\"any\")\n", - "llm_forced_to_use_tool.invoke(\"What day is today?\")" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -265,7 +215,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -279,9 +229,8 @@ " 'id': 'call_Fl0hQi4IBTzlpaJYlM5kPQhE'}]" ] }, - "execution_count": 5, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -307,7 +256,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -316,9 +265,8 @@ "[Multiply(a=3, b=12), Add(a=11, b=49)]" ] }, - "execution_count": 6, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -332,433 +280,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Streaming\n", - "\n", - "When tools are called in a streaming context, \n", - "[message chunks](https://api.python.langchain.com/en/latest/messages/langchain_core.messages.ai.AIMessageChunk.html#langchain_core.messages.ai.AIMessageChunk) \n", - "will be populated with [tool call chunk](https://api.python.langchain.com/en/latest/messages/langchain_core.messages.tool.ToolCallChunk.html#langchain_core.messages.tool.ToolCallChunk) \n", - "objects in a list via the `.tool_call_chunks` attribute. A `ToolCallChunk` includes \n", - "optional string fields for the tool `name`, `args`, and `id`, and includes an optional \n", - "integer field `index` that can be used to join chunks together. Fields are optional \n", - "because portions of a tool call may be streamed across different chunks (e.g., a chunk \n", - "that includes a substring of the arguments may have null values for the tool name and id).\n", - "\n", - "Because message chunks inherit from their parent message class, an \n", - "[AIMessageChunk](https://api.python.langchain.com/en/latest/messages/langchain_core.messages.ai.AIMessageChunk.html#langchain_core.messages.ai.AIMessageChunk) \n", - "with tool call chunks will also include `.tool_calls` and `.invalid_tool_calls` fields. \n", - "These fields are parsed best-effort from the message's tool call chunks.\n", - "\n", - "Note that not all providers currently support streaming for tool calls:" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[]\n", - "[{'name': 'Multiply', 'args': '', 'id': 'call_3aQwTP9CYlFxwOvQZPHDu6wL', 'index': 0}]\n", - "[{'name': None, 'args': '{\"a\"', 'id': None, 'index': 0}]\n", - "[{'name': None, 'args': ': 3, ', 'id': None, 'index': 0}]\n", - "[{'name': None, 'args': '\"b\": 1', 'id': None, 'index': 0}]\n", - "[{'name': None, 'args': '2}', 'id': None, 'index': 0}]\n", - "[{'name': 'Add', 'args': '', 'id': 'call_SQUoSsJz2p9Kx2x73GOgN1ja', 'index': 1}]\n", - "[{'name': None, 'args': '{\"a\"', 'id': None, 'index': 1}]\n", - "[{'name': None, 'args': ': 11,', 'id': None, 'index': 1}]\n", - "[{'name': None, 'args': ' \"b\": ', 'id': None, 'index': 1}]\n", - "[{'name': None, 'args': '49}', 'id': None, 'index': 1}]\n", - "[]\n" - ] - } - ], - "source": [ - "async for chunk in llm_with_tools.astream(query):\n", - " print(chunk.tool_call_chunks)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that adding message chunks will merge their corresponding tool call chunks. This is the principle by which LangChain's various [tool output parsers](/docs/how_to/output_parser_structured) support streaming.\n", - "\n", - "For example, below we accumulate tool call chunks:" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[]\n", - "[{'name': 'Multiply', 'args': '', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}]\n", - "[{'name': 'Multiply', 'args': '{\"a\"', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}]\n", - "[{'name': 'Multiply', 'args': '{\"a\": 3, ', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}]\n", - "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 1', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}]\n", - "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 12}', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}]\n", - "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 12}', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}, {'name': 'Add', 'args': '', 'id': 'call_b4iMiB3chGNGqbt5SjqqD2Wh', 'index': 1}]\n", - "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 12}', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}, {'name': 'Add', 'args': '{\"a\"', 'id': 'call_b4iMiB3chGNGqbt5SjqqD2Wh', 'index': 1}]\n", - "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 12}', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}, {'name': 'Add', 'args': '{\"a\": 11,', 'id': 'call_b4iMiB3chGNGqbt5SjqqD2Wh', 'index': 1}]\n", - "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 12}', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}, {'name': 'Add', 'args': '{\"a\": 11, \"b\": ', 'id': 'call_b4iMiB3chGNGqbt5SjqqD2Wh', 'index': 1}]\n", - "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 12}', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}, {'name': 'Add', 'args': '{\"a\": 11, \"b\": 49}', 'id': 'call_b4iMiB3chGNGqbt5SjqqD2Wh', 'index': 1}]\n", - "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 12}', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}, {'name': 'Add', 'args': '{\"a\": 11, \"b\": 49}', 'id': 'call_b4iMiB3chGNGqbt5SjqqD2Wh', 'index': 1}]\n" - ] - } - ], - "source": [ - "first = True\n", - "async for chunk in llm_with_tools.astream(query):\n", - " if first:\n", - " gathered = chunk\n", - " first = False\n", - " else:\n", - " gathered = gathered + chunk\n", - "\n", - " print(gathered.tool_call_chunks)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "print(type(gathered.tool_call_chunks[0][\"args\"]))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And below we accumulate tool calls to demonstrate partial parsing:" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[]\n", - "[]\n", - "[{'name': 'Multiply', 'args': {}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}]\n", - "[{'name': 'Multiply', 'args': {'a': 3}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}]\n", - "[{'name': 'Multiply', 'args': {'a': 3, 'b': 1}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}]\n", - "[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}]\n", - "[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}]\n", - "[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}, {'name': 'Add', 'args': {}, 'id': 'call_54Hx3DGjZitFlEjgMe1DYonh'}]\n", - "[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}, {'name': 'Add', 'args': {'a': 11}, 'id': 'call_54Hx3DGjZitFlEjgMe1DYonh'}]\n", - "[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}, {'name': 'Add', 'args': {'a': 11}, 'id': 'call_54Hx3DGjZitFlEjgMe1DYonh'}]\n", - "[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}, {'name': 'Add', 'args': {'a': 11, 'b': 49}, 'id': 'call_54Hx3DGjZitFlEjgMe1DYonh'}]\n", - "[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}, {'name': 'Add', 'args': {'a': 11, 'b': 49}, 'id': 'call_54Hx3DGjZitFlEjgMe1DYonh'}]\n" - ] - } - ], - "source": [ - "first = True\n", - "async for chunk in llm_with_tools.astream(query):\n", - " if first:\n", - " gathered = chunk\n", - " first = False\n", - " else:\n", - " gathered = gathered + chunk\n", - "\n", - " print(gathered.tool_calls)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - } - ], - "source": [ - "print(type(gathered.tool_calls[0][\"args\"]))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Passing tool outputs to the model\n", - "\n", - "If we're using the model-generated tool invocations to actually call tools and want to pass the tool results back to the model, we can do so using `ToolMessage`s." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[HumanMessage(content='What is 3 * 12? Also, what is 11 + 49?'),\n", - " AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_svc2GLSxNFALbaCAbSjMI9J8', 'function': {'arguments': '{\"a\": 3, \"b\": 12}', 'name': 'Multiply'}, 'type': 'function'}, {'id': 'call_r8jxte3zW6h3MEGV3zH2qzFh', 'function': {'arguments': '{\"a\": 11, \"b\": 49}', 'name': 'Add'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 50, 'prompt_tokens': 105, 'total_tokens': 155}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': 'fp_d9767fc5b9', 'finish_reason': 'tool_calls', 'logprobs': None}, id='run-a79ad1dd-95f1-4a46-b688-4c83f327a7b3-0', tool_calls=[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_svc2GLSxNFALbaCAbSjMI9J8'}, {'name': 'Add', 'args': {'a': 11, 'b': 49}, 'id': 'call_r8jxte3zW6h3MEGV3zH2qzFh'}]),\n", - " ToolMessage(content='36', tool_call_id='call_svc2GLSxNFALbaCAbSjMI9J8'),\n", - " ToolMessage(content='60', tool_call_id='call_r8jxte3zW6h3MEGV3zH2qzFh')]" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from langchain_core.messages import HumanMessage, ToolMessage\n", - "\n", - "messages = [HumanMessage(query)]\n", - "ai_msg = llm_with_tools.invoke(messages)\n", - "messages.append(ai_msg)\n", - "for tool_call in ai_msg.tool_calls:\n", - " selected_tool = {\"add\": add, \"multiply\": multiply}[tool_call[\"name\"].lower()]\n", - " tool_output = selected_tool.invoke(tool_call[\"args\"])\n", - " messages.append(ToolMessage(tool_output, tool_call_id=tool_call[\"id\"]))\n", - "messages" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "AIMessage(content='3 * 12 is 36 and 11 + 49 is 60.', response_metadata={'token_usage': {'completion_tokens': 18, 'prompt_tokens': 171, 'total_tokens': 189}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': 'fp_d9767fc5b9', 'finish_reason': 'stop', 'logprobs': None}, id='run-20b52149-e00d-48ea-97cf-f8de7a255f8c-0')" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "llm_with_tools.invoke(messages)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that we pass back the same `id` in the `ToolMessage` as the what we receive from the model in order to help the model match tool responses with tool calls.\n", - "\n", - "## Few-shot prompting\n", - "\n", - "For more complex tool use it's very useful to add few-shot examples to the prompt. We can do this by adding `AIMessage`s with `ToolCall`s and corresponding `ToolMessage`s to our prompt.\n", - "\n", - "For example, even with some special instructions our model can get tripped up by order of operations:" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'name': 'Multiply',\n", - " 'args': {'a': 119, 'b': 8},\n", - " 'id': 'call_T88XN6ECucTgbXXkyDeC2CQj'},\n", - " {'name': 'Add',\n", - " 'args': {'a': 952, 'b': -20},\n", - " 'id': 'call_licdlmGsRqzup8rhqJSb1yZ4'}]" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "llm_with_tools.invoke(\n", - " \"Whats 119 times 8 minus 20. Don't do any math yourself, only use tools for math. Respect order of operations\"\n", - ").tool_calls" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The model shouldn't be trying to add anything yet, since it technically can't know the results of 119 * 8 yet.\n", - "\n", - "By adding a prompt with some examples we can correct this behavior:" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[{'name': 'Multiply',\n", - " 'args': {'a': 119, 'b': 8},\n", - " 'id': 'call_9MvuwQqg7dlJupJcoTWiEsDo'}]" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from langchain_core.messages import AIMessage\n", - "from langchain_core.prompts import ChatPromptTemplate\n", - "from langchain_core.runnables import RunnablePassthrough\n", - "\n", - "examples = [\n", - " HumanMessage(\n", - " \"What's the product of 317253 and 128472 plus four\", name=\"example_user\"\n", - " ),\n", - " AIMessage(\n", - " \"\",\n", - " name=\"example_assistant\",\n", - " tool_calls=[\n", - " {\"name\": \"Multiply\", \"args\": {\"x\": 317253, \"y\": 128472}, \"id\": \"1\"}\n", - " ],\n", - " ),\n", - " ToolMessage(\"16505054784\", tool_call_id=\"1\"),\n", - " AIMessage(\n", - " \"\",\n", - " name=\"example_assistant\",\n", - " tool_calls=[{\"name\": \"Add\", \"args\": {\"x\": 16505054784, \"y\": 4}, \"id\": \"2\"}],\n", - " ),\n", - " ToolMessage(\"16505054788\", tool_call_id=\"2\"),\n", - " AIMessage(\n", - " \"The product of 317253 and 128472 plus four is 16505054788\",\n", - " name=\"example_assistant\",\n", - " ),\n", - "]\n", - "\n", - "system = \"\"\"You are bad at math but are an expert at using a calculator. \n", - "\n", - "Use past tool usage as an example of how to correctly use the tools.\"\"\"\n", - "few_shot_prompt = ChatPromptTemplate.from_messages(\n", - " [\n", - " (\"system\", system),\n", - " *examples,\n", - " (\"human\", \"{query}\"),\n", - " ]\n", - ")\n", - "\n", - "chain = {\"query\": RunnablePassthrough()} | few_shot_prompt | llm_with_tools\n", - "chain.invoke(\"Whats 119 times 8 minus 20\").tool_calls" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And we get the correct output this time.\n", - "\n", - "Here's what the [LangSmith trace](https://smith.langchain.com/public/f70550a1-585f-4c9d-a643-13148ab1616f/r) looks like." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Binding model-specific formats (advanced)\n", - "\n", - "Providers adopt different conventions for formatting tool schemas. \n", - "For instance, OpenAI uses a format like this:\n", - "\n", - "- `type`: The type of the tool. At the time of writing, this is always `\"function\"`.\n", - "- `function`: An object containing tool parameters.\n", - "- `function.name`: The name of the schema to output.\n", - "- `function.description`: A high level description of the schema to output.\n", - "- `function.parameters`: The nested details of the schema you want to extract, formatted as a [JSON schema](https://json-schema.org/) dict.\n", + "## Next steps\n", "\n", - "We can bind this model-specific format directly to the model as well if preferred. Here's an example:" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_mn4ELw1NbuE0DFYhIeK0GrPe', 'function': {'arguments': '{\"a\":119,\"b\":8}', 'name': 'multiply'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 17, 'prompt_tokens': 62, 'total_tokens': 79}, 'model_name': 'gpt-3.5-turbo', 'system_fingerprint': 'fp_c2295e73ad', 'finish_reason': 'tool_calls', 'logprobs': None}, id='run-353e8a9a-7125-4f94-8c68-4f3da4c21120-0', tool_calls=[{'name': 'multiply', 'args': {'a': 119, 'b': 8}, 'id': 'call_mn4ELw1NbuE0DFYhIeK0GrPe'}])" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from langchain_openai import ChatOpenAI\n", + "Now you've learned how to bind tool schemas to a chat model and to call those tools. Next, you can learn more about how to use tools:\n", "\n", - "model = ChatOpenAI()\n", - "\n", - "model_with_tools = model.bind(\n", - " tools=[\n", - " {\n", - " \"type\": \"function\",\n", - " \"function\": {\n", - " \"name\": \"multiply\",\n", - " \"description\": \"Multiply two integers together.\",\n", - " \"parameters\": {\n", - " \"type\": \"object\",\n", - " \"properties\": {\n", - " \"a\": {\"type\": \"number\", \"description\": \"First integer\"},\n", - " \"b\": {\"type\": \"number\", \"description\": \"Second integer\"},\n", - " },\n", - " \"required\": [\"a\", \"b\"],\n", - " },\n", - " },\n", - " }\n", - " ]\n", - ")\n", - "\n", - "model_with_tools.invoke(\"Whats 119 times 8?\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is functionally equivalent to the `bind_tools()` calls above." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Next steps\n", + "- Few shot promting [with tools](/docs/how_to/tools_few_shot/)\n", + "- Stream [tool calls](/docs/how_to/tool_streaming/)\n", + "- Bind [model-specific tools](/docs/how_to/tools_model_specific/)\n", + "- Pass [runtime values to tools](/docs/how_to/tool_runtime)\n", + "- Pass [tool results back to model](/docs/how_to/tool_results_pass_to_model)\n", "\n", - "Now you've learned how to bind tool schemas to a chat model and to call those tools. Next, check out some more specific uses of tool calling:\n", + "You can also check out some more specific uses of tool calling:\n", "\n", "- Building [tool-using chains and agents](/docs/how_to#tools)\n", "- Getting [structured outputs](/docs/how_to/structured_output/) from models" @@ -766,24 +298,10 @@ } ], "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.9" + "name": "python" } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 2 } diff --git a/docs/docs/how_to/tool_calling_parallel.ipynb b/docs/docs/how_to/tool_calling_parallel.ipynb new file mode 100644 index 0000000000000..dab57440390e1 --- /dev/null +++ b/docs/docs/how_to/tool_calling_parallel.ipynb @@ -0,0 +1,108 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Disabling parallel tool calling (OpenAI only)\n", + "\n", + "OpenAI tool calling performs tool calling in parallel by default. That means that if we ask a question like \"What is the weather in Tokyo, New York, and Chicago?\" and we have a tool for getting the weather, it will call the tool 3 times in parallel. We can force it to call only a single tool once by using the ``parallel_tool_call`` parameter." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First let's set up our tools and model:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_core.tools import tool\n", + "\n", + "\n", + "@tool\n", + "def add(a: int, b: int) -> int:\n", + " \"\"\"Adds a and b.\"\"\"\n", + " return a + b\n", + "\n", + "\n", + "@tool\n", + "def multiply(a: int, b: int) -> int:\n", + " \"\"\"Multiplies a and b.\"\"\"\n", + " return a * b\n", + "\n", + "\n", + "tools = [add, multiply]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from getpass import getpass\n", + "\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "os.environ[\"OPENAI_API_KEY\"] = getpass()\n", + "\n", + "llm = ChatOpenAI(model=\"gpt-3.5-turbo-0125\", temperature=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's show a quick example of how disabling parallel tool calls work:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'name': 'add',\n", + " 'args': {'a': 2, 'b': 2},\n", + " 'id': 'call_Hh4JOTCDM85Sm9Pr84VKrWu5'}]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "llm_with_tools = llm.bind_tools(tools, parallel_tool_calls=False)\n", + "llm_with_tools.invoke(\"Please call the first tool two times\").tool_calls" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see, even though we explicitly told the model to call a tool twice, by disabling parallel tool calls the model was constrained to only calling one." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/docs/how_to/tool_choice.ipynb b/docs/docs/how_to/tool_choice.ipynb new file mode 100644 index 0000000000000..050d6c6ce21fa --- /dev/null +++ b/docs/docs/how_to/tool_choice.ipynb @@ -0,0 +1,126 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How to force tool calling behavior\n", + "\n", + "In order to force our LLM to spelect a specific tool, we can use the `tool_choice` parameter to ensure certain behavior. First, let's define our model and tools:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_core.tools import tool\n", + "\n", + "\n", + "@tool\n", + "def add(a: int, b: int) -> int:\n", + " \"\"\"Adds a and b.\"\"\"\n", + " return a + b\n", + "\n", + "\n", + "@tool\n", + "def multiply(a: int, b: int) -> int:\n", + " \"\"\"Multiplies a and b.\"\"\"\n", + " return a * b\n", + "\n", + "\n", + "tools = [add, multiply]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# | output: false\n", + "# | echo: false\n", + "\n", + "%pip install -qU langchain langchain_openai\n", + "\n", + "import os\n", + "from getpass import getpass\n", + "\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "os.environ[\"OPENAI_API_KEY\"] = getpass()\n", + "\n", + "llm = ChatOpenAI(model=\"gpt-3.5-turbo-0125\", temperature=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For example, we can force our tool to call the multiply tool by using the following code:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_9cViskmLvPnHjXk9tbVla5HA', 'function': {'arguments': '{\"a\":2,\"b\":4}', 'name': 'Multiply'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 9, 'prompt_tokens': 103, 'total_tokens': 112}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-095b827e-2bdd-43bb-8897-c843f4504883-0', tool_calls=[{'name': 'Multiply', 'args': {'a': 2, 'b': 4}, 'id': 'call_9cViskmLvPnHjXk9tbVla5HA'}], usage_metadata={'input_tokens': 103, 'output_tokens': 9, 'total_tokens': 112})" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "llm_forced_to_multiply = llm.bind_tools(tools, tool_choice=\"Multiply\")\n", + "llm_forced_to_multiply.invoke(\"what is 2 + 4\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Even if we pass it something that doesn't require multiplcation - it will still call the tool!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also just force our tool to select at least one of our tools by passing in the \"any\" (or \"required\" which is OpenAI specific) keyword to the `tool_choice` parameter." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_mCSiJntCwHJUBfaHZVUB2D8W', 'function': {'arguments': '{\"a\":1,\"b\":2}', 'name': 'Add'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 15, 'prompt_tokens': 94, 'total_tokens': 109}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-28f75260-9900-4bed-8cd3-f1579abb65e5-0', tool_calls=[{'name': 'Add', 'args': {'a': 1, 'b': 2}, 'id': 'call_mCSiJntCwHJUBfaHZVUB2D8W'}], usage_metadata={'input_tokens': 94, 'output_tokens': 15, 'total_tokens': 109})" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "llm_forced_to_use_tool = llm.bind_tools(tools, tool_choice=\"any\")\n", + "llm_forced_to_use_tool.invoke(\"What day is today?\")" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/docs/how_to/tool_results_pass_to_model.ipynb b/docs/docs/how_to/tool_results_pass_to_model.ipynb new file mode 100644 index 0000000000000..c8ff47cebbf20 --- /dev/null +++ b/docs/docs/how_to/tool_results_pass_to_model.ipynb @@ -0,0 +1,127 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How to pass tool outputs to the model\n", + "\n", + "If we're using the model-generated tool invocations to actually call tools and want to pass the tool results back to the model, we can do so using `ToolMessage`s. First, let's define our tools and our model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_core.tools import tool\n", + "\n", + "\n", + "@tool\n", + "def add(a: int, b: int) -> int:\n", + " \"\"\"Adds a and b.\"\"\"\n", + " return a + b\n", + "\n", + "\n", + "@tool\n", + "def multiply(a: int, b: int) -> int:\n", + " \"\"\"Multiplies a and b.\"\"\"\n", + " return a * b\n", + "\n", + "\n", + "tools = [add, multiply]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from getpass import getpass\n", + "\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "os.environ[\"OPENAI_API_KEY\"] = getpass()\n", + "\n", + "llm = ChatOpenAI(model=\"gpt-3.5-turbo-0125\", temperature=0)\n", + "llm_with_tools = llm.bind_tools(tools)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can use ``ToolMessage`` to pass back the output of the tool calls to the model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[HumanMessage(content='What is 3 * 12? Also, what is 11 + 49?'),\n", + " AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_svc2GLSxNFALbaCAbSjMI9J8', 'function': {'arguments': '{\"a\": 3, \"b\": 12}', 'name': 'Multiply'}, 'type': 'function'}, {'id': 'call_r8jxte3zW6h3MEGV3zH2qzFh', 'function': {'arguments': '{\"a\": 11, \"b\": 49}', 'name': 'Add'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 50, 'prompt_tokens': 105, 'total_tokens': 155}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': 'fp_d9767fc5b9', 'finish_reason': 'tool_calls', 'logprobs': None}, id='run-a79ad1dd-95f1-4a46-b688-4c83f327a7b3-0', tool_calls=[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_svc2GLSxNFALbaCAbSjMI9J8'}, {'name': 'Add', 'args': {'a': 11, 'b': 49}, 'id': 'call_r8jxte3zW6h3MEGV3zH2qzFh'}]),\n", + " ToolMessage(content='36', tool_call_id='call_svc2GLSxNFALbaCAbSjMI9J8'),\n", + " ToolMessage(content='60', tool_call_id='call_r8jxte3zW6h3MEGV3zH2qzFh')]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from langchain_core.messages import HumanMessage, ToolMessage\n", + "\n", + "query = \"What is 3 * 12? Also, what is 11 + 49?\"\n", + "\n", + "messages = [HumanMessage(query)]\n", + "ai_msg = llm_with_tools.invoke(messages)\n", + "messages.append(ai_msg)\n", + "for tool_call in ai_msg.tool_calls:\n", + " selected_tool = {\"add\": add, \"multiply\": multiply}[tool_call[\"name\"].lower()]\n", + " tool_output = selected_tool.invoke(tool_call[\"args\"])\n", + " messages.append(ToolMessage(tool_output, tool_call_id=tool_call[\"id\"]))\n", + "messages" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AIMessage(content='3 * 12 is 36 and 11 + 49 is 60.', response_metadata={'token_usage': {'completion_tokens': 18, 'prompt_tokens': 171, 'total_tokens': 189}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': 'fp_d9767fc5b9', 'finish_reason': 'stop', 'logprobs': None}, id='run-20b52149-e00d-48ea-97cf-f8de7a255f8c-0')" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "llm_with_tools.invoke(messages)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that we pass back the same `id` in the `ToolMessage` as the what we receive from the model in order to help the model match tool responses with tool calls." + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/docs/how_to/tool_runtime.ipynb b/docs/docs/how_to/tool_runtime.ipynb index b2607cab30aec..b846e3b36ade6 100644 --- a/docs/docs/how_to/tool_runtime.ipynb +++ b/docs/docs/how_to/tool_runtime.ipynb @@ -12,7 +12,7 @@ "- [Chat models](/docs/concepts/#chat-models)\n", "- [LangChain Tools](/docs/concepts/#tools)\n", "- [How to create tools](/docs/how_to/custom_tools)\n", - "- [How to use a model to call tools](https://python.langchain.com/v0.2/docs/how_to/tool_calling/)\n", + "- [How to use a model to call tools](https://python.langchain.com/v0.2/docs/how_to/tool_calling)\n", ":::\n", "\n", ":::{.callout-info} Supported models\n", @@ -227,7 +227,7 @@ "\n", "Chat models only output requests to invoke tools, they don't actually invoke the underlying tools.\n", "\n", - "To see how to invoke the tools, please refer to [how to use a model to call tools](https://python.langchain.com/v0.2/docs/how_to/tool_calling/).\n", + "To see how to invoke the tools, please refer to [how to use a model to call tools](https://python.langchain.com/v0.2/docs/how_to/tool_calling).\n", ":::" ] } diff --git a/docs/docs/how_to/tool_streaming.ipynb b/docs/docs/how_to/tool_streaming.ipynb new file mode 100644 index 0000000000000..29958a43e4aaa --- /dev/null +++ b/docs/docs/how_to/tool_streaming.ipynb @@ -0,0 +1,235 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How to stream tool calls\n", + "\n", + "When tools are called in a streaming context, \n", + "[message chunks](https://api.python.langchain.com/en/latest/messages/langchain_core.messages.ai.AIMessageChunk.html#langchain_core.messages.ai.AIMessageChunk) \n", + "will be populated with [tool call chunk](https://api.python.langchain.com/en/latest/messages/langchain_core.messages.tool.ToolCallChunk.html#langchain_core.messages.tool.ToolCallChunk) \n", + "objects in a list via the `.tool_call_chunks` attribute. A `ToolCallChunk` includes \n", + "optional string fields for the tool `name`, `args`, and `id`, and includes an optional \n", + "integer field `index` that can be used to join chunks together. Fields are optional \n", + "because portions of a tool call may be streamed across different chunks (e.g., a chunk \n", + "that includes a substring of the arguments may have null values for the tool name and id).\n", + "\n", + "Because message chunks inherit from their parent message class, an \n", + "[AIMessageChunk](https://api.python.langchain.com/en/latest/messages/langchain_core.messages.ai.AIMessageChunk.html#langchain_core.messages.ai.AIMessageChunk) \n", + "with tool call chunks will also include `.tool_calls` and `.invalid_tool_calls` fields. \n", + "These fields are parsed best-effort from the message's tool call chunks.\n", + "\n", + "Note that not all providers currently support streaming for tool calls. Before we start let's define our tools and our model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_core.tools import tool\n", + "\n", + "\n", + "@tool\n", + "def add(a: int, b: int) -> int:\n", + " \"\"\"Adds a and b.\"\"\"\n", + " return a + b\n", + "\n", + "\n", + "@tool\n", + "def multiply(a: int, b: int) -> int:\n", + " \"\"\"Multiplies a and b.\"\"\"\n", + " return a * b\n", + "\n", + "\n", + "tools = [add, multiply]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from getpass import getpass\n", + "\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "os.environ[\"OPENAI_API_KEY\"] = getpass()\n", + "\n", + "llm = ChatOpenAI(model=\"gpt-3.5-turbo-0125\", temperature=0)\n", + "llm_with_tools = llm.bind_tools(tools)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's define our query and stream our output:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[]\n", + "[{'name': 'Multiply', 'args': '', 'id': 'call_3aQwTP9CYlFxwOvQZPHDu6wL', 'index': 0}]\n", + "[{'name': None, 'args': '{\"a\"', 'id': None, 'index': 0}]\n", + "[{'name': None, 'args': ': 3, ', 'id': None, 'index': 0}]\n", + "[{'name': None, 'args': '\"b\": 1', 'id': None, 'index': 0}]\n", + "[{'name': None, 'args': '2}', 'id': None, 'index': 0}]\n", + "[{'name': 'Add', 'args': '', 'id': 'call_SQUoSsJz2p9Kx2x73GOgN1ja', 'index': 1}]\n", + "[{'name': None, 'args': '{\"a\"', 'id': None, 'index': 1}]\n", + "[{'name': None, 'args': ': 11,', 'id': None, 'index': 1}]\n", + "[{'name': None, 'args': ' \"b\": ', 'id': None, 'index': 1}]\n", + "[{'name': None, 'args': '49}', 'id': None, 'index': 1}]\n", + "[]\n" + ] + } + ], + "source": [ + "query = \"What is 3 * 12? Also, what is 11 + 49?\"\n", + "\n", + "async for chunk in llm_with_tools.astream(query):\n", + " print(chunk.tool_call_chunks)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that adding message chunks will merge their corresponding tool call chunks. This is the principle by which LangChain's various [tool output parsers](/docs/how_to/output_parser_structured) support streaming.\n", + "\n", + "For example, below we accumulate tool call chunks:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[]\n", + "[{'name': 'Multiply', 'args': '', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}]\n", + "[{'name': 'Multiply', 'args': '{\"a\"', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}]\n", + "[{'name': 'Multiply', 'args': '{\"a\": 3, ', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}]\n", + "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 1', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}]\n", + "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 12}', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}]\n", + "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 12}', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}, {'name': 'Add', 'args': '', 'id': 'call_b4iMiB3chGNGqbt5SjqqD2Wh', 'index': 1}]\n", + "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 12}', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}, {'name': 'Add', 'args': '{\"a\"', 'id': 'call_b4iMiB3chGNGqbt5SjqqD2Wh', 'index': 1}]\n", + "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 12}', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}, {'name': 'Add', 'args': '{\"a\": 11,', 'id': 'call_b4iMiB3chGNGqbt5SjqqD2Wh', 'index': 1}]\n", + "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 12}', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}, {'name': 'Add', 'args': '{\"a\": 11, \"b\": ', 'id': 'call_b4iMiB3chGNGqbt5SjqqD2Wh', 'index': 1}]\n", + "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 12}', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}, {'name': 'Add', 'args': '{\"a\": 11, \"b\": 49}', 'id': 'call_b4iMiB3chGNGqbt5SjqqD2Wh', 'index': 1}]\n", + "[{'name': 'Multiply', 'args': '{\"a\": 3, \"b\": 12}', 'id': 'call_AkL3dVeCjjiqvjv8ckLxL3gP', 'index': 0}, {'name': 'Add', 'args': '{\"a\": 11, \"b\": 49}', 'id': 'call_b4iMiB3chGNGqbt5SjqqD2Wh', 'index': 1}]\n" + ] + } + ], + "source": [ + "first = True\n", + "async for chunk in llm_with_tools.astream(query):\n", + " if first:\n", + " gathered = chunk\n", + " first = False\n", + " else:\n", + " gathered = gathered + chunk\n", + "\n", + " print(gathered.tool_call_chunks)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(gathered.tool_call_chunks[0][\"args\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And below we accumulate tool calls to demonstrate partial parsing:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[]\n", + "[]\n", + "[{'name': 'Multiply', 'args': {}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}]\n", + "[{'name': 'Multiply', 'args': {'a': 3}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}]\n", + "[{'name': 'Multiply', 'args': {'a': 3, 'b': 1}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}]\n", + "[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}]\n", + "[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}]\n", + "[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}, {'name': 'Add', 'args': {}, 'id': 'call_54Hx3DGjZitFlEjgMe1DYonh'}]\n", + "[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}, {'name': 'Add', 'args': {'a': 11}, 'id': 'call_54Hx3DGjZitFlEjgMe1DYonh'}]\n", + "[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}, {'name': 'Add', 'args': {'a': 11}, 'id': 'call_54Hx3DGjZitFlEjgMe1DYonh'}]\n", + "[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}, {'name': 'Add', 'args': {'a': 11, 'b': 49}, 'id': 'call_54Hx3DGjZitFlEjgMe1DYonh'}]\n", + "[{'name': 'Multiply', 'args': {'a': 3, 'b': 12}, 'id': 'call_4p0D4tHVXSiae9Mu0e8jlI1m'}, {'name': 'Add', 'args': {'a': 11, 'b': 49}, 'id': 'call_54Hx3DGjZitFlEjgMe1DYonh'}]\n" + ] + } + ], + "source": [ + "first = True\n", + "async for chunk in llm_with_tools.astream(query):\n", + " if first:\n", + " gathered = chunk\n", + " first = False\n", + " else:\n", + " gathered = gathered + chunk\n", + "\n", + " print(gathered.tool_calls)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n" + ] + } + ], + "source": [ + "print(type(gathered.tool_calls[0][\"args\"]))" + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/docs/how_to/tools_few_shot.ipynb b/docs/docs/how_to/tools_few_shot.ipynb new file mode 100644 index 0000000000000..c4f3570da1a94 --- /dev/null +++ b/docs/docs/how_to/tools_few_shot.ipynb @@ -0,0 +1,175 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How to use few-shot prompting with tool calling\n", + "\n", + "For more complex tool use it's very useful to add few-shot examples to the prompt. We can do this by adding `AIMessage`s with `ToolCall`s and corresponding `ToolMessage`s to our prompt.\n", + "\n", + "First let's define our tools and model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_core.tools import tool\n", + "\n", + "\n", + "@tool\n", + "def add(a: int, b: int) -> int:\n", + " \"\"\"Adds a and b.\"\"\"\n", + " return a + b\n", + "\n", + "\n", + "@tool\n", + "def multiply(a: int, b: int) -> int:\n", + " \"\"\"Multiplies a and b.\"\"\"\n", + " return a * b\n", + "\n", + "\n", + "tools = [add, multiply]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from getpass import getpass\n", + "\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "os.environ[\"OPENAI_API_KEY\"] = getpass()\n", + "\n", + "llm = ChatOpenAI(model=\"gpt-3.5-turbo-0125\", temperature=0)\n", + "llm_with_tools = llm.bind_tools(tools)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's run our model where we can notice that even with some special instructions our model can get tripped up by order of operations. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'name': 'Multiply',\n", + " 'args': {'a': 119, 'b': 8},\n", + " 'id': 'call_T88XN6ECucTgbXXkyDeC2CQj'},\n", + " {'name': 'Add',\n", + " 'args': {'a': 952, 'b': -20},\n", + " 'id': 'call_licdlmGsRqzup8rhqJSb1yZ4'}]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "llm_with_tools.invoke(\n", + " \"Whats 119 times 8 minus 20. Don't do any math yourself, only use tools for math. Respect order of operations\"\n", + ").tool_calls" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The model shouldn't be trying to add anything yet, since it technically can't know the results of 119 * 8 yet.\n", + "\n", + "By adding a prompt with some examples we can correct this behavior:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'name': 'Multiply',\n", + " 'args': {'a': 119, 'b': 8},\n", + " 'id': 'call_9MvuwQqg7dlJupJcoTWiEsDo'}]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from langchain_core.messages import AIMessage, HumanMessage, ToolMessage\n", + "from langchain_core.prompts import ChatPromptTemplate\n", + "from langchain_core.runnables import RunnablePassthrough\n", + "\n", + "examples = [\n", + " HumanMessage(\n", + " \"What's the product of 317253 and 128472 plus four\", name=\"example_user\"\n", + " ),\n", + " AIMessage(\n", + " \"\",\n", + " name=\"example_assistant\",\n", + " tool_calls=[\n", + " {\"name\": \"Multiply\", \"args\": {\"x\": 317253, \"y\": 128472}, \"id\": \"1\"}\n", + " ],\n", + " ),\n", + " ToolMessage(\"16505054784\", tool_call_id=\"1\"),\n", + " AIMessage(\n", + " \"\",\n", + " name=\"example_assistant\",\n", + " tool_calls=[{\"name\": \"Add\", \"args\": {\"x\": 16505054784, \"y\": 4}, \"id\": \"2\"}],\n", + " ),\n", + " ToolMessage(\"16505054788\", tool_call_id=\"2\"),\n", + " AIMessage(\n", + " \"The product of 317253 and 128472 plus four is 16505054788\",\n", + " name=\"example_assistant\",\n", + " ),\n", + "]\n", + "\n", + "system = \"\"\"You are bad at math but are an expert at using a calculator. \n", + "\n", + "Use past tool usage as an example of how to correctly use the tools.\"\"\"\n", + "few_shot_prompt = ChatPromptTemplate.from_messages(\n", + " [\n", + " (\"system\", system),\n", + " *examples,\n", + " (\"human\", \"{query}\"),\n", + " ]\n", + ")\n", + "\n", + "chain = {\"query\": RunnablePassthrough()} | few_shot_prompt | llm_with_tools\n", + "chain.invoke(\"Whats 119 times 8 minus 20\").tool_calls" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we get the correct output this time.\n", + "\n", + "Here's what the [LangSmith trace](https://smith.langchain.com/public/f70550a1-585f-4c9d-a643-13148ab1616f/r) looks like." + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/docs/how_to/tools_model_specific.ipynb b/docs/docs/how_to/tools_model_specific.ipynb new file mode 100644 index 0000000000000..8596f1815baf9 --- /dev/null +++ b/docs/docs/how_to/tools_model_specific.ipynb @@ -0,0 +1,79 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How to bind model-specific tools\n", + "\n", + "Providers adopt different conventions for formatting tool schemas. \n", + "For instance, OpenAI uses a format like this:\n", + "\n", + "- `type`: The type of the tool. At the time of writing, this is always `\"function\"`.\n", + "- `function`: An object containing tool parameters.\n", + "- `function.name`: The name of the schema to output.\n", + "- `function.description`: A high level description of the schema to output.\n", + "- `function.parameters`: The nested details of the schema you want to extract, formatted as a [JSON schema](https://json-schema.org/) dict.\n", + "\n", + "We can bind this model-specific format directly to the model as well if preferred. Here's an example:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_mn4ELw1NbuE0DFYhIeK0GrPe', 'function': {'arguments': '{\"a\":119,\"b\":8}', 'name': 'multiply'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 17, 'prompt_tokens': 62, 'total_tokens': 79}, 'model_name': 'gpt-3.5-turbo', 'system_fingerprint': 'fp_c2295e73ad', 'finish_reason': 'tool_calls', 'logprobs': None}, id='run-353e8a9a-7125-4f94-8c68-4f3da4c21120-0', tool_calls=[{'name': 'multiply', 'args': {'a': 119, 'b': 8}, 'id': 'call_mn4ELw1NbuE0DFYhIeK0GrPe'}])" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from langchain_openai import ChatOpenAI\n", + "\n", + "model = ChatOpenAI()\n", + "\n", + "model_with_tools = model.bind(\n", + " tools=[\n", + " {\n", + " \"type\": \"function\",\n", + " \"function\": {\n", + " \"name\": \"multiply\",\n", + " \"description\": \"Multiply two integers together.\",\n", + " \"parameters\": {\n", + " \"type\": \"object\",\n", + " \"properties\": {\n", + " \"a\": {\"type\": \"number\", \"description\": \"First integer\"},\n", + " \"b\": {\"type\": \"number\", \"description\": \"Second integer\"},\n", + " },\n", + " \"required\": [\"a\", \"b\"],\n", + " },\n", + " },\n", + " }\n", + " ]\n", + ")\n", + "\n", + "model_with_tools.invoke(\"Whats 119 times 8?\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is functionally equivalent to the `bind_tools()` method." + ] + } + ], + "metadata": { + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/docs/how_to/tools_prompting.ipynb b/docs/docs/how_to/tools_prompting.ipynb index fc91dd263862a..d3f6bac4dc892 100644 --- a/docs/docs/how_to/tools_prompting.ipynb +++ b/docs/docs/how_to/tools_prompting.ipynb @@ -19,7 +19,7 @@ "\n", ":::{.callout-caution}\n", "\n", - "Some models have been fine-tuned for tool calling and provide a dedicated API for tool calling. Generally, such models are better at tool calling than non-fine-tuned models, and are recommended for use cases that require tool calling. Please see the [how to use a chat model to call tools](/docs/how_to/tool_calling/) guide for more information.\n", + "Some models have been fine-tuned for tool calling and provide a dedicated API for tool calling. Generally, such models are better at tool calling than non-fine-tuned models, and are recommended for use cases that require tool calling. Please see the [how to use a chat model to call tools](/docs/how_to/tool_calling) guide for more information.\n", "\n", ":::\n", "\n", @@ -34,7 +34,7 @@ "\n", ":::\n", "\n", - "In this guide, we'll see how to add **ad-hoc** tool calling support to a chat model. This is an alternative method to invoke tools if you're using a model that does not natively support [tool calling](/docs/how_to/tool_calling/).\n", + "In this guide, we'll see how to add **ad-hoc** tool calling support to a chat model. This is an alternative method to invoke tools if you're using a model that does not natively support [tool calling](/docs/how_to/tool_calling).\n", "\n", "We'll do this by simply writing a prompt that will get the model to invoke the appropriate tools. Here's a diagram of the logic:\n", "\n", @@ -87,7 +87,7 @@ "id": "7ec6409b-21e5-4d0a-8a46-c4ef0b055dd3", "metadata": {}, "source": [ - "You can select any of the given models for this how-to guide. Keep in mind that most of these models already [support native tool calling](/docs/integrations/chat/), so using the prompting strategy shown here doesn't make sense for these models, and instead you should follow the [how to use a chat model to call tools](/docs/how_to/tool_calling/) guide.\n", + "You can select any of the given models for this how-to guide. Keep in mind that most of these models already [support native tool calling](/docs/integrations/chat/), so using the prompting strategy shown here doesn't make sense for these models, and instead you should follow the [how to use a chat model to call tools](/docs/how_to/tool_calling) guide.\n", "\n", "```{=mdx}\n", "import ChatModelTabs from \"@theme/ChatModelTabs\";\n", diff --git a/docs/docs/how_to/trim_messages.ipynb b/docs/docs/how_to/trim_messages.ipynb index e82c126f61282..efbe0c009b88b 100644 --- a/docs/docs/how_to/trim_messages.ipynb +++ b/docs/docs/how_to/trim_messages.ipynb @@ -323,7 +323,7 @@ { "data": { "text/plain": [ - "AIMessage(content='A \"polygon\"! Because it\\'s a \"poly-gone\" silent!', response_metadata={'token_usage': {'completion_tokens': 14, 'prompt_tokens': 32, 'total_tokens': 46}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_319be4768e', 'finish_reason': 'stop', 'logprobs': None}, id='run-64cc4575-14d1-4f3f-b4af-97f24758f703-0', usage_metadata={'input_tokens': 32, 'output_tokens': 14, 'total_tokens': 46})" + "AIMessage(content='A: A \"Polly-gone\"!', response_metadata={'token_usage': {'completion_tokens': 9, 'prompt_tokens': 32, 'total_tokens': 41}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_66b29dffce', 'finish_reason': 'stop', 'logprobs': None}, id='run-83e96ddf-bcaa-4f63-824c-98b0f8a0d474-0', usage_metadata={'input_tokens': 32, 'output_tokens': 9, 'total_tokens': 41})" ] }, "execution_count": 7, @@ -391,24 +391,17 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 9, "id": "a9517858-fc2f-4dc3-898d-bf98a0e905a0", "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parent run c87e2f1b-81ad-4fa7-bfd9-ce6edb29a482 not found for run 7892ee8f-0669-4d6b-a2ca-ef8aae81042a. Treating as a root run.\n" - ] - }, { "data": { "text/plain": [ - "AIMessage(content=\"A polygon! Because it's a parrot gone quiet!\", response_metadata={'token_usage': {'completion_tokens': 11, 'prompt_tokens': 32, 'total_tokens': 43}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_319be4768e', 'finish_reason': 'stop', 'logprobs': None}, id='run-72dad96e-8b58-45f4-8c08-21f9f1a6b68f-0', usage_metadata={'input_tokens': 32, 'output_tokens': 11, 'total_tokens': 43})" + "AIMessage(content='A \"polly-no-wanna-cracker\"!', response_metadata={'token_usage': {'completion_tokens': 10, 'prompt_tokens': 32, 'total_tokens': 42}, 'model_name': 'gpt-4o-2024-05-13', 'system_fingerprint': 'fp_5bf7397cd3', 'finish_reason': 'stop', 'logprobs': None}, id='run-054dd309-3497-4e7b-b22a-c1859f11d32e-0', usage_metadata={'input_tokens': 32, 'output_tokens': 10, 'total_tokens': 42})" ] }, - "execution_count": 14, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -422,7 +415,7 @@ "\n", "def dummy_get_session_history(session_id):\n", " if session_id != \"1\":\n", - " raise InMemoryChatMessageHistory()\n", + " return InMemoryChatMessageHistory()\n", " return chat_history\n", "\n", "\n", @@ -464,9 +457,9 @@ ], "metadata": { "kernelspec": { - "display_name": "poetry-venv-2", + "display_name": "Python 3 (ipykernel)", "language": "python", - "name": "poetry-venv-2" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -478,7 +471,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.1" + "version": "3.10.4" } }, "nbformat": 4, diff --git a/docs/docs/integrations/chat/anthropic.ipynb b/docs/docs/integrations/chat/anthropic.ipynb index 0bdf9f24c44b1..d2fa164d99938 100644 --- a/docs/docs/integrations/chat/anthropic.ipynb +++ b/docs/docs/integrations/chat/anthropic.ipynb @@ -36,7 +36,7 @@ "| [ChatAnthropic](https://api.python.langchain.com/en/latest/chat_models/langchain_anthropic.chat_models.ChatAnthropic.html) | [langchain-anthropic](https://api.python.langchain.com/en/latest/anthropic_api_reference.html) | ❌ | beta | ✅ | ![PyPI - Downloads](https://img.shields.io/pypi/dm/langchain-anthropic?style=flat-square&label=%20) | ![PyPI - Version](https://img.shields.io/pypi/v/langchain-anthropic?style=flat-square&label=%20) |\n", "\n", "### Model features\n", - "| [Tool calling](/docs/how_to/tool_calling/) | [Structured output](/docs/how_to/structured_output/) | JSON mode | [Image input](/docs/how_to/multimodal_inputs/) | Audio input | Video input | [Token-level streaming](/docs/how_to/chat_streaming/) | Native async | [Token usage](/docs/how_to/chat_token_usage_tracking/) | [Logprobs](/docs/how_to/logprobs/) |\n", + "| [Tool calling](/docs/how_to/tool_calling) | [Structured output](/docs/how_to/structured_output/) | JSON mode | [Image input](/docs/how_to/multimodal_inputs/) | Audio input | Video input | [Token-level streaming](/docs/how_to/chat_streaming/) | Native async | [Token usage](/docs/how_to/chat_token_usage_tracking/) | [Logprobs](/docs/how_to/logprobs/) |\n", "| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n", "| ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❌ | \n", "\n", diff --git a/docs/docs/integrations/chat/google_vertex_ai_palm.ipynb b/docs/docs/integrations/chat/google_vertex_ai_palm.ipynb index 74e1dd87e1c9b..e2f4f6ae277ba 100644 --- a/docs/docs/integrations/chat/google_vertex_ai_palm.ipynb +++ b/docs/docs/integrations/chat/google_vertex_ai_palm.ipynb @@ -35,7 +35,7 @@ "| [ChatVertexAI](https://api.python.langchain.com/en/latest/chat_models/langchain_google_vertexai.chat_models.ChatVertexAI.html) | [langchain-google-vertexai](https://api.python.langchain.com/en/latest/google_vertexai_api_reference.html) | ❌ | beta | ✅ | ![PyPI - Downloads](https://img.shields.io/pypi/dm/langchain-google-vertexai?style=flat-square&label=%20) | ![PyPI - Version](https://img.shields.io/pypi/v/langchain-google-vertexai?style=flat-square&label=%20) |\n", "\n", "### Model features\n", - "| [Tool calling](/docs/how_to/tool_calling/) | [Structured output](/docs/how_to/structured_output/) | JSON mode | [Image input](/docs/how_to/multimodal_inputs/) | Audio input | Video input | [Token-level streaming](/docs/how_to/chat_streaming/) | Native async | [Token usage](/docs/how_to/chat_token_usage_tracking/) | [Logprobs](/docs/how_to/logprobs/) |\n", + "| [Tool calling](/docs/how_to/tool_calling) | [Structured output](/docs/how_to/structured_output/) | JSON mode | [Image input](/docs/how_to/multimodal_inputs/) | Audio input | Video input | [Token-level streaming](/docs/how_to/chat_streaming/) | Native async | [Token usage](/docs/how_to/chat_token_usage_tracking/) | [Logprobs](/docs/how_to/logprobs/) |\n", "| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n", "| ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | \n", "\n", diff --git a/docs/docs/integrations/chat/groq.ipynb b/docs/docs/integrations/chat/groq.ipynb index 6f63ff41984b5..01b1549a82d1b 100644 --- a/docs/docs/integrations/chat/groq.ipynb +++ b/docs/docs/integrations/chat/groq.ipynb @@ -91,7 +91,7 @@ "\n", "## Tool calling\n", "\n", - "Groq chat models support [tool calling](/docs/how_to/tool_calling/) to generate output matching a specific schema. The model may choose to call multiple tools or the same tool multiple times if appropriate.\n", + "Groq chat models support [tool calling](/docs/how_to/tool_calling) to generate output matching a specific schema. The model may choose to call multiple tools or the same tool multiple times if appropriate.\n", "\n", "Here's an example:" ] diff --git a/docs/docs/integrations/chat/llamacpp.ipynb b/docs/docs/integrations/chat/llamacpp.ipynb index bc85306179cb8..4e1cef0f3d4fd 100644 --- a/docs/docs/integrations/chat/llamacpp.ipynb +++ b/docs/docs/integrations/chat/llamacpp.ipynb @@ -21,7 +21,7 @@ "| [ChatLlamaCpp](https://api.python.langchain.com/en/latest/chat_models/langchain_community.chat_models.llamacpp.ChatLlamaCpp.html) | [langchain-community](https://api.python.langchain.com/en/latest/community_api_reference.html) | ✅ | ❌ | ❌ |\n", "\n", "### Model features\n", - "| [Tool calling](/docs/how_to/tool_calling/) | [Structured output](/docs/how_to/structured_output/) | JSON mode | Image input | Audio input | Video input | [Token-level streaming](/docs/how_to/chat_streaming/) | Native async | [Token usage](/docs/how_to/chat_token_usage_tracking/) | [Logprobs](/docs/how_to/logprobs/) |\n", + "| [Tool calling](/docs/how_to/tool_calling) | [Structured output](/docs/how_to/structured_output/) | JSON mode | Image input | Audio input | Video input | [Token-level streaming](/docs/how_to/chat_streaming/) | Native async | [Token usage](/docs/how_to/chat_token_usage_tracking/) | [Logprobs](/docs/how_to/logprobs/) |\n", "| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n", "| ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | \n", "\n", diff --git a/docs/docs/integrations/chat/openai.ipynb b/docs/docs/integrations/chat/openai.ipynb index 81cf1f25f0b12..01ada5b4a92fd 100644 --- a/docs/docs/integrations/chat/openai.ipynb +++ b/docs/docs/integrations/chat/openai.ipynb @@ -41,7 +41,7 @@ "| [ChatOpenAI](https://api.python.langchain.com/en/latest/chat_models/langchain_openai.chat_models.base.ChatOpenAI.html) | [langchain-openai](https://api.python.langchain.com/en/latest/openai_api_reference.html) | ❌ | beta | ✅ | ![PyPI - Downloads](https://img.shields.io/pypi/dm/langchain-openai?style=flat-square&label=%20) | ![PyPI - Version](https://img.shields.io/pypi/v/langchain-openai?style=flat-square&label=%20) |\n", "\n", "### Model features\n", - "| [Tool calling](/docs/how_to/tool_calling/) | [Structured output](/docs/how_to/structured_output/) | JSON mode | Image input | Audio input | Video input | [Token-level streaming](/docs/how_to/chat_streaming/) | Native async | [Token usage](/docs/how_to/chat_token_usage_tracking/) | [Logprobs](/docs/how_to/logprobs/) |\n", + "| [Tool calling](/docs/how_to/tool_calling) | [Structured output](/docs/how_to/structured_output/) | JSON mode | Image input | Audio input | Video input | [Token-level streaming](/docs/how_to/chat_streaming/) | Native async | [Token usage](/docs/how_to/chat_token_usage_tracking/) | [Logprobs](/docs/how_to/logprobs/) |\n", "| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n", "| ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | \n", "\n", diff --git a/docs/docs/tutorials/chatbot.ipynb b/docs/docs/tutorials/chatbot.ipynb index e5c69d477ba9e..b99fd7e4cfabd 100644 --- a/docs/docs/tutorials/chatbot.ipynb +++ b/docs/docs/tutorials/chatbot.ipynb @@ -143,7 +143,7 @@ { "data": { "text/plain": [ - "AIMessage(content='Hello Bob! How can I assist you today?', response_metadata={'token_usage': {'completion_tokens': 10, 'prompt_tokens': 12, 'total_tokens': 22}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-8ecc8a9f-8b32-49ad-8e41-5caa26282f76-0', usage_metadata={'input_tokens': 12, 'output_tokens': 10, 'total_tokens': 22})" + "AIMessage(content='Hello Bob! How can I assist you today?', response_metadata={'token_usage': {'completion_tokens': 10, 'prompt_tokens': 12, 'total_tokens': 22}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-d939617f-0c3b-45e9-a93f-13dafecbd4b5-0', usage_metadata={'input_tokens': 12, 'output_tokens': 10, 'total_tokens': 22})" ] }, "execution_count": 2, @@ -172,7 +172,7 @@ { "data": { "text/plain": [ - "AIMessage(content=\"I'm sorry, I don't have access to that information.\", response_metadata={'token_usage': {'completion_tokens': 13, 'prompt_tokens': 12, 'total_tokens': 25}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-4e0066e8-0dcc-4aea-b4f9-b9029c81724f-0', usage_metadata={'input_tokens': 12, 'output_tokens': 13, 'total_tokens': 25})" + "AIMessage(content=\"I'm sorry, I don't have access to personal information unless you provide it to me. How may I assist you today?\", response_metadata={'token_usage': {'completion_tokens': 26, 'prompt_tokens': 12, 'total_tokens': 38}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-47bc8c20-af7b-4fd2-9345-f0e9fdf18ce3-0', usage_metadata={'input_tokens': 12, 'output_tokens': 26, 'total_tokens': 38})" ] }, "execution_count": 3, @@ -204,7 +204,7 @@ { "data": { "text/plain": [ - "AIMessage(content='Your name is Bob. How can I assist you today, Bob?', response_metadata={'token_usage': {'completion_tokens': 14, 'prompt_tokens': 35, 'total_tokens': 49}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-c377d868-1bfe-491a-82fb-1f9122939796-0', usage_metadata={'input_tokens': 35, 'output_tokens': 14, 'total_tokens': 49})" + "AIMessage(content='Your name is Bob. How can I help you, Bob?', response_metadata={'token_usage': {'completion_tokens': 13, 'prompt_tokens': 35, 'total_tokens': 48}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-9f90291b-4df9-41dc-9ecf-1ee1081f4490-0', usage_metadata={'input_tokens': 35, 'output_tokens': 13, 'total_tokens': 48})" ] }, "execution_count": 4, @@ -307,17 +307,10 @@ "execution_count": 8, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parent run 9bdaa45d-604e-4891-9b0a-28754985f10b not found for run 271bd46a-f980-407a-af8a-9399420bce8d. Treating as a root run.\n" - ] - }, { "data": { "text/plain": [ - "'Hello Bob! How can I assist you today?'" + "'Hi Bob! How can I assist you today?'" ] }, "execution_count": 8, @@ -339,17 +332,10 @@ "execution_count": 9, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parent run 16482292-535c-449d-8a9d-d0fccf5112eb not found for run 7f2e501a-d5b4-4d8c-924b-aae9eb9d7267. Treating as a root run.\n" - ] - }, { "data": { "text/plain": [ - "'Your name is Bob. How can I assist you today, Bob?'" + "'Your name is Bob. How can I help you today, Bob?'" ] }, "execution_count": 9, @@ -378,17 +364,10 @@ "execution_count": 10, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parent run c14d7130-04c5-445f-9e22-442f7c7e8f07 not found for run 946beadc-5cf1-468f-bac4-ca5ddc10ea73. Treating as a root run.\n" - ] - }, { "data": { "text/plain": [ - "\"I'm sorry, I don't know your name as you have not provided it.\"" + "\"I'm sorry, I cannot determine your name as I am an AI assistant and do not have access to that information.\"" ] }, "execution_count": 10, @@ -419,13 +398,6 @@ "execution_count": 11, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parent run 4f61611c-3875-4b2d-9f89-af452866d55a not found for run 066a30b1-bbb0-4fee-a035-7fdb41c28d91. Treating as a root run.\n" - ] - }, { "data": { "text/plain": [ @@ -548,17 +520,10 @@ "execution_count": 16, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parent run 51e624b3-19fd-435f-b580-2a3e4f2d0dc9 not found for run b411f007-b2ad-48c3-968c-aa5ecbb58aea. Treating as a root run.\n" - ] - }, { "data": { "text/plain": [ - "'Hello Jim! How can I assist you today?'" + "'Hello, Jim! How can I assist you today?'" ] }, "execution_count": 16, @@ -580,13 +545,6 @@ "execution_count": 17, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parent run a30b22cd-698f-48a1-94a0-1a172242e292 not found for run 52b0b60d-5d2a-4610-a572-037602792ad6. Treating as a root run.\n" - ] - }, { "data": { "text/plain": [ @@ -698,13 +656,6 @@ "execution_count": 22, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parent run d02b7778-4a91-4831-ace9-b33bb456dc90 not found for run ee0a20dd-5b9e-4862-b3c9-8e2e72b8eb82. Treating as a root run.\n" - ] - }, { "data": { "text/plain": [ @@ -730,13 +681,6 @@ "execution_count": 23, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parent run 12422d4c-6494-490e-845e-08dcc1c6a4b9 not found for run a82eb759-f51d-4488-871b-6e2d601b4128. Treating as a root run.\n" - ] - }, { "data": { "text/plain": [ @@ -781,7 +725,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -796,7 +740,7 @@ " AIMessage(content='yes!')]" ] }, - "execution_count": 34, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -841,16 +785,16 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "\"I'm sorry, I don't have access to personal information. How can I assist you today?\"" + "\"I'm sorry, but I don't have access to your personal information. How can I assist you today?\"" ] }, - "execution_count": 35, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -884,7 +828,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 26, "metadata": {}, "outputs": [ { @@ -893,7 +837,7 @@ "'You asked \"what\\'s 2 + 2?\"'" ] }, - "execution_count": 36, + "execution_count": 26, "metadata": {}, "output_type": "execute_result" } @@ -917,7 +861,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -932,23 +876,16 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 28, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parent run e1bb2af3-192b-4bd1-8734-6d2dff1d80b6 not found for run 0c734998-cf16-4708-8658-043a6c7b4a91. Treating as a root run.\n" - ] - }, { "data": { "text/plain": [ - "\"I'm sorry, I don't have access to your name. How can I assist you today?\"" + "\"I'm sorry, I don't have access to that information. How can I assist you today?\"" ] }, - "execution_count": 38, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -974,23 +911,16 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 29, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parent run 181a1f04-9176-4837-80e8-ce74866775a2 not found for run ad402c5a-8341-4c62-ac58-cdf923b3b9ec. Treating as a root run.\n" - ] - }, { "data": { "text/plain": [ - "\"You haven't asked a math problem yet. Feel free to ask any math question you have, and I'll do my best to help you with it.\"" + "\"You haven't asked a math problem yet. Feel free to ask any math-related question you have, and I'll be happy to help you with it.\"" ] }, - "execution_count": 39, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -1029,25 +959,14 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 30, "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "Parent run e0ee52b6-1261-4f2d-98ca-f78c9019684b not found for run 0f6d7995-c32c-4bdb-b7a6-b3d932c13389. Treating as a root run.\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "|Sure|,| Todd|!| Here|'s| a| joke| for| you|:\n", - "\n", - "|Why| don|'t| scientists| trust| atoms|?\n", - "\n", - "|Because| they| make| up| everything|!||" + "|Hi| Todd|!| Sure|,| here|'s| a| joke| for| you|:| Why| couldn|'t| the| bicycle| find| its| way| home|?| Because| it| lost| its| bearings|!| 😄||" ] } ], @@ -1084,9 +1003,9 @@ ], "metadata": { "kernelspec": { - "display_name": "poetry-venv-2", + "display_name": "Python 3 (ipykernel)", "language": "python", - "name": "poetry-venv-2" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -1098,7 +1017,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.10.4" } }, "nbformat": 4, diff --git a/docs/scripts/model_feat_table.py b/docs/scripts/model_feat_table.py index 66298d7a02e4e..1ff4ae087ac1f 100644 --- a/docs/scripts/model_feat_table.py +++ b/docs/scripts/model_feat_table.py @@ -232,7 +232,7 @@ def get_chat_model_table() -> str: ] title = [ "Model", - "[Tool calling](/docs/how_to/tool_calling/)", + "[Tool calling](/docs/how_to/tool_calling)", "[Structured output](/docs/how_to/structured_output/)", "JSON mode", "Local", diff --git a/libs/cli/langchain_cli/integration_template/docs/chat.ipynb b/libs/cli/langchain_cli/integration_template/docs/chat.ipynb index da6d64feb1116..da1f0bd411fe1 100644 --- a/libs/cli/langchain_cli/integration_template/docs/chat.ipynb +++ b/libs/cli/langchain_cli/integration_template/docs/chat.ipynb @@ -35,7 +35,7 @@ "| [Chat__ModuleName__](https://api.python.langchain.com/en/latest/chat_models/__module_name__.chat_models.Chat__ModuleName__.html) | [__package_name__](https://api.python.langchain.com/en/latest/__package_name_short_snake___api_reference.html) | ✅/❌ | beta/❌ | ✅/❌ | ![PyPI - Downloads](https://img.shields.io/pypi/dm/__package_name__?style=flat-square&label=%20) | ![PyPI - Version](https://img.shields.io/pypi/v/__package_name__?style=flat-square&label=%20) |\n", "\n", "### Model features\n", - "| [Tool calling](/docs/how_to/tool_calling/) | [Structured output](/docs/how_to/structured_output/) | JSON mode | [Image input](/docs/how_to/multimodal_inputs/) | Audio input | Video input | [Token-level streaming](/docs/how_to/chat_streaming/) | Native async | [Token usage](/docs/how_to/chat_token_usage_tracking/) | [Logprobs](/docs/how_to/logprobs/) |\n", + "| [Tool calling](/docs/how_to/tool_calling) | [Structured output](/docs/how_to/structured_output/) | JSON mode | [Image input](/docs/how_to/multimodal_inputs/) | Audio input | Video input | [Token-level streaming](/docs/how_to/chat_streaming/) | Native async | [Token usage](/docs/how_to/chat_token_usage_tracking/) | [Logprobs](/docs/how_to/logprobs/) |\n", "| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n", "| ✅/❌ | ✅/❌ | ✅/❌ | ✅/❌ | ✅/❌ | ✅/❌ | ✅/❌ | ✅/❌ | ✅/❌ | ✅/❌ | \n", "\n", diff --git a/libs/cli/langchain_cli/integration_template/integration_template/document_loaders.py b/libs/cli/langchain_cli/integration_template/integration_template/document_loaders.py index ecf044f71e216..62269b8d5d67a 100644 --- a/libs/cli/langchain_cli/integration_template/integration_template/document_loaders.py +++ b/libs/cli/langchain_cli/integration_template/integration_template/document_loaders.py @@ -1,6 +1,7 @@ """__ModuleName__ document loader.""" from typing import Iterator + from langchain_core.document_loaders.base import BaseLoader from langchain_core.documents import Document diff --git a/libs/community/langchain_community/document_loaders/parsers/grobid.py b/libs/community/langchain_community/document_loaders/parsers/grobid.py index f73f91150c2a2..2ffe2998fa37f 100644 --- a/libs/community/langchain_community/document_loaders/parsers/grobid.py +++ b/libs/community/langchain_community/document_loaders/parsers/grobid.py @@ -48,7 +48,11 @@ def process_xml( ) soup = BeautifulSoup(xml_data, "xml") sections = soup.find_all("div") - title = soup.find_all("title")[0].text + titles = soup.find_all("title") + if titles: + title = titles[0].text + else: + title = "No title found" chunks = [] for section in sections: sect = section.find("head") diff --git a/libs/community/langchain_community/utilities/tavily_search.py b/libs/community/langchain_community/utilities/tavily_search.py index 95eb52266ab50..21f97e4f239b7 100644 --- a/libs/community/langchain_community/utilities/tavily_search.py +++ b/libs/community/langchain_community/utilities/tavily_search.py @@ -1,6 +1,7 @@ """Util that calls Tavily Search API. In order to set this up, follow instructions at: +https://docs.tavily.com/docs/tavily-api/introduction """ import json from typing import Dict, List, Optional diff --git a/libs/community/langchain_community/utilities/you.py b/libs/community/langchain_community/utilities/you.py index 6fefecc29398d..98cca92472706 100644 --- a/libs/community/langchain_community/utilities/you.py +++ b/libs/community/langchain_community/utilities/you.py @@ -1,6 +1,7 @@ """Util that calls you.com Search API. In order to set this up, follow instructions at: +https://documentation.you.com/quickstart """ import warnings diff --git a/libs/community/langchain_community/vectorstores/hanavector.py b/libs/community/langchain_community/vectorstores/hanavector.py index 724c3d93b2a45..adf76ee86f2f3 100644 --- a/libs/community/langchain_community/vectorstores/hanavector.py +++ b/libs/community/langchain_community/vectorstores/hanavector.py @@ -125,7 +125,7 @@ def __init__( f'"{self.metadata_column}" NCLOB, ' f'"{self.vector_column}" REAL_VECTOR ' ) - if self.vector_column_length == -1: + if self.vector_column_length in [-1, 0]: sql_str += ");" else: sql_str += f"({self.vector_column_length}));" @@ -186,7 +186,9 @@ def _check_column( # type: ignore[no-untyped-def] f"Column {column_name} has the wrong type: {rows[0][0]}" ) # Check length, if parameter was provided - if column_length is not None: + # Length can either be -1 (QRC01+02-24) or 0 (QRC03-24 onwards) + # to indicate no length constraint being present. + if column_length is not None and column_length > 0: if rows[0][1] != column_length: raise AttributeError( f"Column {column_name} has the wrong length: {rows[0][1]}" diff --git a/libs/community/poetry.lock b/libs/community/poetry.lock index 2042a953316a5..416797799f582 100644 --- a/libs/community/poetry.lock +++ b/libs/community/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "aiohttp" @@ -2117,7 +2117,7 @@ files = [ [[package]] name = "langchain" -version = "0.2.5" +version = "0.2.6" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.8.1,<4.0" @@ -2127,7 +2127,7 @@ develop = true [package.dependencies] aiohttp = "^3.8.3" async-timeout = {version = "^4.0.0", markers = "python_version < \"3.11\""} -langchain-core = "^0.2.7" +langchain-core = "^0.2.10" langchain-text-splitters = "^0.2.0" langsmith = "^0.1.17" numpy = [ @@ -2146,7 +2146,7 @@ url = "../langchain" [[package]] name = "langchain-core" -version = "0.2.7" +version = "0.2.10" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.8.1,<4.0" @@ -2157,7 +2157,10 @@ develop = true jsonpatch = "^1.33" langsmith = "^0.1.75" packaging = ">=23.2,<25" -pydantic = ">=1,<3" +pydantic = [ + {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, + {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, +] PyYAML = ">=5.3" tenacity = "^8.1.0,!=8.4.0" @@ -3072,8 +3075,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -3752,6 +3755,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -3759,8 +3763,16 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -3777,6 +3789,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -3784,6 +3797,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -5690,4 +5704,4 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0" -content-hash = "3a0c017ae448ab4dc979750d440b43837f6c9fcdbaf652c6799ef3beb0fda636" +content-hash = "94839ba308dafe3701a4a25425769a517dceaeb1b17ed6cbf9cf4fb7e73f727e" diff --git a/libs/community/pyproject.toml b/libs/community/pyproject.toml index e160a3339c9ef..b25b7b1f87af1 100644 --- a/libs/community/pyproject.toml +++ b/libs/community/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langchain-community" -version = "0.2.5" +version = "0.2.6" description = "Community contributed LangChain integrations." authors = [] license = "MIT" @@ -9,8 +9,8 @@ repository = "https://github.com/langchain-ai/langchain" [tool.poetry.dependencies] python = ">=3.8.1,<4.0" -langchain-core = "^0.2.7" -langchain = "^0.2.5" +langchain-core = "^0.2.10" +langchain = "^0.2.6" SQLAlchemy = ">=1.4,<3" requests = "^2" PyYAML = ">=5.3" diff --git a/libs/core/langchain_core/language_models/base.py b/libs/core/langchain_core/language_models/base.py index afabc7c9fddc7..52bd626177357 100644 --- a/libs/core/langchain_core/language_models/base.py +++ b/libs/core/langchain_core/language_models/base.py @@ -103,7 +103,7 @@ class BaseLanguageModel( ) """Optional encoder to use for counting tokens.""" - @validator("verbose", pre=True, always=True) + @validator("verbose", pre=True, always=True, allow_reuse=True) def set_verbose(cls, verbose: Optional[bool]) -> bool: """If verbose is None, set it. diff --git a/libs/core/langchain_core/tools.py b/libs/core/langchain_core/tools.py index 86cedd51aa998..cf168e784b2bc 100644 --- a/libs/core/langchain_core/tools.py +++ b/libs/core/langchain_core/tools.py @@ -827,6 +827,8 @@ def add(a: int, b: int) -> int: raise ValueError("Function and/or coroutine must be provided") name = name or source_function.__name__ description_ = description or source_function.__doc__ + if description_ is None and args_schema: + description_ = args_schema.__doc__ if description_ is None: raise ValueError( "Function must have a docstring if description not provided." diff --git a/libs/core/pyproject.toml b/libs/core/pyproject.toml index 31e85e21a01b0..d3ea6c40a8e56 100644 --- a/libs/core/pyproject.toml +++ b/libs/core/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langchain-core" -version = "0.2.9" +version = "0.2.10" description = "Building applications with LLMs through composability" authors = [] license = "MIT" diff --git a/libs/core/tests/unit_tests/test_tools.py b/libs/core/tests/unit_tests/test_tools.py index cc624f4cfd290..5e7b05dbff3b3 100644 --- a/libs/core/tests/unit_tests/test_tools.py +++ b/libs/core/tests/unit_tests/test_tools.py @@ -44,6 +44,8 @@ def search_api(query: str) -> str: class _MockSchema(BaseModel): + """Return the arguments directly.""" + arg1: int arg2: bool arg3: Optional[dict] = None @@ -133,7 +135,6 @@ def test_decorator_with_specified_schema() -> None: @tool(args_schema=_MockSchema) def tool_func(arg1: int, arg2: bool, arg3: Optional[dict] = None) -> str: - """Return the arguments directly.""" return f"{arg1} {arg2} {arg3}" assert isinstance(tool_func, BaseTool) diff --git a/libs/experimental/poetry.lock b/libs/experimental/poetry.lock index 55226260bab6d..2e5b917567bd8 100644 --- a/libs/experimental/poetry.lock +++ b/libs/experimental/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiohttp" @@ -1461,7 +1461,7 @@ files = [ [[package]] name = "langchain" -version = "0.2.5" +version = "0.2.6" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.8.1,<4.0" @@ -1471,7 +1471,7 @@ develop = true [package.dependencies] aiohttp = "^3.8.3" async-timeout = {version = "^4.0.0", markers = "python_version < \"3.11\""} -langchain-core = "^0.2.7" +langchain-core = "^0.2.10" langchain-text-splitters = "^0.2.0" langsmith = "^0.1.17" numpy = [ @@ -1482,7 +1482,7 @@ pydantic = ">=1,<3" PyYAML = ">=5.3" requests = "^2" SQLAlchemy = ">=1.4,<3" -tenacity = "^8.1.0" +tenacity = "^8.1.0,!=8.4.0" [package.source] type = "directory" @@ -1490,7 +1490,7 @@ url = "../langchain" [[package]] name = "langchain-community" -version = "0.2.5" +version = "0.2.6" description = "Community contributed LangChain integrations." optional = false python-versions = ">=3.8.1,<4.0" @@ -1500,8 +1500,8 @@ develop = true [package.dependencies] aiohttp = "^3.8.3" dataclasses-json = ">= 0.5.7, < 0.7" -langchain = "^0.2.5" -langchain-core = "^0.2.7" +langchain = "^0.2.6" +langchain-core = "^0.2.10" langsmith = "^0.1.0" numpy = [ {version = ">=1,<2", markers = "python_version < \"3.12\""}, @@ -1510,7 +1510,7 @@ numpy = [ PyYAML = ">=5.3" requests = "^2" SQLAlchemy = ">=1.4,<3" -tenacity = "^8.1.0" +tenacity = "^8.1.0,!=8.4.0" [package.source] type = "directory" @@ -1518,7 +1518,7 @@ url = "../community" [[package]] name = "langchain-core" -version = "0.2.7" +version = "0.2.10" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.8.1,<4.0" @@ -1529,9 +1529,12 @@ develop = true jsonpatch = "^1.33" langsmith = "^0.1.75" packaging = ">=23.2,<25" -pydantic = ">=1,<3" +pydantic = [ + {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, + {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, +] PyYAML = ">=5.3" -tenacity = "^8.1.0" +tenacity = "^8.1.0,!=8.4.0" [package.source] type = "directory" @@ -1539,7 +1542,7 @@ url = "../core" [[package]] name = "langchain-openai" -version = "0.1.8" +version = "0.1.10" description = "An integration package connecting OpenAI and LangChain" optional = false python-versions = ">=3.8.1,<4.0" @@ -3703,4 +3706,4 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0" -content-hash = "ef427f77e729dd50afdcf2599be9401cbc35ddf1c2221ff2e333c29a09481543" +content-hash = "d1eb55e31ab49548767b78f52c55219b7f9ca20c86650d5d5c599c187ccbc078" diff --git a/libs/experimental/pyproject.toml b/libs/experimental/pyproject.toml index 690e2421dc066..ceb0ecde1acf9 100644 --- a/libs/experimental/pyproject.toml +++ b/libs/experimental/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langchain-experimental" -version = "0.0.61" +version = "0.0.62" description = "Building applications with LLMs through composability" authors = [] license = "MIT" @@ -10,8 +10,8 @@ repository = "https://github.com/langchain-ai/langchain" [tool.poetry.dependencies] python = ">=3.8.1,<4.0" -langchain-core = "^0.2.7" -langchain-community = "^0.2.5" +langchain-core = "^0.2.10" +langchain-community = "^0.2.6" [tool.poetry.group.lint] optional = true diff --git a/libs/langchain/langchain/memory/__init__.py b/libs/langchain/langchain/memory/__init__.py index e59cbf1cef918..296b1f7d28391 100644 --- a/libs/langchain/langchain/memory/__init__.py +++ b/libs/langchain/langchain/memory/__init__.py @@ -48,6 +48,9 @@ from langchain.memory.summary_buffer import ConversationSummaryBufferMemory from langchain.memory.token_buffer import ConversationTokenBufferMemory from langchain.memory.vectorstore import VectorStoreRetrieverMemory +from langchain.memory.vectorstore_token_buffer_memory import ( + ConversationVectorStoreTokenBufferMemory, # avoid circular import +) if TYPE_CHECKING: from langchain_community.chat_message_histories import ( @@ -122,6 +125,7 @@ def __getattr__(name: str) -> Any: "ConversationSummaryBufferMemory", "ConversationSummaryMemory", "ConversationTokenBufferMemory", + "ConversationVectorStoreTokenBufferMemory", "CosmosDBChatMessageHistory", "DynamoDBChatMessageHistory", "ElasticsearchChatMessageHistory", diff --git a/libs/langchain/langchain/memory/vectorstore_token_buffer_memory.py b/libs/langchain/langchain/memory/vectorstore_token_buffer_memory.py new file mode 100644 index 0000000000000..0995bb3e34a67 --- /dev/null +++ b/libs/langchain/langchain/memory/vectorstore_token_buffer_memory.py @@ -0,0 +1,184 @@ +""" +Class for a conversation memory buffer with older messages stored in a vectorstore . + +This implementats a conversation memory in which the messages are stored in a memory +buffer up to a specified token limit. When the limit is exceeded, older messages are +saved to a vectorstore backing database. The vectorstore can be made persistent across +sessions. +""" + +import warnings +from datetime import datetime +from typing import Any, Dict, List + +from langchain_core.messages import BaseMessage +from langchain_core.prompts.chat import SystemMessagePromptTemplate +from langchain_core.pydantic_v1 import Field, PrivateAttr +from langchain_core.vectorstores import VectorStoreRetriever + +from langchain.memory import ConversationTokenBufferMemory, VectorStoreRetrieverMemory +from langchain.memory.chat_memory import BaseChatMemory +from langchain.text_splitter import RecursiveCharacterTextSplitter + +DEFAULT_HISTORY_TEMPLATE = """ +Current date and time: {current_time}. + +Potentially relevant timestamped excerpts of previous conversations (you +do not need to use these if irrelevant): +{previous_history} + +""" + +TIMESTAMP_FORMAT = "%Y-%m-%d %H:%M:%S %Z" + + +class ConversationVectorStoreTokenBufferMemory(ConversationTokenBufferMemory): + """Conversation chat memory with token limit and vectordb backing. + + load_memory_variables() will return a dict with the key "history". + It contains background information retrieved from the vector store + plus recent lines of the current conversation. + + To help the LLM understand the part of the conversation stored in the + vectorstore, each interaction is timestamped and the current date and + time is also provided in the history. A side effect of this is that the + LLM will have access to the current date and time. + + Initialization arguments: + + This class accepts all the initialization arguments of + ConversationTokenBufferMemory, such as `llm`. In addition, it + accepts the following additional arguments + + retriever: (required) A VectorStoreRetriever object to use + as the vector backing store + + split_chunk_size: (optional, 1000) Token chunk split size + for long messages generated by the AI + + previous_history_template: (optional) Template used to format + the contents of the prompt history + + + Example using ChromaDB: + + .. code-block:: python + + from langchain.memory.token_buffer_vectorstore_memory import ( + ConversationVectorStoreTokenBufferMemory + ) + from langchain_community.vectorstores import Chroma + from langchain_community.embeddings import HuggingFaceInstructEmbeddings + from langchain_openai import OpenAI + + embedder = HuggingFaceInstructEmbeddings( + query_instruction="Represent the query for retrieval: " + ) + chroma = Chroma(collection_name="demo", + embedding_function=embedder, + collection_metadata={"hnsw:space": "cosine"}, + ) + + retriever = chroma.as_retriever( + search_type="similarity_score_threshold", + search_kwargs={ + 'k': 5, + 'score_threshold': 0.75, + }, + ) + + conversation_memory = ConversationVectorStoreTokenBufferMemory( + return_messages=True, + llm=OpenAI(), + retriever=retriever, + max_token_limit = 1000, + ) + + conversation_memory.save_context({"Human": "Hi there"}, + {"AI": "Nice to meet you!"} + ) + conversation_memory.save_context({"Human": "Nice day isn't it?"}, + {"AI": "I love Wednesdays."} + ) + conversation_memory.load_memory_variables({"input": "What time is it?"}) + + """ + + retriever: VectorStoreRetriever = Field(exclude=True) + memory_key: str = "history" + previous_history_template: str = DEFAULT_HISTORY_TEMPLATE + split_chunk_size: int = 1000 + + _memory_retriever: VectorStoreRetrieverMemory = PrivateAttr(default=None) + _timestamps: List[datetime] = PrivateAttr(default_factory=list) + + @property + def memory_retriever(self) -> VectorStoreRetrieverMemory: + """Return a memory retriever from the passed retriever object.""" + if self._memory_retriever is not None: + return self._memory_retriever + self._memory_retriever = VectorStoreRetrieverMemory(retriever=self.retriever) + return self._memory_retriever + + def load_memory_variables(self, inputs: Dict[str, Any]) -> Dict[str, Any]: + """Return history and memory buffer.""" + try: + with warnings.catch_warnings(): + warnings.simplefilter("ignore") + memory_variables = self.memory_retriever.load_memory_variables(inputs) + previous_history = memory_variables[self.memory_retriever.memory_key] + except AssertionError: # happens when db is empty + previous_history = "" + current_history = super().load_memory_variables(inputs) + template = SystemMessagePromptTemplate.from_template( + self.previous_history_template + ) + messages = [ + template.format( + previous_history=previous_history, + current_time=datetime.now().astimezone().strftime(TIMESTAMP_FORMAT), + ) + ] + messages.extend(current_history[self.memory_key]) + return {self.memory_key: messages} + + def save_context(self, inputs: Dict[str, Any], outputs: Dict[str, str]) -> None: + """Save context from this conversation to buffer. Pruned.""" + BaseChatMemory.save_context(self, inputs, outputs) + self._timestamps.append(datetime.now().astimezone()) + # Prune buffer if it exceeds max token limit + buffer = self.chat_memory.messages + curr_buffer_length = self.llm.get_num_tokens_from_messages(buffer) + if curr_buffer_length > self.max_token_limit: + while curr_buffer_length > self.max_token_limit: + self._pop_and_store_interaction(buffer) + curr_buffer_length = self.llm.get_num_tokens_from_messages(buffer) + + def save_remainder(self) -> None: + """ + Save the remainder of the conversation buffer to the vector store. + + This is useful if you have made the vectorstore persistent, in which + case this can be called before the end of the session to store the + remainder of the conversation. + """ + buffer = self.chat_memory.messages + while len(buffer) > 0: + self._pop_and_store_interaction(buffer) + + def _pop_and_store_interaction(self, buffer: List[BaseMessage]) -> None: + input = buffer.pop(0) + output = buffer.pop(0) + timestamp = self._timestamps.pop(0).strftime(TIMESTAMP_FORMAT) + # Split AI output into smaller chunks to avoid creating documents + # that will overflow the context window + ai_chunks = self._split_long_ai_text(str(output.content)) + for index, chunk in enumerate(ai_chunks): + self.memory_retriever.save_context( + {"Human": f"<{timestamp}/00> {str(input.content)}"}, + {"AI": f"<{timestamp}/{index:02}> {chunk}"}, + ) + + def _split_long_ai_text(self, text: str) -> List[str]: + splitter = RecursiveCharacterTextSplitter(chunk_size=self.split_chunk_size) + return [chunk.page_content for chunk in splitter.create_documents([text])] diff --git a/libs/langchain/poetry.lock b/libs/langchain/poetry.lock index 0ec9cca73ee76..a1cbe3b9c3584 100644 --- a/libs/langchain/poetry.lock +++ b/libs/langchain/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiohttp" @@ -1760,7 +1760,7 @@ files = [ [[package]] name = "langchain-core" -version = "0.2.7" +version = "0.2.10" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.8.1,<4.0" @@ -1771,7 +1771,10 @@ develop = true jsonpatch = "^1.33" langsmith = "^0.1.75" packaging = ">=23.2,<25" -pydantic = ">=1,<3" +pydantic = [ + {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, + {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, +] PyYAML = ">=5.3" tenacity = "^8.1.0,!=8.4.0" @@ -1781,7 +1784,7 @@ url = "../core" [[package]] name = "langchain-openai" -version = "0.1.8" +version = "0.1.10" description = "An integration package connecting OpenAI and LangChain" optional = true python-versions = ">=3.8.1,<4.0" @@ -2479,8 +2482,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -3108,6 +3111,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -3115,8 +3119,16 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -3133,6 +3145,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -3140,6 +3153,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -4074,20 +4088,6 @@ files = [ cryptography = ">=35.0.0" types-pyOpenSSL = "*" -[[package]] -name = "types-requests" -version = "2.31.0.6" -description = "Typing stubs for requests" -optional = false -python-versions = ">=3.7" -files = [ - {file = "types-requests-2.31.0.6.tar.gz", hash = "sha256:cd74ce3b53c461f1228a9b783929ac73a666658f223e28ed29753771477b3bd0"}, - {file = "types_requests-2.31.0.6-py3-none-any.whl", hash = "sha256:a2db9cb228a81da8348b49ad6db3f5519452dd20a9c1e1a868c83c5fe88fd1a9"}, -] - -[package.dependencies] -types-urllib3 = "*" - [[package]] name = "types-requests" version = "2.32.0.20240602" @@ -4124,17 +4124,6 @@ files = [ {file = "types_toml-0.10.8.20240310-py3-none-any.whl", hash = "sha256:627b47775d25fa29977d9c70dc0cbab3f314f32c8d8d0c012f2ef5de7aaec05d"}, ] -[[package]] -name = "types-urllib3" -version = "1.26.25.14" -description = "Typing stubs for urllib3" -optional = false -python-versions = "*" -files = [ - {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, - {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, -] - [[package]] name = "typing-extensions" version = "4.12.2" @@ -4171,22 +4160,6 @@ files = [ [package.extras] dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] -[[package]] -name = "urllib3" -version = "1.26.18" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -files = [ - {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, - {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, -] - -[package.extras] -brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - [[package]] name = "urllib3" version = "2.2.1" @@ -4204,6 +4177,23 @@ h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] +[[package]] +name = "vcrpy" +version = "4.3.0" +description = "Automatically mock your HTTP interactions to simplify and speed up testing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "vcrpy-4.3.0-py2.py3-none-any.whl", hash = "sha256:8fbd4be412e8a7f35f623dd61034e6380a1c8dbd0edf6e87277a3289f6e98093"}, + {file = "vcrpy-4.3.0.tar.gz", hash = "sha256:49c270ce67e826dba027d83e20d25b67a5885487697e97bca6dbdf53d750a0ac"}, +] + +[package.dependencies] +PyYAML = "*" +six = ">=1.5" +wrapt = "*" +yarl = "*" + [[package]] name = "vcrpy" version = "6.0.1" @@ -4216,7 +4206,6 @@ files = [ [package.dependencies] PyYAML = "*" -urllib3 = {version = "<2", markers = "platform_python_implementation == \"PyPy\" or python_version < \"3.10\""} wrapt = "*" yarl = "*" @@ -4531,4 +4520,4 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0" -content-hash = "75555653fb4c680e41f2154764b3d3ebc0564bbc13a6fd7a0e836a49145dad55" +content-hash = "4bfc2239c08da44f025dc81aa51fab1283efc35794539b8e76dfbb4b87c3d532" diff --git a/libs/langchain/pyproject.toml b/libs/langchain/pyproject.toml index a356de72b6a9f..d4c088c51ed80 100644 --- a/libs/langchain/pyproject.toml +++ b/libs/langchain/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langchain" -version = "0.2.5" +version = "0.2.6" description = "Building applications with LLMs through composability" authors = [] license = "MIT" @@ -12,7 +12,7 @@ langchain-server = "langchain.server:main" [tool.poetry.dependencies] python = ">=3.8.1,<4.0" -langchain-core = "^0.2.7" +langchain-core = "^0.2.10" langchain-text-splitters = "^0.2.0" langsmith = "^0.1.17" pydantic = ">=1,<3" diff --git a/libs/langchain/tests/unit_tests/memory/test_imports.py b/libs/langchain/tests/unit_tests/memory/test_imports.py index a42684a46e045..bba351d8ad0f8 100644 --- a/libs/langchain/tests/unit_tests/memory/test_imports.py +++ b/libs/langchain/tests/unit_tests/memory/test_imports.py @@ -13,6 +13,7 @@ "ConversationSummaryBufferMemory", "ConversationSummaryMemory", "ConversationTokenBufferMemory", + "ConversationVectorStoreTokenBufferMemory", "CosmosDBChatMessageHistory", "DynamoDBChatMessageHistory", "ElasticsearchChatMessageHistory", diff --git a/libs/partners/openai/langchain_openai/chat_models/base.py b/libs/partners/openai/langchain_openai/chat_models/base.py index 5631eb1190dbc..1c50e80b902bc 100644 --- a/libs/partners/openai/langchain_openai/chat_models/base.py +++ b/libs/partners/openai/langchain_openai/chat_models/base.py @@ -346,6 +346,9 @@ class BaseChatOpenAI(BaseChatModel): http_client as well if you'd like a custom client for sync invocations.""" stop: Optional[Union[List[str], str]] = Field(default=None, alias="stop_sequences") """Default stop sequences.""" + extra_body: Optional[Mapping[str, Any]] = None + """Optional additional JSON properties to include in the request parameters when + making requests to OpenAI compatible APIs, such as vLLM.""" class Config: """Configuration for this pydantic object.""" @@ -445,6 +448,9 @@ def _default_params(self) -> Dict[str, Any]: params["max_tokens"] = self.max_tokens if self.stop: params["stop"] = self.stop + if self.extra_body is not None: + params["extra_body"] = self.extra_body + return params def _combine_llm_outputs(self, llm_outputs: List[Optional[dict]]) -> dict: @@ -1136,7 +1142,7 @@ class AnswerWithJustification(BaseModel): "schema must be specified when method is 'function_calling'. " "Received None." ) - llm = self.bind_tools([schema], tool_choice="any") + llm = self.bind_tools([schema], tool_choice=True, parallel_tool_calls=False) if is_pydantic_schema: output_parser: OutputParserLike = PydanticToolsParser( tools=[schema], first_tool_only=True diff --git a/libs/partners/openai/langchain_openai/llms/base.py b/libs/partners/openai/langchain_openai/llms/base.py index 006e6e9422ec5..ca3ff4eafae7e 100644 --- a/libs/partners/openai/langchain_openai/llms/base.py +++ b/libs/partners/openai/langchain_openai/llms/base.py @@ -137,6 +137,9 @@ class BaseOpenAI(BaseLLM): http_async_client: Union[Any, None] = None """Optional httpx.AsyncClient. Only used for async invocations. Must specify http_client as well if you'd like a custom client for sync invocations.""" + extra_body: Optional[Mapping[str, Any]] = None + """Optional additional JSON properties to include in the request parameters when + making requests to OpenAI compatible APIs, such as vLLM.""" class Config: """Configuration for this pydantic object.""" @@ -222,6 +225,9 @@ def _default_params(self) -> Dict[str, Any]: if self.max_tokens is not None: normal_params["max_tokens"] = self.max_tokens + if self.extra_body is not None: + normal_params["extra_body"] = self.extra_body + # Azure gpt-35-turbo doesn't support best_of # don't specify best_of if it is 1 if self.best_of > 1: diff --git a/libs/text-splitters/poetry.lock b/libs/text-splitters/poetry.lock index 28466ab9f322c..57072f550884e 100644 --- a/libs/text-splitters/poetry.lock +++ b/libs/text-splitters/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "annotated-types" @@ -1333,7 +1333,7 @@ files = [ [[package]] name = "langchain-core" -version = "0.2.9" +version = "0.2.10" description = "Building applications with LLMs through composability" optional = false python-versions = ">=3.8.1,<4.0" @@ -3936,4 +3936,4 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", [metadata] lock-version = "2.0" python-versions = ">=3.8.1,<4.0" -content-hash = "a4716804419d2239da1969c75825c039dbb6d01cdbb7904ed5fff1f0fc824d55" +content-hash = "009950e0322f64775e8525edc5ed36f35c3144eff9892446f0d69c1309e14293" diff --git a/libs/text-splitters/pyproject.toml b/libs/text-splitters/pyproject.toml index 6a0c1f146a9ed..57c83f09cad14 100644 --- a/libs/text-splitters/pyproject.toml +++ b/libs/text-splitters/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "langchain-text-splitters" -version = "0.2.1" +version = "0.2.2" description = "LangChain text splitting utilities" authors = [] license = "MIT" @@ -10,7 +10,7 @@ repository = "https://github.com/langchain-ai/langchain" [tool.poetry.dependencies] python = ">=3.8.1,<4.0" -langchain-core = "^0.2.0" +langchain-core = "^0.2.10" [tool.poetry.group.lint] optional = true