Metadata-Version: 2.4
Name: agentvis
Version: 0.1.6
Summary: Framework-agnostic reasoning trace visualization tool for AI agents.
Author: Nitesh Kumar
License: Apache License 2.0
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: bm25s==0.3.0
Requires-Dist: pydantic>=2.0.0
Provides-Extra: langchain
Requires-Dist: langchain>=0.1.0; extra == "langchain"

# agentvis

<p align="center">
  <picture align="center">
    <img align="center" alt="agentvis logo" src="https://raw.githubusercontent.com/kumarniteshpersonal-beep/agentvis/968caea6e04577583d7d16f7015b9925362d5f53/packages/ui/public/agentvis_logo.svg" width="560">
  </picture>
</p>


*agentvis* visualizes an agent’s reasoning trace, giving you clear insight into *why* the agent chose a particular path or triggered a specific tool call.  

By exposing the influence flow behind each decision, it transforms opaque agent behavior into something understandable and actionable — so you can confidently refine and improve your prompts, which is often the hardest part of building reliable agents. 🧠✨

## *agentvis* reasoning visualization example - [link](https://agentvis.vercel.app/?view=eJztfetuG0mW5qsk1IO2JDBlkSIl0n8WKqtqSrNll9dydQ_QLhjBzKCY7WQmO5MpmS4UMK-xwC4wzzKPMk-y5xLXvJG6VPf0bP-psshkZFxOnOt3zvnlYFGIlSwPXv3pl4Msj9W_kvjg1cF4dDqT41kUTibDYTiO5_NwNjuFP0-np7PJxXgopsODwcFmu5bw9PfVSmRvZFmKWwmfxmIjDl79chDl2UZmG3jgfik2gShksFnKYCWSLIjy1TrP4NsyqEoZB5scPv8s4fPqdhmU26JaByKLg9vkDn4hg1huRJLCgyIr72URLPIikCJa2oEOfv31518HjZWk0aeiysLwdDiLolhG4Xgmp-HFIhqF0_lsEg7jeDwdn8-GE3kanto1XV73LAgGV48VUpR5lmS38Jj996uD4-MruUjwj-A1LemGlnSd3RYyTnDdx8cfs4_Z9YtVEFVFAZ-kW1hVRLuRZ7RTziblC3drTmCgZJOINCilKKKlLGl3qyyWxb3YDmjrcOi8uBVZ8hWngQMmGezbSmwSeAHuYJSKItlsYbgXaRpkkg-C95q3NzETPgk-wAiZ_LIJyo1cB_cJ_GQu8QfrQq716cov61Rk9IryBFf4MTvAY9m5X9cxvCRZbHGuHZuFE8DRg6SEhcOMvkuKcjOglVYl_lCoDaHVGWKziyhpFdnA0lMh1S9oPYs8TfN73H9c_QAXJ7OygrWJ4DbPY3d5vCG3OZwCzAfevM3gjWVCh4XvhvOP4dWlmQycbWH25Od2ep2PZ7Oz0XAczicCiFWIcTg7ncJ_FuJsvBhFo-no3FLphzxP-y7eT2v4jE41zoM0KTe4oj_98kI98eJV8OLGblj9ZvpE92IQvCg3YlOV-LMk-7QuctjXsnzx6yDwhnyv91RRUvOy-mOtJW1UY5wbtaNffcpF4ob3wkhxxzg_4w7B1nzKgMEh_wEql59wE0r9jShuS9wr_hC3n8eBp52lwdN2M_feKSJ4M5yalTfU7h2iMZx379wKGL_xSiSy_bjiZBafhRez2TCcyskolMOzxdlUTM7OJ-JZueK3X8RqT7aYwUUkhohPK47o3GTcqlWeEdcExhfQgVjhgXtUpYoPEYco5F0i7zUrhJkmEVxdEW1QxNC-wzAlbWmSuR_TEQNPTVb045z5LGw2PAlDJUVQ5KnEtwRiFSQOH8MXrYtkJYotXn6iEzrmsprj7yNcEfOp5MsuznAmp4uLYSzC89NIhmN5ehbOR9MYeMR0MV-cx1EUDffnDL98PPhLJYvtx4NXwceDfnr-eDCAZ5g3fqrWn-CHJW0s_jir0hS_ZsHsfgLrvpX0zJ9-xr-BUKt0wx_A66si5ZcvN5t1-erly_v7-5MinydAw3DmJzCdlzSJMMrTOIxgYrJ4GRfbkD9dASFESSZDhyhe8lQ3ySaVPPgfUfW4VMLpkk_VITfcf4cS_0cQBu_NFHgwtWc8nP0y-B72ahu8TW5h_gmoKDzM1ZsTZ4TgJl9sgtdLeR_8kANB4AQ07XvPvV4maQxawH_-2_8u1cg83u_x18C3X8PPedfrr_B-Wp8OvjVUb8Xf_XEpYSOKYJtXRt7fyk1QJDEeughgf9XRA0sSaQqXBiQIirckq8pgKUUMBCwH7gyAW8ZVBJsJ_7gD-g_WOZDCokrhzqWJXJzAZPCuehc08Q4hSqsYtbwvmyJfwRTzYr0UzN9uK5EsZAbMD-T2vNrgSW6DDfCVTRAni4VE5QkGXa03-aqkJYLI3yA5w42D9dEk7nAHYNUFT2Kw812sr97nwWd4mz9ZtQ5NgDAhmAocNLz3Pi8-wztveZdRfRCldN7rzPPqX9-g4tCipeAr8jtZhPAdEjsSfnD444fXR2oQs-FlBcxElP_x785pDEdAQFUBDMueg701fCJm7j4l0eC4Dw2aM2_E24Czneeb5e49hA3gg6LHnTOSwVLcyf_49yTb0MhAiaWEJQtUQ-897g0sushL4Emwh_MC37DOiw1woyQvB3y-K9gtoFf48btvXaVNzToQdyBkxTxJQdllxRfGrVbAxO0MmZPrKQYCKV1rcqPT0fgl_GcSICsaaBJapBXqm6USxKQJ8wXANcC08DhZouCCSndmMl-nvAlBvlbaMrGbMsoL4l2nJxcX43OwTIh3ivtPDiNCFovaUgcXFQu0PTZbWEO6WQInPfkqXq7ychNKuC_EBEOWcC7zhH8rIqEb2uSlb2CE4Fs9Qhs3vfa4KTDTSzWT4HuaSgtHfe3yBLQGK-A6cEqgjgNR3CdEZhFTomBBnIkU_koi3lr4MFmCaouKBUrh74EhsEY-L5DU53C8n-P8PuPTzOE-Kunu3mocicxU4i5491Hfbx7JeHwxnp0__Ej4KFK8cijY-M-XwOjDDFm2u_GNff8ReAwxdndzXwV0HFcCdqbIq9I7h98DF9y2bPZ__tv_aR3sP__t_wb3AvgJkLdWSVLk-8Pp6WnJ9iSxVLr8aIanUb7MQcxHIsvgZsEz0TLNixwJnZ9fIU_A9TY28Xw8m55Ph2cP38U_r2W8jE7ArH0pik0SpfLlzekUtNbJaDw5PL04Oj0dn1-Ew5fA9NINcKfGXr5bClCe4Rrnt1skCIfn4drfKL5YtlKqUjgVO4H7CzxZsWQcAZkDc1bFuTSzlAmJA9Rk4efAf1jbmieZUuM9Eh9oUVGt12iE0EcelQ_QDoVbCCyPv2sS6tnp5Gw0nk4evse8gBRYWAnGkdgSvardLl8Oz4fTYWNXX3fuwSvNJpzLNkDtWyLJiErpkY3NvjSX_BXa2aU0SoKIJO1CvkZBr5RwsBaysAQ5mScxavWwW8DOFqlYgaWUg04TFxVY4odvby6vr8ojkJnrpECFIplXwLQX6BPAoTIBf32Bccs8TqpVk3ZHp7PJ9Gx00bWvWtMFTboEkxM0Mf7ddMxfkO78KYl5lUMxPR_L4TyU8P9wPB4Nw_lYTsLp6ZmYXQzH8Wg-_3jwa82cTVAhyOTmExuRdZOW9Hp4bJeRuqdpeB4P0TQcn4azxXASLuKpOBvNYnk2O_uNTEOXk71OgWGnW2UWooHVZhdaPTBKRaksrRYu32UztlEuWo3w87m8rTJWM4zN7ms9A19F7ZRWg1ZxdR3gcbL6gCPifGCCknZDsrnIakgpH-RQ-wFe4u9m8BpY-m0OUlGZ2W-2jkMvIf0kQmVIEkdSHjJyGylFqLml6AWDX9JD6oayThuZd2mtKA7mW_pK7aOyB9k6Nyeasf8NOF-U4MnDRJQjteaQfFGS3U0qQv9B7jCsxQWYz3Cvw4vzaAHm9FiEYjidhfMh2Ntn50MphPiv4HLDx1IJY-_lcKtT6dPcdw6FP20g73bUnDZPG9m_WM88tNE4Hzvs38iXaWjmCZ7Mfrdlnc5cP6TrSfV8ol0u1h2k9_hB-sju8aP2ktxThu0gt92O5T38xPs7hS_m8jS8GM_PQlDWF2E8mg1np4vx5PRi-ps5hRUhBt9VWUTcuy1OJrNbeB3JbxRUILxiFkvAajHoAtIGrEiHrJUsTyhqtnGcDUaogyGeVXyGa1Gg4wuMG5I4TlBOBCWo3ckiiezY5G-YVwnIHEGfFhL00hLnY_3EpKosGt5iIJ8oWaO8JfFuXpVkd-h3uVVmBIWmKFa32KoxFmp7BLk0SK9Yr9OGxNtHT3id50VMlghM0pDj5a31xoOawGG37C5PYWaw5es0Jw_3AtdpN_GWN_tbYQNqsKLurbM-dfglHMhGupE59PNwxM540XW4DX8hyKhCisMXeDsyAPkfATNKyhWqXc7WsBK2zpE6KYCK7hr2ipRgFZR5xARCjgc_JLNLjzgfDRez8_NJOB5N5uF4BnrE7PRsFJ5PzqLxdHwxHc8X--sRv7Nn8Z524lVwVXe3HV7965sjnNPvfhd8-0VGFWlnN9UK9wo_b_8Fe0fuYeXplsPvHd5Gq0SpA0jw8q3w8NEHUBLF10zV4BDJmjyKd_IIyHzjhkeB4Im95bcsaWKJSu68Qlog30sh1rLCp0CUoYmYiugzK5SGKzK5xzA1Wi6w1bUE8xT1Tg7qoIleO8l8nYBlqLyu6KQtURkV7BjX4XbYeHZAFnfoUCm3oBevSPUXoIqqkDwud7OExS5BzURvMxCrol58cSkWoJKiZUobC3sUJ6DKwkQG5EGBMwCrF0a7g92ktzgEqB0tZbBKSnwIhAEeDe4F_TRFpyRMiNiXDNiLRN5MNCyzSPLVD8NQUcUQoQLsYsVjbKUJjFjDISgVH92Eyk5qs6CAP3Y5PdieoZg8XjlQ-q3K_93VJf50CMYz7cMSNgYY2i1SIFx0OGUZG3IQfODEOUXBJpMiqCCuCHKAe2R8mfBeFbdbqbfiKQBfRMsejwdIC84A1gQSE74l0tKUaSzBDB3CeCKu83mgjBokExLBSJL5V4m6BPov1mDCSHVusK80PvrYye0PR7hGUUDjcHyg5vhh2iQ-5m5ymnyWTTvS1TUUG0PljcMbIGhO1JmPToz05DuqHH32jhowheKq7r3TfBTpoeHfZ84LtwIYEnMD9XZ4C3pglMMdD-owLrYqXnESXNa_ZfpRlEfxkziHC5zlG-W0B0KsSHQUwXqZyluwEGEm7JisslsbPzk-hh8dH1tqYLgFmrGMCGm89dC8k_4ug2rNLzsa4H5pXkZHTvEV9Tu8gPDNHaonxAvglAsl2UWCwBs4lvtlEi2Z42Uywu2G_V0vt0AFwPQo5AwTwi-AlOnXETAvPkf0SbG3CnQ3GVlRDod6dhK80SINX3jZfZ_lFxixpCvi3hzeIORdvPf4tTrpXv53-PrtzZGaBs5jGLxTZHPpjG4mx5RFbhjFqomjlMlthtIfJYSRzXRUCfllyPvtSBE124TXwTy0Nt_jY3UuFBk2kXQZV2kKKsE8hesDYhVoQ7G2OfDxDNfExCNY5AcYt7oFfQjZFk10JcJhcPhPHz_Svz8N_-kI2Ydcw9Ewn1kJkB1pmav4Dd3fFVBZyqen1QmaEaygkLcKL5SYPTfkCnfo-JgEDHM9I1sMbIhXWchFKr8cH6NqIzIFdoKDR_c__CMBlgVnRm_7SwXbxQ6lIrnF74W-iNfORTNxL1ZUU1LoWDipDVP3RZ7cngAjLMDyJLaFTFG5VuGvIwrKlsB7iR3g3eWVVMDeyaVEr7YENAp-pB1zXPF0L5iky48Zy1QSg3yYxVZvG6wP47Ecw3M1D5pWG78CBuC_J90GbBV_gTNLQWlSPiR4EvZwk4QblEsbLTxwz0p1xi4R84TMjceI0SovUBlO5R0-oKSUL9-t4kmG3hw2m1k5v8BlxBXpP8qn9gq37zgIgFbevgFZ-l7RI95BJt7VKyB0ImulQijhDbsh5jkoxVLvj3JaCrxQJTFm3A9Qzeh5oQfEIZg83oa4pds0vApFCdbRBvX0Q5yHvRiKulVAuxQr6Vxz5YxleRQnSjfjt4GAI7VQSb3P7NyXtIx3r9-B7GjVC-liWSaB9uNKpAwQgGkvEwzQ4v6S0sC_Ab0DFSiWYeg1LqrbF40JxXCr07QCdSYHtQ7eqA7vRB_ADagJG7Sf6OG3cOhrmPB6WeC038tqvUEk63W2TOYJLtocjOY3wb0Un0GHU8OEmT9EoYdIeAg45cObt--vj-weGyJDKrI0hQsid3JhqHNNkRvgTHC_adFFUn7GAzGvR808xlvDaiurJ0ZvZrrnZ2VxiwfAkRRmCjc376_hLW8uf7wuj-wOKR5qqdSS6Ddym6uYjcu-B4HDb112W0iloinBlTMCJACp5HNUIj18YsNMB4RZAtRg1EW7TZmswGaAJSmFQbvlwazV4scaFai8uCpbm1qEAwDTzZIYz-9Q8EGQiqHOUOE81F3kK6FNMdCNQ6Mva6ZPzHmFqgY8uS5lFefzKp0LYBpM9Iegp-Ea85RDkamApZM2AqyxQF6uhXYwNgCcn0qFR_jO0XG7jAKRkuSWX4ADlSypyKbRU1RYCYG3UsFKcHMKsL6XYLWRNGEFq2aNGWb2gUHODA1KY_7wu7QKDlHAgEHzVRzxhzeIPoLbVPKfLECA9cN_Xb1pg4TvaE_6NUWOAHRY9xwEZrREIrDijPxLbKWawC55lu4EqgRFIShSjGaPhsGYDWVACrpm4UqwJGBFX4d-SUvtVPrpLh0ZJo-TdeBnNPkrmcJGB4efM4QwaIVpOAqXCIhp2ByO8aK27g8JWtBXYvu_qiR9-Zb-x9-8QSYHYvDqTXDoX3svoEUqpQk3q1Ff5wVYfDHi4L55x7sXFTCekmwewKYgqxXO-uPBFV6M75ATfjwAkp3LFLU5d2ubAMsuuIaC0hjABuo0Hw_ivIIDDIHlw_PwkpzPAC1p2nLH1038DjgtUiqJfoTk1ANHcH8mJ8E7wzxuUJ4zCIZuzh_VIBiLZs7kmpotkqtNSbH-g3uZpuEG9BJ0hsUnwff5PRp3A99RhaZIHkVVYdSqCejliibdGQaHH5wZXOEMjkhDRxRMIR2PyYo8mBm6RtNFmCarBO0nc1Wvivy-RMtT3amr5OtX58-3qDYK-v1dzj9VFxc5BNwKMlXRmy9QaUUZhdFJlFlJCdsFNLNRI7H1QTZ9Trd7AxZ2ya_Sax0FP-D3asHw2HtcjH809PbPaFiJktCMySZamnm9zrNFVarbz4OeBTfsVvE2EJf0o_LBwM4xtdBRuuogbCCqHKTCicwjgUM0QZGEwablSww6wMeDIp_nIKHWa0WmBeIMPiebTUofkGRASpErCoIamA_5XBxXEFoBqI8BhwLi91UZQcpVmQh4gVUylfNIQ90c1RJkql43imq1HeLW6P1r0OeigVGQhFUyRJYnApEraluBYGXyFe4nfF1uqnVeDJS7aCWMnvBaFHGSA5slBcV99QegmW2EX4vgEOg3idHZVWwCvBZHrKVtUUKzfyU4xN0PwOTL44CEOLzZ6iPvHRHhvITtDKQuLYXo8ByHofG-wSrgX3zI6vRZgjsePVcQKVWCplamcIdjPOFyk4PIigmShkHrWztFlmjO5N6C9S1uV3Dih-R3r0CeoG25RTvjTqJqcARbm2JQJEbnusSElZSQkuhZ1U79XCFbeLvgJSvcUkNPinCDeR5vybGDjEdtnr4Y44DY9rWjWH7MQCsCAUqGm_K2Ic-Hm1MIq47JmsFjybihqp7wPpAmGRy-ybOc7YAfvyQxCrZrrQyXR0wgdBHJnUvnVWggAGJ276X8zHk4_BicEQ7sHJYIFmJDASClPoKtglORRfKV3Za0LQtmvg5ZtxDaQPFNpnc48IZqXT_nG1ehxs2lI39NMthbltKvUf1Howdk7jZKya_iqqvoXixclULrnojmQEekmRCYDaBP0D6QA8M80m8anLgc4sq-t2PWBh04BxUuhzv8lewbd5qgSBKX4rkQBKbE8FZs5IyBdulptd8vLaTPUSfLSFXt9nMLx_HCwkqkFSl8GEjfodm2uTBLdg9oR6o1eU2sDF07OhekFj1ohiDIQ_Wi9CwjHWOgyEKbJ3ugXGjs01i7AEd0FZXa3y5gLnD9yKDoiH_Bjtgr2mNIOirsutxGS5BkwDAjHz71hmMYyhpXXJNuX6llUMP03uRfHIsbDYRCwqlIMt5h0ypUUlJ0tWLuIZkjNBeFJESvRkScj4KKrGCy89AG_5hE70FjYCVj0WdBn9TgFxtRfq7jLspqTpHPTybWyoG7kD7F6J4sgVkSzNsP-fsUCmqmwo-LehjUCUPgYS88_34LXLTF9zLQQo4OQDv13HAOBziO-kKkJwgbHGjg1GQ0AaKchudnYhKOLyaLcDpcTMLThYjj8fhsGp_JJwU8_9maIX1RTuexp4U22Wu9SFRw07N7-KLDxscCZS_68atijYE5DoosZbrmkICKXJh4hYkNrIRrFJO30OEnjNHQqSoRZWBEJgODXLegFGGwpWTvF4XWkoxYr7VrSwkcXSVOUGCLGLziQEkRoCqxktptuRARZkWAUlVqdAJmU8A4Ok5As4WfN0OdvqlSC2-SOeExFxQn6GWyAI2WYKUXuMrguM3-1w8abnaOybWkAtPBsfcBpZ9Rs53zqwEJ3DCXf9DqPOFkVjkjM2BUYMuCWWftcCkY5R1FAtcvreYFkpfyhCtfA6cb-84KvmzuMVBo88u6So10u9bp4BlC2uuiMElT5GMeCpUzKXQMAJTNV0aA1zJ7SJfCZGUpUxXLQuy8FcCYKkB_qfiKIkxBw6MAwzBxVGmnA4cOkugzb5RRHK4zK3gpHkm6wyXaLJiEyPaPchvBn1pSuoHBsoowbobT2_beNNq0b7b9983fL7y9yldBwUccLSeIEGgFBQfXtwYcRxt1h8YeZto5kWel88JOMEBVWbZOZLYliPcKjXy83h9g4BK9MlWpI7RGDLQ50-FftTPHbeL9US4UUFPZJ54QXc85Wkt0walq6pZrPBRMfUnSFQsygObGgCMOYKrYpQZb1MiQXW-W-xj7YXRCIATDhm70I8EfiBXR_r3Hbcdv_4DugDLZbHn97IEES2ieJuXS24dEabneFih1ls8hrzbrih2oHEI-LOHvanVUcwU6kzYBMsVhzb25oQgbx5Rx7D-IW6A8dFZIJOSaCHIc0SrMgvoncQGODJEbBDSdO3FLRohyd2u2DB9UhfK5atCa0V4J587hQF_PL4PbFFZGtrRZU_12aMC2DoQIu2v6it_Zc7kXG_KZkZA2EBHvZpuju4zR1-DAMW6qAhibDD6wkU7e_21NImESHdjZqdjCe9zx_fup44rIHO80iQSHxGnwfUcKFOTM4BD4G7IT_FYtGkuMlPYVbPoDSWcUJFDP3-rwUMpWjYa-M29hzyNMXxUhIZYIvBtsaqANsBrhuZAiWXDAwGnIIlT7qoY44suFHs1NUK1BEY3d2wJM4pq4Cb4cmEFOw8MNe40sD5PGVYhde2xVFAzmqQ8ydo8wluZDs3H1jVALwrgJvoRFJS8LRTqxTjdiDZc9K0kv5ZA1iD68mzRWtVZe0DpvQJyksoFQL6s26lQ0HiJxBPfKWXek1-1s0hlYewxXgNmo_OY3VQmPAitJxRdSGBz_Tj0q68p7rQoMWD8pNxWlbZbVLcpIjwz9wH9kZqCsuBXPoFAzcLjloGbocQoPvNjEozJTNwT2LSP0ahHbiB9y9sSxNDlpxJ6-B3px0VlGgbRAEicY1Ko-k6dLGQt-VvJKAIn3J71pXJVWP3RKrAYNbbVFTXxJB4hwoJrG28DwaRkFj8QJJ5c5rkueLibxIZ95bxRpS-QE0iXqNOnaaC2u0Kkp2Y5KY8PWLiOMHX7DQmKTkLryPWgJikGw_rGhijdEvfyOtc5mVuAe4q4WK2GRKFr2bKq5dLUkFfYKDr9LK3J0Xaoc_DajoLFFiqE6gVgVNgsO6Z-O4ndkPaDWADIcDV80sDotL854jcjWIaVYlQVYC7LrmI3x-Sd43FrcZaxJ16T18fEeWBQL3_HQKEClCRKDifUZqGkJFolaivLj6DIENhzaHc6pXQZr7WjvpkIXsnT0LCATT5KZi_s84XcYHwsVauLbxapZM5gzRpXJBjfcWIc_XxvI0XnTJoyDrMqCR5gc_rkWfCE_M0VuBiZsg-56G7IZwDJEUSylddq_RW6lsDQEbdCRoIFTHcK68U54QSDVWmI01xidKRDbqsAuxjSk-SOXLhLEtVIpCvKWaoctZRz7LluzziuJiQ_uJE0gCB24qKcfVujOAqoX7Ol-xzo7n4-IQVQy-6JAZgoqnALbRoKtiAV7H5ECFxyCdCcLXFJ5uBCfAYp4UpIC5YOBMCalkwKYuMGM3XC9KBK5FI64CGLyHnA9izmYSPzL0uFeZIkpXzWv0n-vPpjf0pvl3OxHOrIyP625zeQ5XIKplGyIM5UGtek4tvZ2Xsnz0XgeT6ahjIUIx_P5NJzNRuNwPLm4OIsn8elQnj7AedUK16_lHDkJ9_qmN8HZ7m-IFq1zw08tr2ey9lYMMZKafXzameP6_RwxoBBw2tYdsNyni-rgGEzEHggiuc0cb4ONppt6GiWaT7AqSTGnk6C5UMWsOKgZx-jKDDJRUjZ3rOSMFX3aUmqX47gqhRTf-BiTgeYkKhpRaglpmK9xQcGeWjXiLc3Eis86hNrzJ3nYbeVPchwLJcoNx7TgVWoZGhzy36gCl8CduKCNoOsM4y-FVlV0hR61GNIrKC4F_K3EKI8yO3g4Zc3MMXqAjveURNYhukrh6OASoUWolBtXZRmY6Q5ch6JR99eGfpWyqtJ69ds_HoBCvVgoH4_aFkQRscPpBE3CQpuQZHXb9_lZe6R1bHLF5X9cY47FutXDCgzCWjQcbJXG1UFbkpc6psW21k4_H9GJ0dSuM5buBvFqIOLaLbbOyw1vfAy8EqkVpYGnKy5SkJEBVSahswPOriliQ4gli7nlNZE_jhG9jP91kcGGfls9TH8QoCgC30CnQzuv8dxBwhhlCA6BFR0f39VGOD4mK5HZwvExXnTYZlAiVojmBJFLrliLViYZCd-CCNeYHqsPq19TepAPP6eXgHzsibCVjmvGJJlZBKGiw3KVYw0iZaLBe927EtzDMpkFgOZFTg2NXESTVxgYp7dlwAmZW6HrgZ9D3QHjSkpVMW4dy1uPj0W6Xoqw7Tl4w6FeAduV9OjQPoH3NI_o6uqQYfeVZw4CqxrRmm54B5SZ_BrBg3wK2gcszFpNxQFnH5HHo2LW3MyyKgqUQtrc8qekwZgwOkzljKZSJ0eeQVKaJykiz6HC1hEzUEpBEzg0g6AWNz4x_ijYn2_oN99hPU9yRimugq-qv96DrYsVyk9LIXhN6QJmSprw5oLIKCtZNtxpxt-CZ6GcW1J8Rq5imIlaiMkWgUOrCn8WntVIArBVaKgjpuNjxqvC3Dmwx04RY3jF_4Q72aemsB_6Pm9LDvOZs1VD2ET3lA6_nBcq0ARoleuljAsN9sZyLttUgaD9yBDHht75PyKtvTYOuS8w2pxunUA_TckTyWSKoiSdS52pp7LERYxnelW1wIZJLeeYtrpmCZxIBIwZ1KNqIcjZx3oajL-CSelqPZQHIFLJ0O3bimWv9qeQvlYkFu2v79FPWYLP3VBcSIuQRBu5MYjWuVwmFkyNWh-IWbQp0RuASGlBIBWtrp94vhL0_7zCDN8AP0XoqYU6ELk4joYuZWopjN1hoB1NWK7RUk7aXlZX7ZgaFLbG-cWPpOoZQvt4cAWLxcS3RDnP-DVb1jNqpZiU2-A1VTxOsvBqQJ6V20LgP2-qGGz62MJ02oSou1V1wmvJJcpVkTzm4RxyAIpoZfwcXFZZTkaeKW2yU1xoMnS3mhmC5p11oc1RZHZg6kQEOCvtQc66Z6h5lQs9VEgektMteRLtThZvG9HjpdVJ5tfv1LkbicDJw07iDawnkgXopZJEJVeLo5pa1nlAzjAgoVB-UVVwXLQgs0sz7_om0Ro55VeVLSw3eaqS2eJEqL98DNiJu6j3DmiVa3FnZb7KEkE6hOUtruai_UO9yXjeWzyM5HvCSH5PGMn3hJGELXkHtKOwm-WJv-8fMM5fEMT2X5IN-lDIWeM_5GBx4bpkXxKJqfXwE-Pzqf3gKlksECS02QY_FaqmAK75nQseQr4nFcwSbf6MEoFxK3OCsnqLvAKafgOcbHnCtQhcmQBqzTtXaJBEcD9gWWhw33WppT2GCi5i0f8NU5oMHx2Fnv9ZcjRjozOdkLeT4aNJiHhBTcg1Eo6J-a_zNcXrOPVMOyyJfREwIK3AcvsLaBEa-YvlXFiA9zPzD3V_ew9bx9eVnjnpnMElsgvlzbfp9ZjfSqOVa8yPUOz1rczDm63OZDqie0noXVZbU3LUGW-sfsNPXPMCdJYlCM4U7yTINy4NRwXpyVjlQHS1TtLmT-Gq3MmM4azGCYGan39JKRNDpduqMnfAWjaVLyOM616jpx8gFhrUZ2uwKnyPUCE0UACVeqItgqFrOygpglbWtcmJ1tpIk2W16P18wVRi3D4svrUCww5uHhz-CFyKYgl7sfQbMACR3DEw5F-PGn6I4nWo_dShthxaZ_bpSx7X_56z077Lg8-BX95LcrLW76rLgr7XztNO5kgZCA7Pb3DFdm6ppULt4_dyTizCKb97-IGvHtJ78GOWbmnHr13dnu-hDrz5LuSzcKKcyN4eCxtK03Z-sSS4QamuByLdgJS07tnirFL-JHqXde6oCg6EpgQdA-XMYuG5mODdW2WIxxIrGaHj3A93Ctd5qy0Q0uXRnjCE-S2KHBFtCf4LikFwiMUm3mGgW4e5rrPgBmhcrubAy0enozNKasLHyNOfq3AnykFahXZEUo0ArjoUlFFChd3xYmDJGQeWtDaRcL8kBUyZputZNi7v9GwSFf8yVS_qOF_ts00Q_IFlu0oKRA10LQzeBMUIzDbxZt5rGadLtyNeT58GySFu47EgQK-v2iIp-RaUjSb_roG5dm3CdYrhcscnk3NmnetE9jzQc-16pkKAnb5f5XjyPFZ1jjhQLgLyeXa7SAwdWw-tMbTZ22nNcH0A5pAHrB_uNGbhchVoBVmAvWZcfjyIrGsgKdBBto6ftc4BlZMTFrHiK0xU36oCa2FnC8WoyLn2GERUa8u9CLmu_sveSENY7cSMZkS5TBYbznULEH9UgpIiOVEiRfQgTraxRwp9ojLmE1a7cHyuho2-XzBqNtLYzr5-9dvCsl0iVgW5XELVikJDgnl7c7RfFGzj1fMKTEEXewXcoEdrTKxO-_tHxCwMvJ3YjryQ2SyKo4upGIVyhB0ohmIezsViFkbyYjoW4_EkPr3YP2SmggW0HQokUro7hUo4duxghK5XaK-39QeaqlzOwTAeU4UsTvCIltu4sEUGqG41fpzwh4a1oYC20Tk2Py79ifQE6KzH1wPiOhXma9gNq3sHTcCvxyYpvN-0F5y3D9jd7oXVCGaRByZwofMFdBxBNVfQ_RKkCaptufiRmjZj2zIpv1KIpqgykB4YTxlYwCClqZUu0IbwDbzOpnuozpZqp01sUYFwN70Rz11ux48HC6xOFapicyi0DhqFlWw9D5tyzZdUdxCgMrmYaGdc0yEl7gRz4PMJ-sIcRYdEBP_eVa5JrqHmZMoCepFqS4MtJofthuWmI9yLrfLZ1_aP5CTnCxwfw3QZ5GgecMMPTgTke_P9e04tZ9-FRjU18BiqrLkufa10PDyGu6SodHwyj7cvEBu0qjLtgQlU6joR4hLFIvI8VkfNJE0QwwRmvuHuWgTLMlPdoAWAYRkS6Mo_5Fg4XnRlEHzvRlbcwEoEKoDVFIi4dUiO8J9bMow4lnGj7uAHjswZx9U8URER_lxVRVZ1kcx1Mm5L3Smi5mJ9VQvGdodfg0N7FzEz1FxRLghDuc8mSOLxMc7sxLpWKhTzXe2W1CmK65PtwUs1-rmrwAw7UYBa3JNQ6p2Orm2WbhTKOLZVrEopQkRehcTAK1fo8kmcIi9isxG0C6paGyIzFQzFSThLyqAW2y0tBN7UKrJkjjzOqypTZWukZ-E2pbHX2TQRIM9FTZzUgi9oeupeFrYcd55_1rYCprq6IRksGr5mVYkUfRm_Ms6y42O411f-mTEjqX1YqwcINIigQ1PIy82tqnPTGp3Y4o9d9QSNG6zByjW4xI2JaP9-i1__G5mJuNimlBKNBWFFEivNpy4p2-Aw1p1mE5DIAm_3rcH9UVP5PbeN4GAGXp1vHZS0EqRlh7hUd9KE6HIu-OgyGnwE-JQrVC3EwI297Aq8DAJTTMywFs_J4dcIJHZyg3owmKJbByrqQpDZnCtrKMtBgzGQpbzOsSx_yTLPLUt36Nd-w6R4Dzdt_D1BUjb9NjGTAhWPrCVBmjKKtSRLd9Wcja3O1_XM84Yay4zfLhxPqAY65UQspUpDIAgjGZFEhIeJ8vConEogdYwDa6vMFQLvRPEZn864IBWyeIcq9wqlXPmp0zeUYe3E1nWzKbzFmN2WUKFlg2NlbcfRQuj6orfIr3ORgE6IyhBQ1sbL03bUI7CH7rh66Zqr-q6I8wIRe9uP7C9a5tgVh3QJp_xBnSmRoUnl7oh63F-51MLKm0l7Jm2Hl00ge8pbID9PQX1EtqkaqB7G99TdVzxnPW8MSawwJDFw9F6-tf6D36jiDGBZk3_E_e412mtY-7nxDQVOyG2_YYkcHMY2rFLpsMpRk4697WsB5cI8ByYNkyC3wD5tEA3NKNVL7ohresSYjY3O4y-RCiOdOPIEFLLXNXnPAqX-qRuGUZe3X3J4QqZd0VfxES0SbGEmFjm5HyvuKL_UUlioWXpVCYs6d3m4zNCKohUW39eRCoJ7LGFRr6bR5coOX7tj-cAShcWEX5bA9S54liRDEykHM8DGU9qX7OcQa8eYeueJ78O2rX5gRT-5BcIaKR_k-uowfx1p1ivHWnTkxzNKnPIPLcrsoKnJqoi6BbYjktQTTnitMCG09HIFyAUGh0yii6tekM4qmt4IkOktGdJ7sUs3rO9Vqaz9xHc4WtUq7uZpLQLTLVOj0gdukzjW24JIB4_1OfqvSttXVf0z5W3n0iqPtzJcP0edxh1Yc64lMIkrZh0qWU-T5WG7ruZoYEes8zsOCeMoMZBMtjeYOB1nNRywsb_B4mkxwfexY5ASld1T2pm3eKfZr1BxiYKGu8lWA-nxQtfKsdTJSbsR-ag0DZ0EfjYF1-twkipMQTjdoJELdWBuBWcv71MDbtDh09R1pgoC08Q5OiD3cRd3eINrRNnjDt7JQ57BI6zlXT-9HnU4ivucPw93GlvaOML93eFud_zIo_PT08n4dBEu4jgOx8PzKJxPh3E4j-LheDway4vTaH8_couNrLaUJLJppbLLaez2FGv2mDN94gwva-R7XHptW1xDPji8bAx4rQc8YmdeqzPc7yfiesTR9NdWtdthrHvirmfTYV66TUHiF_nvzCaph-6MKW1UMBez2Z5M8U6o4rkmd_w7lPxUtoEgc92roOl7CpO9HJT7xoUL2OqgooOHtnEE_-7IKjX4K1I6uGvFelsQBF09V88aX9lyUdw6CWQJp9saVcSAdmziC7foddTwkuPy1spXMGr8VpVEIWGvZ83SVoG0t04zCr9UOC0WFCe8zxwrUskQTlBQKSFZya44DPrCr070G-0O1N4pGDqCL11ugSssRSpWNacuCq4VIbioJQ4WvSsI32WQHLUScycukKujuD3LNG42TKVdVAkczCciIInKNtHCzrZ9cYtOc6UpkKXRxuyvuX9KfXLqyRhHrar6tX9fyRN7rW2XEVUCWKN6SZKhnYxhnW2U5vmXLXBIRIwfvv7xX48CmX3dUj1ZLxUAvkKEEFoY8K8RESfKf_20KKT2SiaaQh0Rq8CkjLGjMhGJX7wcy6ob9zt62AT5W6mqgOuA5qxQInO8OJS_Y-SKN7xq-VJic1h7f00lh95RzS1wOQGfVKl7A7bKuIRQlWnaWgpFW4eNMihWR9RFBDshmCBFC82-nEz9I6xMaep_YiboeqlwRxrYkXCVziT7c1VsaSqco0vUQeWGi0TYKhtwzOpwg0P0niWojwk6_TNYBHXaPdIxCpqTPk7jxbDBAmIOll9Yq84c408ZKXFuP1SPC6NlQYUBqHi5XWDLnXAdMjYjSziSyiiTmt9g6JExP5uikh33zDIMv4gBi1srmN4pSUQB2x2iBNOPVWV07u3b2vJGUHtaoy2cgKVscp9IX276G7AY36DhfG7JniTdV1nN-BYrRAbwmo8HKpGY8Pa6UBL1jKbiQ2z_HnTeF9_zVxi7WSea3efkg_emyYDTvmiqwbJaPcIrIK08ZlqqKF8vGYzoXNORZy-jv-6oPTqxg3i4IjWKDlM3QK0aneGDMfwZWY2-NlpDwSZKTWLt0d1b1bfvc4qY6bc1isWpcZ0cajvCtzqqozsgf4BlZXnKoYffU8F0rmWpOkrBu2TIlcmxFwgoLVI7rBqSjwWsIVx2DXpKnqPUGJpV070Eky4N3FiIOQR2ch0NXMe9KSlSo7djJrhj324nRurxIE11RMcq8ddgtglWx-C5FMNX2rSkZBC3tvmfK0rOkI2-SwM2Y_3sXctzestGNPWUQvb2AiN8BuPCEBVWeukM7KLUjb9wBaAtZtwTpFM0WoL7IUGN9gM6b6lK0vdyDUx0o_4-0ul-HDnURXw1joydAx7XVE14rDWIAAhCkCrelNILY7FCU1sl8gkP9CEyu55Dql2z4eoJCDqPIkxC3oj0SJfxdReMrMoWELUxRY2xMB1rBFVs4bksgCxsVkZoC-_6XkEurVFKvjhUjINptFFtXd-9TPm7_CIZuuyyWFOYW_nPTNWFoFbnQlfgpqIUup5FrQ5I_abaldSreASHqsj6UXBNOYlUNoZykUgtdbSvF6UXL_aLvzIUTzUvVlhUXiQjIfl9nPLoNmT3twKurtzozwZctXteYb7OraAqFjbuMdAZNVxgJPgjnjxq4SEo3KugKi0ovLVOMfEBfXicjqngSWpGwBdkTL6RKgXi1l4NWYAs0-GMfvpQETDyrTKhxR2RleBzEmeSlB947apeMZeK0_UlKKmfu1gopSF2F2rmkuiEa_jM9cWL_LP0WIlffVdfL2-TO7C8uzQnv5CysYH9TsI7vQVOZqGPsNICea2VbRWFUOqq6YuQeL0nNhSgVa5R8w6_RDDjJMkRlKrcXgKrk6cwwA5hRRWZI3hR1g7SrWs0l1xIWKtTHw-WSQy8DGFl3vYhOMrsni6n1xCEbg8McYf15y1vNPyzLRNPXwJmfofUW8p9_5GqPk-3gr42szliZdWW77pkd63x0aouHYRT8qAX27ziHhJCV83b6bP9LWG7jquvx0nrbYvDGZ_BN-tTqnEt7VGMuRahtNiX3U5YPnHndJkPMnB3jy7PcTg_H8rwQkzPwqkQi3B6Np-N5yI-PYvGz9rlGXs7J6m-bVfUmY9bO2PPxiTj-p76tPVz5JYwTOVVw0oY-L1q9miaaekEezBTIb96z2H0dVHvX3gr3H8EugC3z-9Za0OPgTm_vt7CIsbsZOmiy5xmyTB7jsxgesZKFJ9ZRdQd208e0sMZnYXbr3rPTBdt1b_5LZaXDQTYn7pAID61IN3B-GhOgjdee2WU97eFzrujlBdTv2DB19o02jatmq9fII_A3mXcmsdUftMFP0gs8NYuVJ0DJ6DDEX2WdqRabFRtLNpqVW-bW2ev-EE8C8V8TDsgavW07axxz52CZGw2uKOd89nofCEW58NweBaPw_F0PAvnw_M4jCaRPD8_Hcnz8XT_KMVP61hpVnEOl7Yk8fGnX16oJ168Cl7cMF2wazlpylLDy14MghfcBR5_pgkmfvHrIPAGbOstX78_TxnLuXlPm1KtAMUzLVU0wJXPNrAb6HnEoDfq0n2lOh954ZT5YBdu7I-UZJ9AJtyiz-TFrz_XZOg9WHDyE9JVWRel_CFSNI8FT5tJwbOWOvcmPWJHOwbbh-xonP6fONSF0cXmOx89lW5y22NavVT1rBPtJLPaLHdTkzsth5aI9e2nJEQX51F4MZOjcDYBdWEym11cyGgxm5xfPKuSYAUZQRj1yvADDrOWWmlY6cxMTGVRpZa1aFOFv-eO6gDmWMWgKtQo1mg-lzWBZqTYZQA6PVXPKeSt4G4ira5bnCOrx4VyRtxj6GFu0SjKG2KkbIAaLz_FuQpKDmNifIvEx_Qf3F38HxYZ_F3wRrCz27meFGnu_pUtOPjai3c7RqJvhfj9z3UjQ45PSI5btaExSKrb9E0n_UoNzPoP8RecqLYQ9UpAMHcvwqn06zqUg8NGb3NuD0WgrkYHoENsuWmCXk61DQ7pbPKeXbRh11oXH5uIXPPz0hz-2dVO-cVO7UqGJH3WzYTqPQrM0N3zanjG6a318jRYC8R1h-uplPjX5_0TZNkk99KA7aH00KDnbeezqeG6YIZ12KieJEUXHchK01u_D4aLijj0nG_gxtxhDMIoMGQBlPiXBFBgvIIsHBq7rJv513W8Rb8jw69p0jO_K22jfAO85jNVDYT78y1eOsMOXOTF7mvScT-auNZXfQRoCo0kbsZDrVfWYVxsjzSRtxWt9opKYeiLdqorrcE2eLUNG46PQavH6IquJN0z5XqN6R31PYBYn7X9_KDZFKyP8ehOD5rf1Go4tTUtd6Gd1C9cw7xs9tWKI9i61dvLHU2onZKrra3O0cbqWYTbYaylB_pJezWb4Dsdl8qwmSx6uLxWscoHYlvmDlS73IHtets9KacfLggFjid1Y8VdL9ZOtLHTLnXgeoyzrmLbPVvHbvXMLcXkNkXt7LPmegf3aLYWHNZ7kpoWkATQcaVbj5yu9-xqcBIqol_-1p2y6v2PGk_1bDhHO6x7WzX627cGkCmAk-zf7IZDcqZnjK4LxvrGnbjtni1sH5KG_Ot1jmH1ZbO0fWCclfuNS3oUglpLEwVVcNqIJOVD26zYviqqqYrK81zLtIu_XPaQwZO6YGjWpFpsA395cj-MPfSXbn70U6PjQD2guav-_6A98uUU-nfROZ5a2jNrtU3v6pU0PG21XSVRypgqSPuQktoN9MgOZtCoP7M_K2grdHvJOdG1ism6XrJbE7CvVnD3nFHj2LvmcUfFYLca1c5yuirgv7tab_ecbR3fgRM-8arn1svxmArwa6n4UaPIrXfnDYwGB6LCtwmzxKiRqVUjx379t5HE1Sg3qzuwtRWBVeHPriqztrIsAZz9wrLeOXk3hpA99aqGyLFoWt2L8SbcXSKL6wZxSbVH1cqyOfemXxhXLSa85SNqY_Xchh2c8bqj9A32bW8pO9peZ8mtLnrk62eoinMS8CDY9HY1x_7OVJTT0_a6V4Y2kirJaVizB1eqVRdQvPaqjl2r290t7LZH4TPNlqRtSLJ1UlVqtrmGw_9mFWR6eHPvKty79I1J0nKKoCi-u099jN1VL46P2_O_qASLnUj3jG0yqUJ3q-56puqIrqyxX-kMk2_WXzTD6T6wb1kS1Rzd5o7uWlmNXddzN33qxVX_2ChWsaMuRaNoxAkXOaXkyXzVZ8e6lQucXpiqPqyG-QlbhMIvslC7aaQNPCQxetACNPaM1Z6pN8zYHam_D7JylTOBKw4Eh36NgaNBZ-Jgj0rQSEnVKTN-bmkdUlbV0-cdM3ZyEjzAxdezlz3pXF26qmKRD89Rgh91pyjVnWk9c6652QyoV12GjvwkNzdp_zq4YAl2z8SFH1_uk1-j0muOtM1KDin0-LWlz8CgKiVmYPNSdiXCAMV2Zbz0yd9a1sqRd9lbU1e89rUP7ta7T5pKDwVwAssgMNkkTmZSX_oJmksm-tGZSaKRedebx-WKKOLqs2u6vIN-_MpPomhPmYBPbcmIyzra2U2UgOG9fAhVMejRCmcviezEbsMzbhmXOnq7F0XeQxk-vty5xe5d3QN5jA1sdsGA66Dco_7InzqHkxYobg1xG7jtqfbAydZiL9gJSiE7b8QCA51v4QxftWYWKTcex3x_wAhwaTpf9i3FR6nuA491oassZH30ajts9ZtuXKofs3WAwn2ZwxqP2qcZPQap6uAWd6BQPx5coST4DqO2sIrnBaV2rkpRSDdGLFrM47mchMPJ-Dwci_FpKM7Gk1Cewb_nk5mQi_N_YMT-gRH7K2DEnJH--yDEHjGOCxvbjebqBYN1grn-eyPEnGntiQ-T4Wk8HYYXcjwMZ5NIhFE8j2cyAq54IR-BD6s7BNzax8jbt7oPyaPbkVKXTt1EEztmW2ySQ9kouLBlPXDl21x3Ga7lADAy6ZgaNrsYi26hQqR26OIzjkxFX9PN2Z2-wNI62GsrslHREyeFT2X01it2qGqgqDAeH-P16p5SEwWiagE3LdnfCO5h-rD2-zu7MSHUNrCODEksLsT65-nmuPFklYacZwo9riZerVWD4Vazt9c74IR6nHKyTwaO0JrIFCtbCoBYbBqHeG3vTaFKJ8o-G4ADTxx5xbTupNA0SD4_XdvKIm76-7b7XdvRqC0TIEe_qG5V3KoGRDhyS5C23_HchIf42EULgtGgxzT_KpHfD7CTUlmlOikExqRoQqiKUQdlVa7Zn28d5wQt6YCK9GxsO4ikq9JgrYTu80NNmoCSviuXF-1oE6ztqU3LFqyJbThRUoWAyO9u6EFRTN2uJfB0jPy52TTuFY-lLk7LvOnYgaX0s9td_LXODHTDG21N6E7Yhic8lP06Wglw1n6Dowsyg_fkb4yawUF6KL2JmtnN_Tlrew7sKVoi_9ddpkEqyOyreB7YzY4AfxcgBz2DambNqpgWO8MKwR0DfLCIoxPCVwCeOkzH9ot1cpuVJKAAmEkS1Z1X8cy7l9EM2ePLL2PU-jjCiit6oytZKRLicspFzqBamHb02caOdMdwNQFFZcwt24A5GnyT9OgZGpnTBxpqhwZpbwnQkWoItaotxnb8plvSCflR5NdLxk9D-wRXbwa1ohNtxU12MPaeCb59GmYH7R4ftnN8XMfsdHFMpfL1TK67b5NBbHDpDhUsTmRpdYvXtUL23Fy81mgHThGHh89dzEOnxqpwQjtCIw9GEOVtDegT1U2el677yWue9rCm8Tt9zB1o5T9S4bFnb-XOunFLB_ddG9vZ2x2X7ASjexrd7t3rXKXbPL1V-cAts7qyIKY-LJvTjDxQBR1Z1bWNxPleKFIbmC7du9FLzZjHft1De-bb1le0kTliamn3dZxWICaFatI3PZW1ZmEtrVb3wAM8HLrzvACcNpiNrlzSLMt-AuymJ_RJp-foU7UyOarDquY21NPxyNToOD5ugHrqbNpUQd6ZJIO3uQ8tUAfdCKWvPQjA08XQ43ofEsXQ62W0enXlnij7377hxg6bqqYG_8bl2nvFRd_d-4b7J7QClXqbKZ08S6so2xrKQcCopDDd5On77tk7Exo8A3Tpb9EWac_FPanp0U5Js0cDnTqqsE-7dhupNMBSzwk56q5XrpmYxRj1KbS1gvi7EEj4ZAOFpBi4h0Dah3m3Zg322IEdDNeL7hp2ayK8PbrzI3BLvclsOxFNtkr_M9dVfjou1INDfPNMBYMdRJOJT3eXB-6eq1M4uF4r2M3ce3iN4MdWBuad2yW__24q_Pbt_G9Y-9cv8Ot20M6Ch9T3ve7T9p4C2OoWHE-vgtsz5YfVx92J8eqpgGt6xPXJpr15SIPeGfG1MYivpY_4ejzea2cRzT6v6H7lNQOumvi81TJbOW5_IKgJTCs1ME3VhdTi4slFKn9wSyd21qbsjbPtW5zyCdUnTxRk6WeCEGQqJmoD-PPxbHY2Go7D-URE4ViIcTg7ncJ_FuJsvBhFo-noPDyT08XFMBbh-Sn2e5anZ-F8NI3h8elivjiPoygaInAgr4pI7jkobgSlqiN6ar_xHaCAWoguDYiAqg85_vfAXecnhkgwwIVe9kmDXvCjv1TA6eDXO3Es8ASYgzKGX3-WtHv0G3qX_hX9gQn8sA_0M9jxEsQFTO_0ZHx-OpoNz0bnp-PJbOZ0QNlr-8UFbMLodBZenEcLBJeJUAynWIUMdu3sfCiFEE_Z_j3Hf-7tV5Cjgz_90opeGgSPw7s9HdjmVdnC0dq_8ie4C_P2pIF6UW9PGrkf9_bEobuQb7Vh15L8sPUT3417-_Xn9supEEwWNQWXg6Z3MNjj4ro_00UakfxpZRYfNfAqaHV-_Kix-n9Un-5_wUHUkfpHYA6U3mKOlMcm8JnlmUOHSe4jHsLz0XAxOz-fhOPRZB6OZ8DEZqdno_B8chaNp-OL6Xi-cJnknjLHMMk9x39uJtlR47bRzHavorVoWhqfojDRNred5R5FalWME-60DYayanzUV6j2pP2uNuCeQDy8FJe-7AT57q6IbPJNZB56AumIyWgiFnIanp8JON-LySKcDheT8HQh4ng8PpvGZ_IppLPn-H8l0nGE0iOpJqNaGqoGTEeHOSySm2zcEmf795XroBS_DqQlEmcyljieQA7yfDSex5NpKGMhwvF8Pg1ns9E4HE8uLs7iSXw6lKdPIYc9x_-rcRJXtegpmL2ul-ao9VV5ctnsev-WDsqqB60f3q8w6QgXHnWyKLeGSVPqWVKk5ZE8U4viA9Klhp6DOmdRHF1MxSiUI3xoKObhXCxmYSRBBInxGOjn4inUuef4fyXq_EfTzb2abraSrb93D6Zbvchnodo9O30-mmr3HP-vRrX_6EDgdSBoJ0-9SS2k6e0NmgvG_beb3Srl0MVk049oIR1EvI8LJNyzELwh4j39KtYNtt_4f09-mN0D7uWeec4Ew8dOaZcH5jdLMHzchHd4X56vCP0uD0wzh-2B3pgdY7X5JVqMyv4ftNaY99_4qGn0K479v94pv59rmr2c-EH-mw43UofisAe7C_dMrLaKw57NOgzP3W_8_1957uPGavi9_-6Suv-r8VwvqfvvhOM-YhSfDT-NuT6KEf49c1z7ep_f_vzr_wNHF_8P)

