{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [], "gpuType": "T4" }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" }, "accelerator": "GPU", "widgets": { "application/vnd.jupyter.widget-state+json": { "8ee0da8eb27849668600fd85930ae7a9": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_504cac430649408691c165f34952f8e6", "IPY_MODEL_77e946eacfee4bcd981b93232034a441", "IPY_MODEL_1acfb7e91605426aa0474885966ea5dd" ], "layout": "IPY_MODEL_5a182f55d9304ed4b538ea01c73d1620" } }, "504cac430649408691c165f34952f8e6": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_3baf0c9fb1434ba586c1493d5ba318a4", "placeholder": "​", "style": "IPY_MODEL_1d0cf796294b46dda89b3c99b17b8a9a", "value": "config.json: 100%" } }, "77e946eacfee4bcd981b93232034a441": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_95cf1226b8924c09be8d9e5e94e8e0ca", "max": 1469, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_b43802a8e315424b918f65bc59bbb326", "value": 1469 } }, "1acfb7e91605426aa0474885966ea5dd": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_fb588cd8572d407893392af85be2d12d", "placeholder": "​", "style": "IPY_MODEL_ef12e3224aa9410fa5f60aba38985e5e", "value": " 1.47k/1.47k [00:00<00:00, 53.7kB/s]" } }, "5a182f55d9304ed4b538ea01c73d1620": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "3baf0c9fb1434ba586c1493d5ba318a4": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "1d0cf796294b46dda89b3c99b17b8a9a": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "95cf1226b8924c09be8d9e5e94e8e0ca": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "b43802a8e315424b918f65bc59bbb326": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "fb588cd8572d407893392af85be2d12d": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "ef12e3224aa9410fa5f60aba38985e5e": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "ba8c54822b9343c2918b4040b87d1d05": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_3777e97887ab4aeaa18ed4545e4da145", "IPY_MODEL_358c3da63fd844bcb61620cee99b079d", "IPY_MODEL_fa0744333b1e4d77a79ab7cbda7e6560" ], "layout": "IPY_MODEL_019230f515ac47c4bebdd52806522781" } }, "3777e97887ab4aeaa18ed4545e4da145": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_d1e0835521bd4bb1ac219a48517ede51", "placeholder": "​", "style": "IPY_MODEL_1e33f3e713db4a16854d112a300abba6", "value": "model.safetensors: 100%" } }, "358c3da63fd844bcb61620cee99b079d": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_e5fd912e877f43bdb5f36bdcb02e5746", "max": 115434268, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_af2877ef640b44ce8c64d81643eb45f6", "value": 115434268 } }, "fa0744333b1e4d77a79ab7cbda7e6560": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_5385aaef3990460ba257b3fe69fef405", "placeholder": "​", "style": "IPY_MODEL_3cdcf8f7e16744c1af988843b1e82cbb", "value": " 115M/115M [00:00<00:00, 208MB/s]" } }, "019230f515ac47c4bebdd52806522781": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "d1e0835521bd4bb1ac219a48517ede51": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "1e33f3e713db4a16854d112a300abba6": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "e5fd912e877f43bdb5f36bdcb02e5746": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "af2877ef640b44ce8c64d81643eb45f6": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "5385aaef3990460ba257b3fe69fef405": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "3cdcf8f7e16744c1af988843b1e82cbb": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "eb763cfcbeb847319c7eceafd66cf797": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_f450a562c3de430ab7f602950aa87a61", "IPY_MODEL_999f9087b6854340b5b056ba320661ab", "IPY_MODEL_e58d3c453d4d41938eb31faa2cb3e21f" ], "layout": "IPY_MODEL_4b0c27cfef774a0688f4dffec78045e8" } }, "f450a562c3de430ab7f602950aa87a61": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_294f0896b9c843b6a1ec7b91d6efc70b", "placeholder": "​", "style": "IPY_MODEL_fb8c41e328934974890343fd57f55c8a", "value": "model.safetensors: 100%" } }, "999f9087b6854340b5b056ba320661ab": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_38dbfc4b797f41588a63e5ddb2604c2b", "max": 46807446, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_8738fe8cc87b447aa069123081ac79e8", "value": 46807446 } }, "e58d3c453d4d41938eb31faa2cb3e21f": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "model_module_version": "1.5.0", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_9d697dd3981143399761d15ac8a81548", "placeholder": "​", "style": "IPY_MODEL_a8e571027ef74643a1848ea8fc63d320", "value": " 46.8M/46.8M [00:00<00:00, 208MB/s]" } }, "4b0c27cfef774a0688f4dffec78045e8": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "294f0896b9c843b6a1ec7b91d6efc70b": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "fb8c41e328934974890343fd57f55c8a": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "38dbfc4b797f41588a63e5ddb2604c2b": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "8738fe8cc87b447aa069123081ac79e8": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "9d697dd3981143399761d15ac8a81548": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "model_module_version": "1.2.0", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "a8e571027ef74643a1848ea8fc63d320": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "model_module_version": "1.5.0", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } } } } }, "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "r4TWGw7yf5XY", "outputId": "0817eede-c1d0-401e-faa7-6a97c08d19a9" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Reading package lists... Done\n", "Building dependency tree... Done\n", "Reading state information... Done\n", "tesseract-ocr is already the newest version (4.1.1-2.1build1).\n", "0 upgraded, 0 newly installed, 0 to remove and 45 not upgraded.\n", "Reading package lists... Done\n", "Building dependency tree... Done\n", "Reading state information... Done\n", "libtesseract-dev is already the newest version (4.1.1-2.1build1).\n", "0 upgraded, 0 newly installed, 0 to remove and 45 not upgraded.\n", "Reading package lists... Done\n", "Building dependency tree... Done\n", "Reading state information... Done\n", "poppler-utils is already the newest version (22.02.0-2ubuntu0.4).\n", "0 upgraded, 0 newly installed, 0 to remove and 45 not upgraded.\n" ] } ], "source": [ "!sudo apt install tesseract-ocr -y\n", "!sudo apt install libtesseract-dev -y\n", "!sudo apt-get install poppler-utils -y\n" ] }, { "cell_type": "code", "source": [ "!pip install langchain unstructured[all-docs] pydantic lxml openai chromadb tiktoken opencv-python" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "id": "dRxdsRvegMiA", "outputId": "8a376318-59c2-4d9f-ffe1-6be8b277b9dc" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting langchain\n", " Downloading langchain-0.2.5-py3-none-any.whl (974 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m974.6/974.6 kB\u001b[0m \u001b[31m10.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting unstructured[all-docs]\n", " Downloading unstructured-0.14.7-py3-none-any.whl (2.0 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.0/2.0 MB\u001b[0m \u001b[31m20.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: pydantic in /usr/local/lib/python3.10/dist-packages (2.7.4)\n", "Requirement already satisfied: lxml in /usr/local/lib/python3.10/dist-packages (4.9.4)\n", "Collecting openai\n", " Downloading openai-1.35.3-py3-none-any.whl (327 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m327.4/327.4 kB\u001b[0m \u001b[31m21.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting chromadb\n", " Downloading chromadb-0.5.3-py3-none-any.whl (559 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m559.5/559.5 kB\u001b[0m \u001b[31m24.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting tiktoken\n", " Downloading tiktoken-0.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.1/1.1 MB\u001b[0m \u001b[31m32.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: opencv-python in /usr/local/lib/python3.10/dist-packages (4.8.0.76)\n", "Requirement already satisfied: PyYAML>=5.3 in /usr/local/lib/python3.10/dist-packages (from langchain) (6.0.1)\n", "Requirement already satisfied: SQLAlchemy<3,>=1.4 in /usr/local/lib/python3.10/dist-packages (from langchain) (2.0.30)\n", "Requirement already satisfied: aiohttp<4.0.0,>=3.8.3 in /usr/local/lib/python3.10/dist-packages (from langchain) (3.9.5)\n", "Requirement already satisfied: async-timeout<5.0.0,>=4.0.0 in /usr/local/lib/python3.10/dist-packages (from langchain) (4.0.3)\n", "Collecting langchain-core<0.3.0,>=0.2.7 (from langchain)\n", " Downloading langchain_core-0.2.9-py3-none-any.whl (321 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m321.8/321.8 kB\u001b[0m \u001b[31m28.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting langchain-text-splitters<0.3.0,>=0.2.0 (from langchain)\n", " Downloading langchain_text_splitters-0.2.1-py3-none-any.whl (23 kB)\n", "Collecting langsmith<0.2.0,>=0.1.17 (from langchain)\n", " Downloading langsmith-0.1.81-py3-none-any.whl (127 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m127.1/127.1 kB\u001b[0m \u001b[31m21.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: numpy<2,>=1 in /usr/local/lib/python3.10/dist-packages (from langchain) (1.25.2)\n", "Requirement already satisfied: requests<3,>=2 in /usr/local/lib/python3.10/dist-packages (from langchain) (2.31.0)\n", "Requirement already satisfied: tenacity<9.0.0,>=8.1.0 in /usr/local/lib/python3.10/dist-packages (from langchain) (8.4.1)\n", "Requirement already satisfied: chardet in /usr/local/lib/python3.10/dist-packages (from unstructured[all-docs]) (5.2.0)\n", "Collecting filetype (from unstructured[all-docs])\n", " Downloading filetype-1.2.0-py2.py3-none-any.whl (19 kB)\n", "Collecting python-magic (from unstructured[all-docs])\n", " Downloading python_magic-0.4.27-py2.py3-none-any.whl (13 kB)\n", "Requirement already satisfied: nltk in /usr/local/lib/python3.10/dist-packages (from unstructured[all-docs]) (3.8.1)\n", "Requirement already satisfied: tabulate in /usr/local/lib/python3.10/dist-packages (from unstructured[all-docs]) (0.9.0)\n", "Requirement already satisfied: beautifulsoup4 in /usr/local/lib/python3.10/dist-packages (from unstructured[all-docs]) (4.12.3)\n", "Collecting emoji (from unstructured[all-docs])\n", " Downloading emoji-2.12.1-py3-none-any.whl (431 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m431.4/431.4 kB\u001b[0m \u001b[31m32.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting dataclasses-json (from unstructured[all-docs])\n", " Downloading dataclasses_json-0.6.7-py3-none-any.whl (28 kB)\n", "Collecting python-iso639 (from unstructured[all-docs])\n", " Downloading python_iso639-2024.4.27-py3-none-any.whl (274 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m274.7/274.7 kB\u001b[0m \u001b[31m31.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting langdetect (from unstructured[all-docs])\n", " Downloading langdetect-1.0.9.tar.gz (981 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m981.5/981.5 kB\u001b[0m \u001b[31m38.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", "Collecting rapidfuzz (from unstructured[all-docs])\n", " Downloading rapidfuzz-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.4/3.4 MB\u001b[0m \u001b[31m52.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting backoff (from unstructured[all-docs])\n", " Downloading backoff-2.2.1-py3-none-any.whl (15 kB)\n", "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.10/dist-packages (from unstructured[all-docs]) (4.12.2)\n", "Collecting unstructured-client (from unstructured[all-docs])\n", " Downloading unstructured_client-0.23.7-py3-none-any.whl (40 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m41.0/41.0 kB\u001b[0m \u001b[31m6.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: wrapt in /usr/local/lib/python3.10/dist-packages (from unstructured[all-docs]) (1.14.1)\n", "Requirement already satisfied: tqdm in /usr/local/lib/python3.10/dist-packages (from unstructured[all-docs]) (4.66.4)\n", "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from unstructured[all-docs]) (3.3)\n", "Collecting pillow-heif (from unstructured[all-docs])\n", " Downloading pillow_heif-0.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.5 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m7.5/7.5 MB\u001b[0m \u001b[31m78.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from unstructured[all-docs]) (2.0.3)\n", "Collecting python-pptx<=0.6.23 (from unstructured[all-docs])\n", " Downloading python_pptx-0.6.23-py3-none-any.whl (471 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m471.6/471.6 kB\u001b[0m \u001b[31m54.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting unstructured-inference==0.7.35 (from unstructured[all-docs])\n", " Downloading unstructured_inference-0.7.35-py3-none-any.whl (56 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.4/56.4 kB\u001b[0m \u001b[31m9.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting pypdf (from unstructured[all-docs])\n", " Downloading pypdf-4.2.0-py3-none-any.whl (290 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m290.4/290.4 kB\u001b[0m \u001b[31m39.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting pytesseract (from unstructured[all-docs])\n", " Downloading pytesseract-0.3.10-py3-none-any.whl (14 kB)\n", "Collecting onnx (from unstructured[all-docs])\n", " Downloading onnx-1.16.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (15.9 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m15.9/15.9 MB\u001b[0m \u001b[31m81.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting pdf2image (from unstructured[all-docs])\n", " Downloading pdf2image-1.17.0-py3-none-any.whl (11 kB)\n", "Collecting python-docx>=1.1.2 (from unstructured[all-docs])\n", " Downloading python_docx-1.1.2-py3-none-any.whl (244 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m244.3/244.3 kB\u001b[0m \u001b[31m37.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: openpyxl in /usr/local/lib/python3.10/dist-packages (from unstructured[all-docs]) (3.1.4)\n", "Collecting google-cloud-vision (from unstructured[all-docs])\n", " Downloading google_cloud_vision-3.7.2-py2.py3-none-any.whl (459 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m459.6/459.6 kB\u001b[0m \u001b[31m56.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting pypandoc (from unstructured[all-docs])\n", " Downloading pypandoc-1.13-py3-none-any.whl (21 kB)\n", "Collecting effdet (from unstructured[all-docs])\n", " Downloading effdet-0.4.1-py3-none-any.whl (112 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m112.5/112.5 kB\u001b[0m \u001b[31m18.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: xlrd in /usr/local/lib/python3.10/dist-packages (from unstructured[all-docs]) (2.0.1)\n", "Collecting pdfminer.six (from unstructured[all-docs])\n", " Downloading pdfminer.six-20231228-py3-none-any.whl (5.6 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m5.6/5.6 MB\u001b[0m \u001b[31m109.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting pikepdf (from unstructured[all-docs])\n", " Downloading pikepdf-9.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.4/2.4 MB\u001b[0m \u001b[31m76.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting unstructured.pytesseract>=0.3.12 (from unstructured[all-docs])\n", " Downloading unstructured.pytesseract-0.3.12-py3-none-any.whl (14 kB)\n", "Requirement already satisfied: markdown in /usr/local/lib/python3.10/dist-packages (from unstructured[all-docs]) (3.6)\n", "Collecting python-oxmsg (from unstructured[all-docs])\n", " Downloading python_oxmsg-0.0.1-py3-none-any.whl (31 kB)\n", "Collecting layoutparser (from unstructured-inference==0.7.35->unstructured[all-docs])\n", " Downloading layoutparser-0.3.4-py3-none-any.whl (19.2 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m19.2/19.2 MB\u001b[0m \u001b[31m53.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting python-multipart (from unstructured-inference==0.7.35->unstructured[all-docs])\n", " Downloading python_multipart-0.0.9-py3-none-any.whl (22 kB)\n", "Requirement already satisfied: huggingface-hub in /usr/local/lib/python3.10/dist-packages (from unstructured-inference==0.7.35->unstructured[all-docs]) (0.23.4)\n", "Collecting onnxruntime>=1.17.0 (from unstructured-inference==0.7.35->unstructured[all-docs])\n", " Downloading onnxruntime-1.18.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (6.8 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m6.8/6.8 MB\u001b[0m \u001b[31m76.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: matplotlib in /usr/local/lib/python3.10/dist-packages (from unstructured-inference==0.7.35->unstructured[all-docs]) (3.7.1)\n", "Requirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (from unstructured-inference==0.7.35->unstructured[all-docs]) (2.3.0+cu121)\n", "Collecting timm (from unstructured-inference==0.7.35->unstructured[all-docs])\n", " Downloading timm-1.0.7-py3-none-any.whl (2.3 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.3/2.3 MB\u001b[0m \u001b[31m74.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: transformers>=4.25.1 in /usr/local/lib/python3.10/dist-packages (from unstructured-inference==0.7.35->unstructured[all-docs]) (4.41.2)\n", "Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic) (0.7.0)\n", "Requirement already satisfied: pydantic-core==2.18.4 in /usr/local/lib/python3.10/dist-packages (from pydantic) (2.18.4)\n", "Requirement already satisfied: anyio<5,>=3.5.0 in /usr/local/lib/python3.10/dist-packages (from openai) (3.7.1)\n", "Requirement already satisfied: distro<2,>=1.7.0 in /usr/lib/python3/dist-packages (from openai) (1.7.0)\n", "Collecting httpx<1,>=0.23.0 (from openai)\n", " Downloading httpx-0.27.0-py3-none-any.whl (75 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m75.6/75.6 kB\u001b[0m \u001b[31m9.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: sniffio in /usr/local/lib/python3.10/dist-packages (from openai) (1.3.1)\n", "Requirement already satisfied: build>=1.0.3 in /usr/local/lib/python3.10/dist-packages (from chromadb) (1.2.1)\n", "Collecting chroma-hnswlib==0.7.3 (from chromadb)\n", " Downloading chroma_hnswlib-0.7.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.4/2.4 MB\u001b[0m \u001b[31m69.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting fastapi>=0.95.2 (from chromadb)\n", " Downloading fastapi-0.111.0-py3-none-any.whl (91 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m92.0/92.0 kB\u001b[0m \u001b[31m15.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting uvicorn[standard]>=0.18.3 (from chromadb)\n", " Downloading uvicorn-0.30.1-py3-none-any.whl (62 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m62.4/62.4 kB\u001b[0m \u001b[31m10.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting posthog>=2.4.0 (from chromadb)\n", " Downloading posthog-3.5.0-py2.py3-none-any.whl (41 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m41.3/41.3 kB\u001b[0m \u001b[31m6.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting opentelemetry-api>=1.2.0 (from chromadb)\n", " Downloading opentelemetry_api-1.25.0-py3-none-any.whl (59 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m59.9/59.9 kB\u001b[0m \u001b[31m10.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting opentelemetry-exporter-otlp-proto-grpc>=1.2.0 (from chromadb)\n", " Downloading opentelemetry_exporter_otlp_proto_grpc-1.25.0-py3-none-any.whl (18 kB)\n", "Collecting opentelemetry-instrumentation-fastapi>=0.41b0 (from chromadb)\n", " Downloading opentelemetry_instrumentation_fastapi-0.46b0-py3-none-any.whl (11 kB)\n", "Collecting opentelemetry-sdk>=1.2.0 (from chromadb)\n", " Downloading opentelemetry_sdk-1.25.0-py3-none-any.whl (107 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m107.0/107.0 kB\u001b[0m \u001b[31m19.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: tokenizers>=0.13.2 in /usr/local/lib/python3.10/dist-packages (from chromadb) (0.19.1)\n", "Collecting pypika>=0.48.9 (from chromadb)\n", " Downloading PyPika-0.48.9.tar.gz (67 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m67.3/67.3 kB\u001b[0m \u001b[31m2.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25h Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", "Collecting overrides>=7.3.1 (from chromadb)\n", " Downloading overrides-7.7.0-py3-none-any.whl (17 kB)\n", "Requirement already satisfied: importlib-resources in /usr/local/lib/python3.10/dist-packages (from chromadb) (6.4.0)\n", "Requirement already satisfied: grpcio>=1.58.0 in /usr/local/lib/python3.10/dist-packages (from chromadb) (1.64.1)\n", "Collecting bcrypt>=4.0.1 (from chromadb)\n", " Downloading bcrypt-4.1.3-cp39-abi3-manylinux_2_28_x86_64.whl (283 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m283.7/283.7 kB\u001b[0m \u001b[31m38.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: typer>=0.9.0 in /usr/local/lib/python3.10/dist-packages (from chromadb) (0.12.3)\n", "Collecting kubernetes>=28.1.0 (from chromadb)\n", " Downloading kubernetes-30.1.0-py2.py3-none-any.whl (1.7 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m99.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting mmh3>=4.0.1 (from chromadb)\n", " Downloading mmh3-4.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (67 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m67.6/67.6 kB\u001b[0m \u001b[31m10.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting orjson>=3.9.12 (from chromadb)\n", " Downloading orjson-3.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (144 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m145.0/145.0 kB\u001b[0m \u001b[31m17.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: regex>=2022.1.18 in /usr/local/lib/python3.10/dist-packages (from tiktoken) (2024.5.15)\n", "Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.3.1)\n", "Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (23.2.0)\n", "Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.4.1)\n", "Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (6.0.5)\n", "Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain) (1.9.4)\n", "Requirement already satisfied: idna>=2.8 in /usr/local/lib/python3.10/dist-packages (from anyio<5,>=3.5.0->openai) (3.7)\n", "Requirement already satisfied: exceptiongroup in /usr/local/lib/python3.10/dist-packages (from anyio<5,>=3.5.0->openai) (1.2.1)\n", "Requirement already satisfied: packaging>=19.1 in /usr/local/lib/python3.10/dist-packages (from build>=1.0.3->chromadb) (24.1)\n", "Requirement already satisfied: pyproject_hooks in /usr/local/lib/python3.10/dist-packages (from build>=1.0.3->chromadb) (1.1.0)\n", "Requirement already satisfied: tomli>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from build>=1.0.3->chromadb) (2.0.1)\n", "Collecting starlette<0.38.0,>=0.37.2 (from fastapi>=0.95.2->chromadb)\n", " Downloading starlette-0.37.2-py3-none-any.whl (71 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m71.9/71.9 kB\u001b[0m \u001b[31m9.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting fastapi-cli>=0.0.2 (from fastapi>=0.95.2->chromadb)\n", " Downloading fastapi_cli-0.0.4-py3-none-any.whl (9.5 kB)\n", "Requirement already satisfied: jinja2>=2.11.2 in /usr/local/lib/python3.10/dist-packages (from fastapi>=0.95.2->chromadb) (3.1.4)\n", "Collecting ujson!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,>=4.0.1 (from fastapi>=0.95.2->chromadb)\n", " Downloading ujson-5.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (53 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m53.6/53.6 kB\u001b[0m \u001b[31m8.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting email_validator>=2.0.0 (from fastapi>=0.95.2->chromadb)\n", " Downloading email_validator-2.2.0-py3-none-any.whl (33 kB)\n", "Requirement already satisfied: certifi in /usr/local/lib/python3.10/dist-packages (from httpx<1,>=0.23.0->openai) (2024.6.2)\n", "Collecting httpcore==1.* (from httpx<1,>=0.23.0->openai)\n", " Downloading httpcore-1.0.5-py3-none-any.whl (77 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m77.9/77.9 kB\u001b[0m \u001b[31m12.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting h11<0.15,>=0.13 (from httpcore==1.*->httpx<1,>=0.23.0->openai)\n", " Downloading h11-0.14.0-py3-none-any.whl (58 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m58.3/58.3 kB\u001b[0m \u001b[31m9.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.10/dist-packages (from kubernetes>=28.1.0->chromadb) (1.16.0)\n", "Requirement already satisfied: python-dateutil>=2.5.3 in /usr/local/lib/python3.10/dist-packages (from kubernetes>=28.1.0->chromadb) (2.8.2)\n", "Requirement already satisfied: google-auth>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from kubernetes>=28.1.0->chromadb) (2.27.0)\n", "Requirement already satisfied: websocket-client!=0.40.0,!=0.41.*,!=0.42.*,>=0.32.0 in /usr/local/lib/python3.10/dist-packages (from kubernetes>=28.1.0->chromadb) (1.8.0)\n", "Requirement already satisfied: requests-oauthlib in /usr/local/lib/python3.10/dist-packages (from kubernetes>=28.1.0->chromadb) (1.3.1)\n", "Requirement already satisfied: oauthlib>=3.2.2 in /usr/local/lib/python3.10/dist-packages (from kubernetes>=28.1.0->chromadb) (3.2.2)\n", "Requirement already satisfied: urllib3>=1.24.2 in /usr/local/lib/python3.10/dist-packages (from kubernetes>=28.1.0->chromadb) (2.0.7)\n", "Collecting jsonpatch<2.0,>=1.33 (from langchain-core<0.3.0,>=0.2.7->langchain)\n", " Downloading jsonpatch-1.33-py2.py3-none-any.whl (12 kB)\n", "Collecting coloredlogs (from onnxruntime>=1.17.0->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Downloading coloredlogs-15.0.1-py2.py3-none-any.whl (46 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m46.0/46.0 kB\u001b[0m \u001b[31m6.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: flatbuffers in /usr/local/lib/python3.10/dist-packages (from onnxruntime>=1.17.0->unstructured-inference==0.7.35->unstructured[all-docs]) (24.3.25)\n", "Requirement already satisfied: protobuf in /usr/local/lib/python3.10/dist-packages (from onnxruntime>=1.17.0->unstructured-inference==0.7.35->unstructured[all-docs]) (3.20.3)\n", "Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from onnxruntime>=1.17.0->unstructured-inference==0.7.35->unstructured[all-docs]) (1.12.1)\n", "Collecting deprecated>=1.2.6 (from opentelemetry-api>=1.2.0->chromadb)\n", " Downloading Deprecated-1.2.14-py2.py3-none-any.whl (9.6 kB)\n", "Requirement already satisfied: importlib-metadata<=7.1,>=6.0 in /usr/local/lib/python3.10/dist-packages (from opentelemetry-api>=1.2.0->chromadb) (7.1.0)\n", "Requirement already satisfied: googleapis-common-protos~=1.52 in /usr/local/lib/python3.10/dist-packages (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb) (1.63.1)\n", "Collecting opentelemetry-exporter-otlp-proto-common==1.25.0 (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb)\n", " Downloading opentelemetry_exporter_otlp_proto_common-1.25.0-py3-none-any.whl (17 kB)\n", "Collecting opentelemetry-proto==1.25.0 (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb)\n", " Downloading opentelemetry_proto-1.25.0-py3-none-any.whl (52 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m52.5/52.5 kB\u001b[0m \u001b[31m7.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting opentelemetry-instrumentation-asgi==0.46b0 (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb)\n", " Downloading opentelemetry_instrumentation_asgi-0.46b0-py3-none-any.whl (14 kB)\n", "Collecting opentelemetry-instrumentation==0.46b0 (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb)\n", " Downloading opentelemetry_instrumentation-0.46b0-py3-none-any.whl (29 kB)\n", "Collecting opentelemetry-semantic-conventions==0.46b0 (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb)\n", " Downloading opentelemetry_semantic_conventions-0.46b0-py3-none-any.whl (130 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m130.5/130.5 kB\u001b[0m \u001b[31m19.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting opentelemetry-util-http==0.46b0 (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb)\n", " Downloading opentelemetry_util_http-0.46b0-py3-none-any.whl (6.9 kB)\n", "Requirement already satisfied: setuptools>=16.0 in /usr/local/lib/python3.10/dist-packages (from opentelemetry-instrumentation==0.46b0->opentelemetry-instrumentation-fastapi>=0.41b0->chromadb) (67.7.2)\n", "Collecting asgiref~=3.0 (from opentelemetry-instrumentation-asgi==0.46b0->opentelemetry-instrumentation-fastapi>=0.41b0->chromadb)\n", " Downloading asgiref-3.8.1-py3-none-any.whl (23 kB)\n", "Collecting monotonic>=1.5 (from posthog>=2.4.0->chromadb)\n", " Downloading monotonic-1.6-py2.py3-none-any.whl (8.2 kB)\n", "Requirement already satisfied: Pillow>=3.3.2 in /usr/local/lib/python3.10/dist-packages (from python-pptx<=0.6.23->unstructured[all-docs]) (9.4.0)\n", "Collecting XlsxWriter>=0.5.7 (from python-pptx<=0.6.23->unstructured[all-docs])\n", " Downloading XlsxWriter-3.2.0-py3-none-any.whl (159 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m159.9/159.9 kB\u001b[0m \u001b[31m23.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2->langchain) (3.3.2)\n", "Requirement already satisfied: greenlet!=0.4.17 in /usr/local/lib/python3.10/dist-packages (from SQLAlchemy<3,>=1.4->langchain) (3.0.3)\n", "Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.9.0->chromadb) (8.1.7)\n", "Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.9.0->chromadb) (1.5.4)\n", "Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.10/dist-packages (from typer>=0.9.0->chromadb) (13.7.1)\n", "Collecting httptools>=0.5.0 (from uvicorn[standard]>=0.18.3->chromadb)\n", " Downloading httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (341 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m341.4/341.4 kB\u001b[0m \u001b[31m45.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting python-dotenv>=0.13 (from uvicorn[standard]>=0.18.3->chromadb)\n", " Downloading python_dotenv-1.0.1-py3-none-any.whl (19 kB)\n", "Collecting uvloop!=0.15.0,!=0.15.1,>=0.14.0 (from uvicorn[standard]>=0.18.3->chromadb)\n", " Downloading uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.4/3.4 MB\u001b[0m \u001b[31m108.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting watchfiles>=0.13 (from uvicorn[standard]>=0.18.3->chromadb)\n", " Downloading watchfiles-0.22.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.2/1.2 MB\u001b[0m \u001b[31m86.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting websockets>=10.4 (from uvicorn[standard]>=0.18.3->chromadb)\n", " Downloading websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (130 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m130.2/130.2 kB\u001b[0m \u001b[31m22.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: soupsieve>1.2 in /usr/local/lib/python3.10/dist-packages (from beautifulsoup4->unstructured[all-docs]) (2.5)\n", "Collecting marshmallow<4.0.0,>=3.18.0 (from dataclasses-json->unstructured[all-docs])\n", " Downloading marshmallow-3.21.3-py3-none-any.whl (49 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m49.2/49.2 kB\u001b[0m \u001b[31m8.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting typing-inspect<1,>=0.4.0 (from dataclasses-json->unstructured[all-docs])\n", " Downloading typing_inspect-0.9.0-py3-none-any.whl (8.8 kB)\n", "Requirement already satisfied: torchvision in /usr/local/lib/python3.10/dist-packages (from effdet->unstructured[all-docs]) (0.18.0+cu121)\n", "Requirement already satisfied: pycocotools>=2.0.2 in /usr/local/lib/python3.10/dist-packages (from effdet->unstructured[all-docs]) (2.0.8)\n", "Collecting omegaconf>=2.0 (from effdet->unstructured[all-docs])\n", " Downloading omegaconf-2.3.0-py3-none-any.whl (79 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m79.5/79.5 kB\u001b[0m \u001b[31m13.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.10.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<3.0.0dev,>=1.34.1 in /usr/local/lib/python3.10/dist-packages (from google-cloud-vision->unstructured[all-docs]) (2.11.1)\n", "Requirement already satisfied: proto-plus<2.0.0dev,>=1.22.3 in /usr/local/lib/python3.10/dist-packages (from google-cloud-vision->unstructured[all-docs]) (1.23.0)\n", "Requirement already satisfied: joblib in /usr/local/lib/python3.10/dist-packages (from nltk->unstructured[all-docs]) (1.4.2)\n", "Requirement already satisfied: et-xmlfile in /usr/local/lib/python3.10/dist-packages (from openpyxl->unstructured[all-docs]) (1.1.0)\n", "Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->unstructured[all-docs]) (2023.4)\n", "Requirement already satisfied: tzdata>=2022.1 in /usr/local/lib/python3.10/dist-packages (from pandas->unstructured[all-docs]) (2024.1)\n", "Requirement already satisfied: cryptography>=36.0.0 in /usr/local/lib/python3.10/dist-packages (from pdfminer.six->unstructured[all-docs]) (42.0.8)\n", "Collecting Pillow>=3.3.2 (from python-pptx<=0.6.23->unstructured[all-docs])\n", " Downloading pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl (4.5 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.5/4.5 MB\u001b[0m \u001b[31m114.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting olefile (from python-oxmsg->unstructured[all-docs])\n", " Downloading olefile-0.47-py2.py3-none-any.whl (114 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m114.6/114.6 kB\u001b[0m \u001b[31m18.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting deepdiff>=6.0 (from unstructured-client->unstructured[all-docs])\n", " Downloading deepdiff-7.0.1-py3-none-any.whl (80 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m80.8/80.8 kB\u001b[0m \u001b[31m13.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting jsonpath-python>=1.0.6 (from unstructured-client->unstructured[all-docs])\n", " Downloading jsonpath_python-1.0.6-py3-none-any.whl (7.6 kB)\n", "Collecting mypy-extensions>=1.0.0 (from unstructured-client->unstructured[all-docs])\n", " Downloading mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)\n", "Requirement already satisfied: nest-asyncio>=1.6.0 in /usr/local/lib/python3.10/dist-packages (from unstructured-client->unstructured[all-docs]) (1.6.0)\n", "Collecting requests-toolbelt>=1.0.0 (from unstructured-client->unstructured[all-docs])\n", " Downloading requests_toolbelt-1.0.0-py2.py3-none-any.whl (54 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m54.5/54.5 kB\u001b[0m \u001b[31m10.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: cffi>=1.12 in /usr/local/lib/python3.10/dist-packages (from cryptography>=36.0.0->pdfminer.six->unstructured[all-docs]) (1.16.0)\n", "Collecting ordered-set<4.2.0,>=4.1.0 (from deepdiff>=6.0->unstructured-client->unstructured[all-docs])\n", " Downloading ordered_set-4.1.0-py3-none-any.whl (7.6 kB)\n", "Collecting dnspython>=2.0.0 (from email_validator>=2.0.0->fastapi>=0.95.2->chromadb)\n", " Downloading dnspython-2.6.1-py3-none-any.whl (307 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m307.7/307.7 kB\u001b[0m \u001b[31m41.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: grpcio-status<2.0.dev0,>=1.33.2 in /usr/local/lib/python3.10/dist-packages (from google-api-core[grpc]!=2.0.*,!=2.1.*,!=2.10.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,<3.0.0dev,>=1.34.1->google-cloud-vision->unstructured[all-docs]) (1.48.2)\n", "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (5.3.3)\n", "Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (0.4.0)\n", "Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.10/dist-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (4.9)\n", "Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from huggingface-hub->unstructured-inference==0.7.35->unstructured[all-docs]) (3.15.1)\n", "Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub->unstructured-inference==0.7.35->unstructured[all-docs]) (2023.6.0)\n", "Requirement already satisfied: zipp>=0.5 in /usr/local/lib/python3.10/dist-packages (from importlib-metadata<=7.1,>=6.0->opentelemetry-api>=1.2.0->chromadb) (3.19.2)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2>=2.11.2->fastapi>=0.95.2->chromadb) (2.1.5)\n", "Collecting jsonpointer>=1.9 (from jsonpatch<2.0,>=1.33->langchain-core<0.3.0,>=0.2.7->langchain)\n", " Downloading jsonpointer-3.0.0-py2.py3-none-any.whl (7.6 kB)\n", "Collecting antlr4-python3-runtime==4.9.* (from omegaconf>=2.0->effdet->unstructured[all-docs])\n", " Downloading antlr4-python3-runtime-4.9.3.tar.gz (117 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m117.0/117.0 kB\u001b[0m \u001b[31m20.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", "Requirement already satisfied: contourpy>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->unstructured-inference==0.7.35->unstructured[all-docs]) (1.2.1)\n", "Requirement already satisfied: cycler>=0.10 in /usr/local/lib/python3.10/dist-packages (from matplotlib->unstructured-inference==0.7.35->unstructured[all-docs]) (0.12.1)\n", "Requirement already satisfied: fonttools>=4.22.0 in /usr/local/lib/python3.10/dist-packages (from matplotlib->unstructured-inference==0.7.35->unstructured[all-docs]) (4.53.0)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->unstructured-inference==0.7.35->unstructured[all-docs]) (1.4.5)\n", "Requirement already satisfied: pyparsing>=2.3.1 in /usr/local/lib/python3.10/dist-packages (from matplotlib->unstructured-inference==0.7.35->unstructured[all-docs]) (3.1.2)\n", "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.9.0->chromadb) (3.0.0)\n", "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from rich>=10.11.0->typer>=0.9.0->chromadb) (2.16.1)\n", "Requirement already satisfied: safetensors in /usr/local/lib/python3.10/dist-packages (from timm->unstructured-inference==0.7.35->unstructured[all-docs]) (0.4.3)\n", "Collecting nvidia-cuda-nvrtc-cu12==12.1.105 (from torch->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Using cached nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (23.7 MB)\n", "Collecting nvidia-cuda-runtime-cu12==12.1.105 (from torch->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Using cached nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (823 kB)\n", "Collecting nvidia-cuda-cupti-cu12==12.1.105 (from torch->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Using cached nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (14.1 MB)\n", "Collecting nvidia-cudnn-cu12==8.9.2.26 (from torch->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Using cached nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl (731.7 MB)\n", "Collecting nvidia-cublas-cu12==12.1.3.1 (from torch->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Using cached nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl (410.6 MB)\n", "Collecting nvidia-cufft-cu12==11.0.2.54 (from torch->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Using cached nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl (121.6 MB)\n", "Collecting nvidia-curand-cu12==10.3.2.106 (from torch->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Using cached nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl (56.5 MB)\n", "Collecting nvidia-cusolver-cu12==11.4.5.107 (from torch->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Using cached nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl (124.2 MB)\n", "Collecting nvidia-cusparse-cu12==12.1.0.106 (from torch->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Using cached nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl (196.0 MB)\n", "Collecting nvidia-nccl-cu12==2.20.5 (from torch->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Using cached nvidia_nccl_cu12-2.20.5-py3-none-manylinux2014_x86_64.whl (176.2 MB)\n", "Collecting nvidia-nvtx-cu12==12.1.105 (from torch->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Using cached nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (99 kB)\n", "Requirement already satisfied: triton==2.3.0 in /usr/local/lib/python3.10/dist-packages (from torch->unstructured-inference==0.7.35->unstructured[all-docs]) (2.3.0)\n", "Collecting nvidia-nvjitlink-cu12 (from nvidia-cusolver-cu12==11.4.5.107->torch->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Downloading nvidia_nvjitlink_cu12-12.5.40-py3-none-manylinux2014_x86_64.whl (21.3 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.3/21.3 MB\u001b[0m \u001b[31m73.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCollecting humanfriendly>=9.1 (from coloredlogs->onnxruntime>=1.17.0->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Downloading humanfriendly-10.0-py2.py3-none-any.whl (86 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m86.8/86.8 kB\u001b[0m \u001b[31m13.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: scipy in /usr/local/lib/python3.10/dist-packages (from layoutparser->unstructured-inference==0.7.35->unstructured[all-docs]) (1.11.4)\n", "Collecting iopath (from layoutparser->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Downloading iopath-0.1.10.tar.gz (42 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m42.2/42.2 kB\u001b[0m \u001b[31m6.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n", "Collecting pdfplumber (from layoutparser->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Downloading pdfplumber-0.11.1-py3-none-any.whl (57 kB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m57.9/57.9 kB\u001b[0m \u001b[31m8.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: mpmath<1.4.0,>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from sympy->onnxruntime>=1.17.0->unstructured-inference==0.7.35->unstructured[all-docs]) (1.3.0)\n", "Requirement already satisfied: pycparser in /usr/local/lib/python3.10/dist-packages (from cffi>=1.12->cryptography>=36.0.0->pdfminer.six->unstructured[all-docs]) (2.22)\n", "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.10/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer>=0.9.0->chromadb) (0.1.2)\n", "Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in /usr/local/lib/python3.10/dist-packages (from pyasn1-modules>=0.2.1->google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (0.6.0)\n", "Collecting portalocker (from iopath->layoutparser->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Downloading portalocker-2.8.2-py3-none-any.whl (17 kB)\n", "Collecting pypdfium2>=4.18.0 (from pdfplumber->layoutparser->unstructured-inference==0.7.35->unstructured[all-docs])\n", " Downloading pypdfium2-4.30.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.8/2.8 MB\u001b[0m \u001b[31m93.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hBuilding wheels for collected packages: pypika, langdetect, antlr4-python3-runtime, iopath\n", " Building wheel for pypika (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for pypika: filename=PyPika-0.48.9-py2.py3-none-any.whl size=53725 sha256=f2d1105292fe2ed6f61d58168f776d64b96155a708ee583afa3348bebcd88c0f\n", " Stored in directory: /root/.cache/pip/wheels/e1/26/51/d0bffb3d2fd82256676d7ad3003faea3bd6dddc9577af665f4\n", " Building wheel for langdetect (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for langdetect: filename=langdetect-1.0.9-py3-none-any.whl size=993227 sha256=cfcedafbf63a225391d96a74627738a54415eb43e8b89d52a99fa118e836e422\n", " Stored in directory: /root/.cache/pip/wheels/95/03/7d/59ea870c70ce4e5a370638b5462a7711ab78fba2f655d05106\n", " Building wheel for antlr4-python3-runtime (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for antlr4-python3-runtime: filename=antlr4_python3_runtime-4.9.3-py3-none-any.whl size=144554 sha256=ba9a3ccad39f7bd57fe042cfd1f32d539e2d4a9691bd371a3549f0bbfb7c6644\n", " Stored in directory: /root/.cache/pip/wheels/12/93/dd/1f6a127edc45659556564c5730f6d4e300888f4bca2d4c5a88\n", " Building wheel for iopath (setup.py) ... \u001b[?25l\u001b[?25hdone\n", " Created wheel for iopath: filename=iopath-0.1.10-py3-none-any.whl size=31532 sha256=9a5b4d114ac36bb111af03542a59f4c7f8ab719f28b4163b1729bfc2743f76d5\n", " Stored in directory: /root/.cache/pip/wheels/9a/a3/b6/ac0fcd1b4ed5cfeb3db92e6a0e476cfd48ed0df92b91080c1d\n", "Successfully built pypika langdetect antlr4-python3-runtime iopath\n", "Installing collected packages: pypika, monotonic, mmh3, filetype, antlr4-python3-runtime, XlsxWriter, websockets, uvloop, ujson, rapidfuzz, python-multipart, python-magic, python-iso639, python-dotenv, python-docx, pypdfium2, pypdf, pypandoc, portalocker, Pillow, overrides, orjson, ordered-set, opentelemetry-util-http, opentelemetry-proto, onnx, omegaconf, olefile, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, mypy-extensions, marshmallow, langdetect, jsonpointer, jsonpath-python, humanfriendly, httptools, h11, emoji, dnspython, deprecated, chroma-hnswlib, bcrypt, backoff, asgiref, watchfiles, uvicorn, unstructured.pytesseract, typing-inspect, tiktoken, starlette, requests-toolbelt, python-pptx, python-oxmsg, pytesseract, posthog, pillow-heif, pikepdf, pdf2image, opentelemetry-exporter-otlp-proto-common, opentelemetry-api, nvidia-cusparse-cu12, nvidia-cudnn-cu12, jsonpatch, iopath, httpcore, email_validator, deepdiff, coloredlogs, pdfminer.six, opentelemetry-semantic-conventions, opentelemetry-instrumentation, onnxruntime, nvidia-cusolver-cu12, langsmith, kubernetes, httpx, dataclasses-json, unstructured-client, pdfplumber, opentelemetry-sdk, opentelemetry-instrumentation-asgi, openai, langchain-core, fastapi-cli, unstructured, opentelemetry-instrumentation-fastapi, opentelemetry-exporter-otlp-proto-grpc, layoutparser, langchain-text-splitters, google-cloud-vision, fastapi, timm, langchain, chromadb, unstructured-inference, effdet\n", " Attempting uninstall: Pillow\n", " Found existing installation: Pillow 9.4.0\n", " Uninstalling Pillow-9.4.0:\n", " Successfully uninstalled Pillow-9.4.0\n", "\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", "imageio 2.31.6 requires pillow<10.1.0,>=8.3.2, but you have pillow 10.3.0 which is incompatible.\u001b[0m\u001b[31m\n", "\u001b[0mSuccessfully installed Pillow-10.3.0 XlsxWriter-3.2.0 antlr4-python3-runtime-4.9.3 asgiref-3.8.1 backoff-2.2.1 bcrypt-4.1.3 chroma-hnswlib-0.7.3 chromadb-0.5.3 coloredlogs-15.0.1 dataclasses-json-0.6.7 deepdiff-7.0.1 deprecated-1.2.14 dnspython-2.6.1 effdet-0.4.1 email_validator-2.2.0 emoji-2.12.1 fastapi-0.111.0 fastapi-cli-0.0.4 filetype-1.2.0 google-cloud-vision-3.7.2 h11-0.14.0 httpcore-1.0.5 httptools-0.6.1 httpx-0.27.0 humanfriendly-10.0 iopath-0.1.10 jsonpatch-1.33 jsonpath-python-1.0.6 jsonpointer-3.0.0 kubernetes-30.1.0 langchain-0.2.5 langchain-core-0.2.9 langchain-text-splitters-0.2.1 langdetect-1.0.9 langsmith-0.1.81 layoutparser-0.3.4 marshmallow-3.21.3 mmh3-4.1.0 monotonic-1.6 mypy-extensions-1.0.0 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.20.5 nvidia-nvjitlink-cu12-12.5.40 nvidia-nvtx-cu12-12.1.105 olefile-0.47 omegaconf-2.3.0 onnx-1.16.1 onnxruntime-1.18.0 openai-1.35.3 opentelemetry-api-1.25.0 opentelemetry-exporter-otlp-proto-common-1.25.0 opentelemetry-exporter-otlp-proto-grpc-1.25.0 opentelemetry-instrumentation-0.46b0 opentelemetry-instrumentation-asgi-0.46b0 opentelemetry-instrumentation-fastapi-0.46b0 opentelemetry-proto-1.25.0 opentelemetry-sdk-1.25.0 opentelemetry-semantic-conventions-0.46b0 opentelemetry-util-http-0.46b0 ordered-set-4.1.0 orjson-3.10.5 overrides-7.7.0 pdf2image-1.17.0 pdfminer.six-20231228 pdfplumber-0.11.1 pikepdf-9.0.0 pillow-heif-0.16.0 portalocker-2.8.2 posthog-3.5.0 pypandoc-1.13 pypdf-4.2.0 pypdfium2-4.30.0 pypika-0.48.9 pytesseract-0.3.10 python-docx-1.1.2 python-dotenv-1.0.1 python-iso639-2024.4.27 python-magic-0.4.27 python-multipart-0.0.9 python-oxmsg-0.0.1 python-pptx-0.6.23 rapidfuzz-3.9.3 requests-toolbelt-1.0.0 starlette-0.37.2 tiktoken-0.7.0 timm-1.0.7 typing-inspect-0.9.0 ujson-5.10.0 unstructured-0.14.7 unstructured-client-0.23.7 unstructured-inference-0.7.35 unstructured.pytesseract-0.3.12 uvicorn-0.30.1 uvloop-0.19.0 watchfiles-0.22.0 websockets-12.0\n" ] }, { "output_type": "display_data", "data": { "application/vnd.colab-display-data+json": { "pip_warning": { "packages": [ "PIL", "google", "pydevd_plugins" ] }, "id": "2792af1a1a814a5a9eda5ec8e6e54769" } }, "metadata": {} } ] }, { "cell_type": "code", "source": [ "!pip install langchain-community\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "USxGblR1hScN", "outputId": "b0bc0663-711c-4c1c-8a5e-b4e4e3aed504" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting langchain-community\n", " Downloading langchain_community-0.2.5-py3-none-any.whl (2.2 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.2/2.2 MB\u001b[0m \u001b[31m13.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: PyYAML>=5.3 in /usr/local/lib/python3.10/dist-packages (from langchain-community) (6.0.1)\n", "Requirement already satisfied: SQLAlchemy<3,>=1.4 in /usr/local/lib/python3.10/dist-packages (from langchain-community) (2.0.30)\n", "Requirement already satisfied: aiohttp<4.0.0,>=3.8.3 in /usr/local/lib/python3.10/dist-packages (from langchain-community) (3.9.5)\n", "Requirement already satisfied: dataclasses-json<0.7,>=0.5.7 in /usr/local/lib/python3.10/dist-packages (from langchain-community) (0.6.7)\n", "Requirement already satisfied: langchain<0.3.0,>=0.2.5 in /usr/local/lib/python3.10/dist-packages (from langchain-community) (0.2.5)\n", "Requirement already satisfied: langchain-core<0.3.0,>=0.2.7 in /usr/local/lib/python3.10/dist-packages (from langchain-community) (0.2.9)\n", "Requirement already satisfied: langsmith<0.2.0,>=0.1.0 in /usr/local/lib/python3.10/dist-packages (from langchain-community) (0.1.81)\n", "Requirement already satisfied: numpy<2,>=1 in /usr/local/lib/python3.10/dist-packages (from langchain-community) (1.25.2)\n", "Requirement already satisfied: requests<3,>=2 in /usr/local/lib/python3.10/dist-packages (from langchain-community) (2.31.0)\n", "Requirement already satisfied: tenacity<9.0.0,>=8.1.0 in /usr/local/lib/python3.10/dist-packages (from langchain-community) (8.4.1)\n", "Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community) (1.3.1)\n", "Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community) (23.2.0)\n", "Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community) (1.4.1)\n", "Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community) (6.0.5)\n", "Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community) (1.9.4)\n", "Requirement already satisfied: async-timeout<5.0,>=4.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain-community) (4.0.3)\n", "Requirement already satisfied: marshmallow<4.0.0,>=3.18.0 in /usr/local/lib/python3.10/dist-packages (from dataclasses-json<0.7,>=0.5.7->langchain-community) (3.21.3)\n", "Requirement already satisfied: typing-inspect<1,>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from dataclasses-json<0.7,>=0.5.7->langchain-community) (0.9.0)\n", "Requirement already satisfied: langchain-text-splitters<0.3.0,>=0.2.0 in /usr/local/lib/python3.10/dist-packages (from langchain<0.3.0,>=0.2.5->langchain-community) (0.2.1)\n", "Requirement already satisfied: pydantic<3,>=1 in /usr/local/lib/python3.10/dist-packages (from langchain<0.3.0,>=0.2.5->langchain-community) (2.7.4)\n", "Requirement already satisfied: jsonpatch<2.0,>=1.33 in /usr/local/lib/python3.10/dist-packages (from langchain-core<0.3.0,>=0.2.7->langchain-community) (1.33)\n", "Requirement already satisfied: packaging<25,>=23.2 in /usr/local/lib/python3.10/dist-packages (from langchain-core<0.3.0,>=0.2.7->langchain-community) (24.1)\n", "Requirement already satisfied: orjson<4.0.0,>=3.9.14 in /usr/local/lib/python3.10/dist-packages (from langsmith<0.2.0,>=0.1.0->langchain-community) (3.10.5)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2->langchain-community) (3.3.2)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2->langchain-community) (3.7)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2->langchain-community) (2.0.7)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests<3,>=2->langchain-community) (2024.6.2)\n", "Requirement already satisfied: typing-extensions>=4.6.0 in /usr/local/lib/python3.10/dist-packages (from SQLAlchemy<3,>=1.4->langchain-community) (4.12.2)\n", "Requirement already satisfied: greenlet!=0.4.17 in /usr/local/lib/python3.10/dist-packages (from SQLAlchemy<3,>=1.4->langchain-community) (3.0.3)\n", "Requirement already satisfied: jsonpointer>=1.9 in /usr/local/lib/python3.10/dist-packages (from jsonpatch<2.0,>=1.33->langchain-core<0.3.0,>=0.2.7->langchain-community) (3.0.0)\n", "Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic<3,>=1->langchain<0.3.0,>=0.2.5->langchain-community) (0.7.0)\n", "Requirement already satisfied: pydantic-core==2.18.4 in /usr/local/lib/python3.10/dist-packages (from pydantic<3,>=1->langchain<0.3.0,>=0.2.5->langchain-community) (2.18.4)\n", "Requirement already satisfied: mypy-extensions>=0.3.0 in /usr/local/lib/python3.10/dist-packages (from typing-inspect<1,>=0.4.0->dataclasses-json<0.7,>=0.5.7->langchain-community) (1.0.0)\n", "Installing collected packages: langchain-community\n", "Successfully installed langchain-community-0.2.5\n" ] } ] }, { "cell_type": "code", "source": [ "import os\n", "import uuid\n", "import base64\n", "from IPython import display\n", "from unstructured.partition.pdf import partition_pdf\n", "from langchain.chat_models import ChatOpenAI\n", "from langchain.embeddings import OpenAIEmbeddings\n", "from langchain.chains import LLMChain\n", "from langchain.prompts import PromptTemplate\n", "from langchain.schema.messages import HumanMessage, SystemMessage\n", "from langchain.schema.document import Document\n", "from langchain.vectorstores import FAISS\n", "from langchain.retrievers.multi_vector import MultiVectorRetriever" ], "metadata": { "id": "Ekq9fFeSf-RF" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "from google.colab import userdata\n", "openai_api_key = userdata.get('openapikey')" ], "metadata": { "id": "HNY711ajiP6X" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "output_path = \"./images\"\n" ], "metadata": { "id": "JeWaJcljig8A" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Get elements\n", "raw_pdf_elements = partition_pdf(\n", " filename=\"/content/AC-Aids-for-Dogs_Canine-Periodontal-Disease (1).pdf\",\n", " extract_images_in_pdf=True,\n", " infer_table_structure=True,\n", " chunking_strategy=\"by_title\",\n", " max_characters=4000,\n", " new_after_n_chars=3800,\n", " combine_text_under_n_chars=2000,\n", " extract_image_block_output_dir=output_path,\n", ")\n" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 272, "referenced_widgets": [ "8ee0da8eb27849668600fd85930ae7a9", "504cac430649408691c165f34952f8e6", "77e946eacfee4bcd981b93232034a441", "1acfb7e91605426aa0474885966ea5dd", "5a182f55d9304ed4b538ea01c73d1620", "3baf0c9fb1434ba586c1493d5ba318a4", "1d0cf796294b46dda89b3c99b17b8a9a", "95cf1226b8924c09be8d9e5e94e8e0ca", "b43802a8e315424b918f65bc59bbb326", "fb588cd8572d407893392af85be2d12d", "ef12e3224aa9410fa5f60aba38985e5e", "ba8c54822b9343c2918b4040b87d1d05", "3777e97887ab4aeaa18ed4545e4da145", "358c3da63fd844bcb61620cee99b079d", "fa0744333b1e4d77a79ab7cbda7e6560", "019230f515ac47c4bebdd52806522781", "d1e0835521bd4bb1ac219a48517ede51", "1e33f3e713db4a16854d112a300abba6", "e5fd912e877f43bdb5f36bdcb02e5746", "af2877ef640b44ce8c64d81643eb45f6", "5385aaef3990460ba257b3fe69fef405", "3cdcf8f7e16744c1af988843b1e82cbb", "eb763cfcbeb847319c7eceafd66cf797", "f450a562c3de430ab7f602950aa87a61", "999f9087b6854340b5b056ba320661ab", "e58d3c453d4d41938eb31faa2cb3e21f", "4b0c27cfef774a0688f4dffec78045e8", "294f0896b9c843b6a1ec7b91d6efc70b", "fb8c41e328934974890343fd57f55c8a", "38dbfc4b797f41588a63e5ddb2604c2b", "8738fe8cc87b447aa069123081ac79e8", "9d697dd3981143399761d15ac8a81548", "a8e571027ef74643a1848ea8fc63d320" ] }, "id": "k5Tx7BbAiZcf", "outputId": "ffebf1f0-e4f8-481a-e71e-548e6ab55f5f" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "config.json: 0%| | 0.00/1.47k [00:00=0.23.0 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.23.4)\n", "Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (1.25.2)\n", "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers) (24.1)\n", "Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (6.0.1)\n", "Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (2024.5.15)\n", "Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers) (2.31.0)\n", "Requirement already satisfied: tokenizers<0.20,>=0.19 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.19.1)\n", "Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.4.3)\n", "Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers) (4.66.4)\n", "Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch) (4.12.2)\n", "Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch) (1.12.1)\n", "Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch) (3.3)\n", "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch) (3.1.4)\n", "Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch) (2023.6.0)\n", "Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n", "Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n", "Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n", "Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /usr/local/lib/python3.10/dist-packages (from torch) (8.9.2.26)\n", "Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.3.1)\n", "Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /usr/local/lib/python3.10/dist-packages (from torch) (11.0.2.54)\n", "Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /usr/local/lib/python3.10/dist-packages (from torch) (10.3.2.106)\n", "Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /usr/local/lib/python3.10/dist-packages (from torch) (11.4.5.107)\n", "Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.0.106)\n", "Requirement already satisfied: nvidia-nccl-cu12==2.20.5 in /usr/local/lib/python3.10/dist-packages (from torch) (2.20.5)\n", "Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n", "Requirement already satisfied: triton==2.3.0 in /usr/local/lib/python3.10/dist-packages (from torch) (2.3.0)\n", "Requirement already satisfied: nvidia-nvjitlink-cu12 in /usr/local/lib/python3.10/dist-packages (from nvidia-cusolver-cu12==11.4.5.107->torch) (12.5.40)\n", "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch) (2.1.5)\n", "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.3.2)\n", "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.7)\n", "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2.0.7)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2024.6.2)\n", "Requirement already satisfied: mpmath<1.4.0,>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from sympy->torch) (1.3.0)\n" ] } ] }, { "cell_type": "code", "source": [ "# Get image summaries\n", "image_elements = []\n", "image_summaries = []\n", "\n", "def encode_image(image_path):\n", " with open(image_path, \"rb\") as f:\n", " return base64.b64encode(f.read()).decode('utf-8')\n", "\n", "def summarize_image(encoded_image):\n", " prompt = [\n", " SystemMessage(content=\"You are a bot that is good at analyzing images related to Dog's health.\"),\n", " HumanMessage(content=[\n", " {\n", " \"type\": \"text\",\n", " \"text\": \"Describe the contents of this image.\"\n", " },\n", " {\n", " \"type\": \"image_url\",\n", " \"image_url\": {\n", " \"url\": f\"data:image/jpeg;base64,{encoded_image}\"\n", " },\n", " },\n", " ])\n", " ]\n", " response = ChatOpenAI(model=\"gpt-4o\", openai_api_key=openai_api_key, max_tokens=1024).invoke(prompt)\n", " return response.content\n", "\n", "for i in os.listdir(output_path):\n", " if i.endswith(('.png', '.jpg', '.jpeg')):\n", " image_path = os.path.join(output_path, i)\n", " encoded_image = encode_image(image_path)\n", " image_elements.append(encoded_image)\n", " summary = summarize_image(encoded_image)\n", " image_summaries.append(summary)\n" ], "metadata": { "id": "J7_jttofQlap" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "!pip install faiss-cpu" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "gRp0W-QAp0e5", "outputId": "546dac01-4f22-45eb-8189-acc855ebca9f" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Collecting faiss-cpu\n", " Downloading faiss_cpu-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (27.0 MB)\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m27.0/27.0 MB\u001b[0m \u001b[31m46.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.10/dist-packages (from faiss-cpu) (1.25.2)\n", "Installing collected packages: faiss-cpu\n", "Successfully installed faiss-cpu-1.8.0\n" ] } ] }, { "cell_type": "code", "source": [ "\n", "# Create Documents and Vectorstore\n", "documents = []\n", "retrieve_contents = []\n", "\n", "for e, s in zip(text_elements, text_summaries):\n", " i = str(uuid.uuid4())\n", " doc = Document(\n", " page_content = s,\n", " metadata = {\n", " 'id': i,\n", " 'type': 'text',\n", " 'original_content': e\n", " }\n", " )\n", " retrieve_contents.append((i, e))\n", " documents.append(doc)\n", "\n", "for e, s in zip(table_elements, table_summaries):\n", " doc = Document(\n", " page_content = s,\n", " metadata = {\n", " 'id': i,\n", " 'type': 'table',\n", " 'original_content': e\n", " }\n", " )\n", " retrieve_contents.append((i, e))\n", " documents.append(doc)\n", "\n", "for e, s in zip(image_elements, image_summaries):\n", " doc = Document(\n", " page_content = s,\n", " metadata = {\n", " 'id': i,\n", " 'type': 'image',\n", " 'original_content': e\n", " }\n", " )\n", " retrieve_contents.append((i, s))\n", " documents.append(doc)\n", "\n", "vectorstore = FAISS.from_documents(documents=documents, embedding=OpenAIEmbeddings(openai_api_key=openai_api_key))" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "1CSGuXB0qLr6", "outputId": "858c7959-08b9-408c-e12d-9f93fea1b696" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "/usr/local/lib/python3.10/dist-packages/langchain_core/_api/deprecation.py:139: LangChainDeprecationWarning: The class `OpenAIEmbeddings` was deprecated in LangChain 0.0.9 and will be removed in 0.3.0. An updated version of the class exists in the langchain-openai package and should be used instead. To use it run `pip install -U langchain-openai` and import as `from langchain_openai import OpenAIEmbeddings`.\n", " warn_deprecated(\n" ] } ] }, { "cell_type": "code", "source": [ "vectorstore.save_local(\"faiss_index\")" ], "metadata": { "id": "knuEyEuEqWCX" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)" ], "metadata": { "id": "mo02V-9iqaCk" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "db = FAISS.load_local(\"faiss_index\", embeddings, allow_dangerous_deserialization=True)" ], "metadata": { "id": "-0gXkQfeqdXl" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "prompt_template = \"\"\"\n", "You are a vet doctor and an expert in analyzing dog's health.\n", "Answer the question based only on the following context, which can include text, images and tables:\n", "{context}\n", "Question: {question}\n", "Don't answer if you are not sure and decline to answer and say \"Sorry, I don't have much information about it.\"\n", "Just return the helpful answer in as much as detailed possible.\n", "Answer:\n", "\"\"\"" ], "metadata": { "id": "KE8NxwZGqghn" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "qa_chain = LLMChain(llm=ChatOpenAI(model=\"gpt-4o\", openai_api_key = openai_api_key, max_tokens=1024),\n", " prompt=PromptTemplate.from_template(prompt_template))" ], "metadata": { "id": "whZy4wEsq0qL" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "def answer(question):\n", " relevant_docs = vectorstore.similarity_search(question)\n", " context = \"\"\n", " relevant_images = []\n", " for d in relevant_docs:\n", " if d.metadata['type'] == 'text':\n", " context += '[text]' + d.metadata['original_content']\n", " elif d.metadata['type'] == 'table':\n", " context += '[table]' + d.metadata['original_content']\n", " elif d.metadata['type'] == 'image':\n", " context += '[image]' + d.page_content\n", " relevant_images.append(d.metadata['original_content'])\n", " result = qa_chain.run({'context': context, 'question': question})\n", " return result, relevant_images\n" ], "metadata": { "id": "kXaHAJ6Ce33l" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "result, relevant_images = answer(\"What is Gingivitis?\")\n", "print(result)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "yEjX2vJ4q-N8", "outputId": "82fa8d21-7b3d-4010-d7b8-40e75f9d99a9" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Gingivitis is a condition characterized by inflammation of the gums. It is often caused by the accumulation of plaque and tartar on the teeth, which can harbor bacteria. These bacteria can irritate the gums, leading to redness, swelling, and sometimes bleeding, particularly during brushing or chewing. If left untreated, gingivitis can progress to more severe forms of periodontal disease, which can cause significant dental issues and may lead to tooth loss. In dogs, signs of gingivitis include red, swollen gums, bad breath, and visible tartar buildup on the teeth. Prompt veterinary attention is recommended to address gingivitis and prevent its progression. Treatment typically involves professional dental cleaning and may include medications to reduce inflammation and control infection. Regular dental care and good oral hygiene practices are crucial in preventing gingivitis and maintaining overall dental health in dogs.\n" ] } ] }, { "cell_type": "code", "source": [ "relevant_images[0]" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 174 }, "id": "WsdgCJ81rKKc", "outputId": "6f5a2c72-a29e-4ffb-f40c-23c349f22c8b" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "'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'" ], "application/vnd.google.colaboratory.intrinsic+json": { "type": "string" } }, "metadata": {}, "execution_count": 30 } ] }, { "cell_type": "code", "source": [ "display.display(display.Image(base64.b64decode(relevant_images[0])))" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 292 }, "id": "NEjhnJD7e8gM", "outputId": "aa875244-42c5-4617-8de2-f647297cfd5a" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "image/jpeg": "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\n", "text/plain": [ "" ] }, "metadata": {} } ] } ] }