![flow_diagram](https://raw.githubusercontent.com/kumarniteshpersonal-beep/agentvis/refs/heads/main/packages/py/images/vis.png)

## Installation

Install core:

```bash
pip install agentvis
```

With LangChain support:

```bash
pip install agentvis[langchain]
```


## How to generate an agent reasoning graph

### 1. Define your LangChain / LangGraph agent

```python
from langchain_tavily import TavilySearch
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain.agents import create_agent
from langchain.messages import HumanMessage
import os

os.environ["TAVILY_API_KEY"] = "<your-tavily-api-key>"

tavily_search = TavilySearch(
    max_results=5,
    search_depth="basic",
)

llm = ChatGoogleGenerativeAI(
    model="gemini-2.5-flash-lite",
    temperature=0.7,
    google_api_key="<your-google-api-key>",
)

agent = create_agent(
    llm,
    [tavily_search],
    system_prompt=(
        "You are a helpful web search agent. "
        "Use the Tavily tool when you need fresh information from the web."
    ),
)

result = agent.invoke(
    {"messages": [HumanMessage("Top warm countries and weather of each.")]}
)
messages = result["messages"]
```

### 2. Build the reasoning graph with *agentvis* and get a shareable link in exchange of messages produced by agent

```python
from agentvis.framework.langchain import LangChainAdapter
from agentvis.core.export import ExportFactory
from agentvis.core import AgentVis

graph = AgentVis.build_agent_graph(messages=LangChainAdapter().convert(messages))
link = ExportFactory.export_graph(graph=graph, export_strategy="link")  # export_strategy = "link" | "json"
print(link)
```

> Open the printed `link` in your browser to inspect the full reasoning trace of your agent. 

## License

This project is licensed under the Apache License 2.0.
