{ "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": { "70b16806ed5b4538b5b817fe56e0a0e1": { "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_5dd2db7a2b6a40909db1a0baee40af61", "IPY_MODEL_33ec729f66cf4abcb6854aba79ae8f3a", "IPY_MODEL_5b22d90b0c0d4102a081cee4f99e1593" ], "layout": "IPY_MODEL_722bc43527d041648b630e6b91c35422" } }, "5dd2db7a2b6a40909db1a0baee40af61": { "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_f5a3afab7a20438dbef5527ddbe94594", "placeholder": "​", "style": "IPY_MODEL_595a8dc9a7584703ab777ef7d8de9c2c", "value": "model.safetensors: 100%" } }, "33ec729f66cf4abcb6854aba79ae8f3a": { "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_8d14f9cb936c4fb3ad9536c2e8061d21", "max": 2355738764, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_63680af05a0a4703ab768e7b14582b77", "value": 2355738764 } }, "5b22d90b0c0d4102a081cee4f99e1593": { "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_1f5eace7c29546c6b2c0c288e4c1aaf9", "placeholder": "​", "style": "IPY_MODEL_06937b8797814a439101064f8908c2c3", "value": " 2.36G/2.36G [00:28<00:00, 191MB/s]" } }, "722bc43527d041648b630e6b91c35422": { "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 } }, "f5a3afab7a20438dbef5527ddbe94594": { "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 } }, "595a8dc9a7584703ab777ef7d8de9c2c": { "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": "" } }, "8d14f9cb936c4fb3ad9536c2e8061d21": { "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 } }, "63680af05a0a4703ab768e7b14582b77": { "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": "" } }, "1f5eace7c29546c6b2c0c288e4c1aaf9": { "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 } }, "06937b8797814a439101064f8908c2c3": { "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": "" } }, "fced7899a34e4c43976ae2c2c3f387ad": { "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_15e50ae3cee7422da0ccd388fddfbcf4", "IPY_MODEL_d2c7f92ccecd43778e3218a4f46c5204", "IPY_MODEL_9886a919e0ba42298204557a5a5dc71a" ], "layout": "IPY_MODEL_ed4655831a1c4a90bee5d5c21bd53a06" } }, "15e50ae3cee7422da0ccd388fddfbcf4": { "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_75405bb540784977b2f455dc1b99b8d5", "placeholder": "​", "style": "IPY_MODEL_6e592f9d7be14285a1b621a3dc599a0c", "value": "Loading weights: 100%" } }, "d2c7f92ccecd43778e3218a4f46c5204": { "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_2c7482ef88ee45969df2cc912f852771", "max": 434, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_27070cc3d95841c8a94aaa7ae3f07a5e", "value": 434 } }, "9886a919e0ba42298204557a5a5dc71a": { "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_9d0b179d9a114ba68c81706ce67afe53", "placeholder": "​", "style": "IPY_MODEL_23b95218fb404c049f55dbb0816a4e6a", "value": " 434/434 [00:02<00:00, 469.83it/s, Materializing param=model.norm.weight]" } }, "ed4655831a1c4a90bee5d5c21bd53a06": { "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 } }, "75405bb540784977b2f455dc1b99b8d5": { "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 } }, "6e592f9d7be14285a1b621a3dc599a0c": { "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": "" } }, "2c7482ef88ee45969df2cc912f852771": { "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 } }, "27070cc3d95841c8a94aaa7ae3f07a5e": { "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": "" } }, "9d0b179d9a114ba68c81706ce67afe53": { "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 } }, "23b95218fb404c049f55dbb0816a4e6a": { "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": "" } }, "accbf45db23a438eab08aef79dc18607": { "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_9feb863199934fc8bde80050e5fbd8e5", "IPY_MODEL_8d4c115e5b76487c848af3dc6f2e6da4", "IPY_MODEL_b1e72da0e68b48618791bbbcb43f78e6" ], "layout": "IPY_MODEL_12e06c75f179450aa39a1e9aa138f497" } }, "9feb863199934fc8bde80050e5fbd8e5": { "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_6e188f474dfd482caad844254328b14b", "placeholder": "​", "style": "IPY_MODEL_7e6970d102fd428680ad8e21470b3dc4", "value": "generation_config.json: 100%" } }, "8d4c115e5b76487c848af3dc6f2e6da4": { "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_8b3dcdee3ea14a20b68e6245cab8e823", "max": 271, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_e9f94663e3064f95990f9cf573424349", "value": 271 } }, "b1e72da0e68b48618791bbbcb43f78e6": { "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_c2d88292272e4181b91d4b24c1aa564c", "placeholder": "​", "style": "IPY_MODEL_2f104ecd94e14b809ff2468393419aca", "value": " 271/271 [00:00<00:00, 15.2kB/s]" } }, "12e06c75f179450aa39a1e9aa138f497": { "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 } }, "6e188f474dfd482caad844254328b14b": { "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 } }, "7e6970d102fd428680ad8e21470b3dc4": { "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": "" } }, "8b3dcdee3ea14a20b68e6245cab8e823": { "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 } }, "e9f94663e3064f95990f9cf573424349": { "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": "" } }, "c2d88292272e4181b91d4b24c1aa564c": { "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 } }, "2f104ecd94e14b809ff2468393419aca": { "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": "" } }, "b6524721b1bf4a0e835850b584dd54ce": { "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_f067dd779e86424baa36415d4fdb3426", "IPY_MODEL_ae50763e909b4b1db6f6fafcb3dae5e6", "IPY_MODEL_94c085179aad42ca9b4517015d9fc4ac" ], "layout": "IPY_MODEL_a2272a158dfc42658acbd08ed27ffdf8" } }, "f067dd779e86424baa36415d4fdb3426": { "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_c60b60add37841baa9e29ebfea2e0310", "placeholder": "​", "style": "IPY_MODEL_7460407517ef4c628c85b2d3c50089c6", "value": "config.json: " } }, "ae50763e909b4b1db6f6fafcb3dae5e6": { "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_daa32837348b4578a210a5e9ea252aa2", "max": 1, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_55213cfb1f75459d86da6f2271b2374d", "value": 1 } }, "94c085179aad42ca9b4517015d9fc4ac": { "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_551569053b58414d87b37cfe76d1f3f5", "placeholder": "​", "style": "IPY_MODEL_2a86bfe20f5948c7aed9746841fbc017", "value": " 1.42k/? [00:00<00:00, 80.1kB/s]" } }, "a2272a158dfc42658acbd08ed27ffdf8": { "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 } }, "c60b60add37841baa9e29ebfea2e0310": { "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 } }, "7460407517ef4c628c85b2d3c50089c6": { "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": "" } }, "daa32837348b4578a210a5e9ea252aa2": { "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": "20px" } }, "55213cfb1f75459d86da6f2271b2374d": { "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": "" } }, "551569053b58414d87b37cfe76d1f3f5": { "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 } }, "2a86bfe20f5948c7aed9746841fbc017": { "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": "" } }, "53aea130a1734f67aaf9f92fad348974": { "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_980d6f5eaf7747ee81cf4df2cb6f6244", "IPY_MODEL_254cce1e6abf44c580d112f993bd8c27", "IPY_MODEL_06a433a272534395bd668ec6b35f36d2" ], "layout": "IPY_MODEL_e53e0059bfc54d61a13a930fb2fb83dd" } }, "980d6f5eaf7747ee81cf4df2cb6f6244": { "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_59ed45231fb142de91ded46d484224c5", "placeholder": "​", "style": "IPY_MODEL_5c2c6b0c5ec74942bcc5ffef483de02f", "value": "tokenizer_config.json: " } }, "254cce1e6abf44c580d112f993bd8c27": { "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_4c71123bfea24c8898fdd98c78cdce87", "max": 1, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_049ccce6d2b34bd9a58c9eca3f6b39a8", "value": 1 } }, "06a433a272534395bd668ec6b35f36d2": { "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_c0fa5ca0c07a4c3587a7b4c966ab7f72", "placeholder": "​", "style": "IPY_MODEL_1a07d1fb5d4c440ea1ae6fb82a7b8e5d", "value": " 7.36k/? [00:00<00:00, 326kB/s]" } }, "e53e0059bfc54d61a13a930fb2fb83dd": { "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 } }, "59ed45231fb142de91ded46d484224c5": { "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 } }, "5c2c6b0c5ec74942bcc5ffef483de02f": { "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": "" } }, "4c71123bfea24c8898fdd98c78cdce87": { "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": "20px" } }, "049ccce6d2b34bd9a58c9eca3f6b39a8": { "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": "" } }, "c0fa5ca0c07a4c3587a7b4c966ab7f72": { "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 } }, "1a07d1fb5d4c440ea1ae6fb82a7b8e5d": { "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": "" } }, "c989467f85ea4b9e9fa4b4d7fac87b39": { "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_068dee0c31e040c7aecd485923c22153", "IPY_MODEL_3f56ebdb83f64e7a833d20b2666c664f", "IPY_MODEL_464fe9ecda3749cf90097736ef8529a0" ], "layout": "IPY_MODEL_72f73bce41a04a4b9acdc7b8bb76db09" } }, "068dee0c31e040c7aecd485923c22153": { "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_27363d938c314894a4100e884cd277bf", "placeholder": "​", "style": "IPY_MODEL_2f732ead584946b1af3202faa89550ac", "value": "vocab.json: " } }, "3f56ebdb83f64e7a833d20b2666c664f": { "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_25fc4e4700f54165aaf06c5426decdbf", "max": 1, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_1e366a867b30447182cea78f68bfdf1a", "value": 1 } }, "464fe9ecda3749cf90097736ef8529a0": { "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_30d13f76676045e7b979f6ff87a5c40f", "placeholder": "​", "style": "IPY_MODEL_db59422f3a2748c38e8ac12119b999f1", "value": " 2.78M/? [00:00<00:00, 62.5MB/s]" } }, "72f73bce41a04a4b9acdc7b8bb76db09": { "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 } }, "27363d938c314894a4100e884cd277bf": { "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 } }, "2f732ead584946b1af3202faa89550ac": { "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": "" } }, "25fc4e4700f54165aaf06c5426decdbf": { "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": "20px" } }, "1e366a867b30447182cea78f68bfdf1a": { "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": "" } }, "30d13f76676045e7b979f6ff87a5c40f": { "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 } }, "db59422f3a2748c38e8ac12119b999f1": { "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": "" } }, "947844aad9cd41b38ad6b0b6b1fa47e8": { "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_62b01a2da9e24af28104bf917d8bb247", "IPY_MODEL_fbe929bf519c4104bfe6284edeaab8dc", "IPY_MODEL_35ffcd4862ef462fa9202ecef821954d" ], "layout": "IPY_MODEL_3913106edee544d4961c9f0a62ff89b0" } }, "62b01a2da9e24af28104bf917d8bb247": { "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_cb8671131d6942f98e443dc8656aed49", "placeholder": "​", "style": "IPY_MODEL_06ba4651cd414bf2b5fd3900baaf2e71", "value": "merges.txt: " } }, "fbe929bf519c4104bfe6284edeaab8dc": { "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_2e97fcbbf20e4dc0b7b5fef7ed392c53", "max": 1, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_f4de53f6ad6a4733b29fe91da62c6d0c", "value": 1 } }, "35ffcd4862ef462fa9202ecef821954d": { "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_0b5256e7f23d45e6801c65dcb7d67a8d", "placeholder": "​", "style": "IPY_MODEL_2807434d0bdb4487a9b29b92f00264d6", "value": " 1.67M/? [00:00<00:00, 40.8MB/s]" } }, "3913106edee544d4961c9f0a62ff89b0": { "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 } }, "cb8671131d6942f98e443dc8656aed49": { "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 } }, "06ba4651cd414bf2b5fd3900baaf2e71": { "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": "" } }, "2e97fcbbf20e4dc0b7b5fef7ed392c53": { "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": "20px" } }, "f4de53f6ad6a4733b29fe91da62c6d0c": { "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": "" } }, "0b5256e7f23d45e6801c65dcb7d67a8d": { "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 } }, "2807434d0bdb4487a9b29b92f00264d6": { "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": "" } }, "b6eaeaa788704d46a852ea8e0331ffb5": { "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_f6c36c07cf1d402abe5de6cd60e99361", "IPY_MODEL_af4d210b42584cefa12ae8fb3987bb3a", "IPY_MODEL_a72ac22ab0f14db0a7dccc73b5782518" ], "layout": "IPY_MODEL_8214d0fb7c814c5f813318f97184058c" } }, "f6c36c07cf1d402abe5de6cd60e99361": { "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_9ff3b9c4277d4b2a9b6d39eb1564cd38", "placeholder": "​", "style": "IPY_MODEL_b792c8a2c61f4fd298a6177f42984ee9", "value": "tokenizer.json: 100%" } }, "af4d210b42584cefa12ae8fb3987bb3a": { "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_37ba21521242436cb4656b9e6c1f7111", "max": 11421896, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_41e75832e78848aebc27aef3b5c5d9ef", "value": 11421896 } }, "a72ac22ab0f14db0a7dccc73b5782518": { "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_bcb8f942ccb34412970fed1e2baa3ff5", "placeholder": "​", "style": "IPY_MODEL_cfb52f4ff430458787e2aea1568f366b", "value": " 11.4M/11.4M [00:00<00:00, 31.5MB/s]" } }, "8214d0fb7c814c5f813318f97184058c": { "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 } }, "9ff3b9c4277d4b2a9b6d39eb1564cd38": { "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 } }, "b792c8a2c61f4fd298a6177f42984ee9": { "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": "" } }, "37ba21521242436cb4656b9e6c1f7111": { "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 } }, "41e75832e78848aebc27aef3b5c5d9ef": { "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": "" } }, "bcb8f942ccb34412970fed1e2baa3ff5": { "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 } }, "cfb52f4ff430458787e2aea1568f366b": { "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": "" } }, "8c0963688258441a8a73cbe712879632": { "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_b95b1e6f5412427698928ccb6a3a7a2c", "IPY_MODEL_fab5bbfd417b40b9890afc742d29b607", "IPY_MODEL_48caf6a4345147bcbd7541eda9852470" ], "layout": "IPY_MODEL_08c3361b40c74d668323767eadd99d0a" } }, "b95b1e6f5412427698928ccb6a3a7a2c": { "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_fe19eef15b594366b96aae4e80916064", "placeholder": "​", "style": "IPY_MODEL_fd14aa0fa8494da0ae06d2f924f23036", "value": "added_tokens.json: 100%" } }, "fab5bbfd417b40b9890afc742d29b607": { "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_e14caedf048446348d7f25e611dc108c", "max": 605, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_316990079a3c4d8c90966e1de4048846", "value": 605 } }, "48caf6a4345147bcbd7541eda9852470": { "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_267f561519a84c41a96a840be208c1d7", "placeholder": "​", "style": "IPY_MODEL_6fbf4c76ad394dfd99b41f28ca68a7eb", "value": " 605/605 [00:00<00:00, 54.2kB/s]" } }, "08c3361b40c74d668323767eadd99d0a": { "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 } }, "fe19eef15b594366b96aae4e80916064": { "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 } }, "fd14aa0fa8494da0ae06d2f924f23036": { "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": "" } }, "e14caedf048446348d7f25e611dc108c": { "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 } }, "316990079a3c4d8c90966e1de4048846": { "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": "" } }, "267f561519a84c41a96a840be208c1d7": { "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 } }, "6fbf4c76ad394dfd99b41f28ca68a7eb": { "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": "" } }, "7e8eb3d72efd4488abf1fcfefaa542c4": { "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_c8613328dfb545348a1a7234c15c0a12", "IPY_MODEL_d971afce91b94942b512bff3e3c2d004", "IPY_MODEL_52ba5d56f315471891505c460411ee22" ], "layout": "IPY_MODEL_859c4e4eb0f4491387e89518c3db9b78" } }, "c8613328dfb545348a1a7234c15c0a12": { "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_662b81f01a444251a6c7e33efa59181f", "placeholder": "​", "style": "IPY_MODEL_3aa1bc1021d74f0f9a619af4ff8cc013", "value": "special_tokens_map.json: 100%" } }, "d971afce91b94942b512bff3e3c2d004": { "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_1b93a16480a142afa2f168a978edaed0", "max": 614, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_ceebdb027e614aea9a713437073c8b48", "value": 614 } }, "52ba5d56f315471891505c460411ee22": { "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_7761c546081448d8a7c4abbec5d4b928", "placeholder": "​", "style": "IPY_MODEL_6292cebc34be4130a7afcf6488e84c3f", "value": " 614/614 [00:00<00:00, 55.9kB/s]" } }, "859c4e4eb0f4491387e89518c3db9b78": { "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 } }, "662b81f01a444251a6c7e33efa59181f": { "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 } }, "3aa1bc1021d74f0f9a619af4ff8cc013": { "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": "" } }, "1b93a16480a142afa2f168a978edaed0": { "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 } }, "ceebdb027e614aea9a713437073c8b48": { "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": "" } }, "7761c546081448d8a7c4abbec5d4b928": { "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 } }, "6292cebc34be4130a7afcf6488e84c3f": { "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": "" } }, "825a8023497e4f2bb3361fa1df01493a": { "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_50011824d5c04ef492d0ee1f640182e5", "IPY_MODEL_813ce33ff2864ccc98dbbf0ebf5faa4c", "IPY_MODEL_269c89bd372a4c4899348f3004dd73a9" ], "layout": "IPY_MODEL_5c4cd5a1bf9146b2a66be4fec6b73570" } }, "50011824d5c04ef492d0ee1f640182e5": { "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_18383845e802403eb20bc4520ccfc102", "placeholder": "​", "style": "IPY_MODEL_9bbf681bbb6c4c24a9a3185c3e9e7235", "value": "Unsloth: Tokenizing ["text"] (num_proc=3): 100%" } }, "813ce33ff2864ccc98dbbf0ebf5faa4c": { "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_6b1154daffa74b9f87d3997ea08224d3", "max": 3, "min": 0, "orientation": "horizontal", "style": "IPY_MODEL_627ab8f1aa0c4e86b93471b54bc85487", "value": 3 } }, "269c89bd372a4c4899348f3004dd73a9": { "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_1576732c742f475f8699d8b2c4cbe40e", "placeholder": "​", "style": "IPY_MODEL_7bf6bcf1cd234b2face224c6b37bb428", "value": " 3/3 [00:15<00:00,  4.73s/ examples]" } }, "5c4cd5a1bf9146b2a66be4fec6b73570": { "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 } }, "18383845e802403eb20bc4520ccfc102": { "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 } }, "9bbf681bbb6c4c24a9a3185c3e9e7235": { "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": "" } }, "6b1154daffa74b9f87d3997ea08224d3": { "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 } }, "627ab8f1aa0c4e86b93471b54bc85487": { "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": "" } }, "1576732c742f475f8699d8b2c4cbe40e": { "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 } }, "7bf6bcf1cd234b2face224c6b37bb428": { "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": "markdown", "metadata": { "id": "Jb9Mg77pukzc" }, "source": [ "# Nested RL Environments — GRPO Training with Unsloth + TRL\n", "\n", "Fine-tune Qwen2.5-3B on the Nested RL customer support benchmark using:\n", "- **Unsloth** for 2-4x faster LoRA fine-tuning\n", "- **TRL GRPOTrainer** with Layer 2 environment rollouts\n", "- **Llama 3.1 8B** (HF Inference API) as customer simulator + agent\n", "- **100 adversarial customer personas** with social engineering attacks\n", "\n", "Runtime: T4 minimum (~15 min smoke test, ~1-2 hrs full run)" ] }, { "cell_type": "markdown", "metadata": { "id": "XY_AmQqoukzd" }, "source": [ "## 1. Install Dependencies & Clone Repo" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "4l2z44_6ukze", "outputId": "bb0218ef-8f1e-48bd-e899-6286e7a8ad8f" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m70.3/70.3 kB\u001b[0m \u001b[31m3.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m447.2/447.2 kB\u001b[0m \u001b[31m39.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m60.7/60.7 MB\u001b[0m \u001b[31m16.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m506.8/506.8 kB\u001b[0m \u001b[31m40.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m10.4/10.4 MB\u001b[0m \u001b[31m93.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m423.1/423.1 kB\u001b[0m \u001b[31m29.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m395.2/395.2 kB\u001b[0m \u001b[31m37.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.3/3.3 MB\u001b[0m \u001b[31m90.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.6/3.6 MB\u001b[0m \u001b[31m127.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m181.9/181.9 kB\u001b[0m \u001b[31m20.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m47.6/47.6 MB\u001b[0m \u001b[31m15.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m3.2/3.2 MB\u001b[0m \u001b[31m113.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m224.9/224.9 kB\u001b[0m \u001b[31m21.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hCloning into './repo'...\n", "remote: Enumerating objects: 317, done.\u001b[K\n", "remote: Counting objects: 100% (317/317), done.\u001b[K\n", "remote: Compressing objects: 100% (229/229), done.\u001b[K\n", "remote: Total 317 (delta 180), reused 144 (delta 83), pack-reused 0 (from 0)\u001b[K\n", "Receiving objects: 100% (317/317), 139.93 KiB | 1.08 MiB/s, done.\n", "Resolving deltas: 100% (180/180), done.\n", "Sun Mar 8 18:35:04 2026 \n", "+-----------------------------------------------------------------------------------------+\n", "| NVIDIA-SMI 580.82.07 Driver Version: 580.82.07 CUDA Version: 13.0 |\n", "+-----------------------------------------+------------------------+----------------------+\n", "| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |\n", "| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |\n", "| | | MIG M. |\n", "|=========================================+========================+======================|\n", "| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |\n", "| N/A 61C P8 13W / 70W | 0MiB / 15360MiB | 0% Default |\n", "| | | N/A |\n", "+-----------------------------------------+------------------------+----------------------+\n", "\n", "+-----------------------------------------------------------------------------------------+\n", "| Processes: |\n", "| GPU GI CI PID Type Process name GPU Memory |\n", "| ID ID Usage |\n", "|=========================================================================================|\n", "| No running processes found |\n", "+-----------------------------------------------------------------------------------------+\n" ] } ], "source": [ "# Install training stack\n", "!pip install -q unsloth\n", "!pip install -q \"trl>=0.8.0\" datasets accelerate\n", "!pip install -q huggingface_hub python-dotenv pyyaml\n", "\n", "# Clone repo (contains layer0 reward, layer1 GRPO, layer2 environment, personas)\n", "!git clone https://huggingface.co/spaces/openenv-community/test-local-nested-envs ./repo\n", "\n", "# Verify GPU\n", "!nvidia-smi | head -20" ] }, { "cell_type": "markdown", "metadata": { "id": "A6ESEavmukzf" }, "source": [ "## 2. Set Up Paths & HF Token" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "QlVc1vikukzf", "outputId": "4d783ca0-a954-474b-aa87-521081037ad4" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Working directory: /content/repo\n", "Repo contents: ['.git', '.gitattributes', '.gitignore', 'Dockerfile', 'README.md', 'app.py', 'assets', 'config.yaml', 'config_loader.py', 'layer0', 'layer1', 'layer2', 'notebooks', 'personas', 'pyproject.toml', 'scripts', 'tests', 'train.sh']\n" ] } ], "source": [ "import sys, os\n", "from pathlib import Path\n", "\n", "REPO = Path(\"./repo\")\n", "if str(REPO.resolve()) not in sys.path:\n", " sys.path.insert(0, str(REPO.resolve()))\n", "\n", "os.chdir(REPO)\n", "print(f\"Working directory: {os.getcwd()}\")\n", "print(f\"Repo contents: {sorted(os.listdir('.'))}\")" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "FGTjebt9ukzg", "outputId": "0e5d0a00-724e-469d-890c-5db6d9385212" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "GPU: Tesla T4\n", "VRAM: 15.6 GB\n" ] } ], "source": [ "import torch\n", "print(f\"GPU: {torch.cuda.get_device_name(0)}\")\n", "print(f\"VRAM: {torch.cuda.get_device_properties(0).total_memory / 1e9:.1f} GB\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "mS-4X-RWukzg" }, "outputs": [], "source": [ "try:\n", " from google.colab import userdata\n", " HF_TOKEN = userdata.get(\"HF_TOKEN\")\n", "except Exception:\n", " HF_TOKEN = \"hf_...\" # <-- paste your token here as fallback\n", "\n", "os.environ[\"HF_TOKEN\"] = HF_TOKEN\n", "print(\"HF_TOKEN set ✓\")" ] }, { "cell_type": "markdown", "metadata": { "id": "gpXy3C1hukzh" }, "source": [ "## 3. Import All Layers from Cloned Repo & Verify" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "PPf18nqnukzh", "outputId": "ac29cd31-8014-48e2-99b4-1a4bcedbd36a" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "All layers imported ✓\n", " Layer 0: reward_fn, intents=['transfer', 'check_balance', 'block_card']\n", " Layer 1: GRPOPromptTrainer, 3 seed prompts\n", " Layer 2: ConversationEnvironment, CustomerSimulator, HFAgent\n" ] } ], "source": [ "import json, random, time, logging\n", "\n", "logging.basicConfig(level=logging.INFO, format=\"%(asctime)s %(name)s %(message)s\")\n", "\n", "# Layer 0 — Reward function\n", "from layer0.reward import (\n", " reward_fn, RewardConfig, ConversationLog,\n", " extract_intent_json, contains_unauthorized_disclosure, BANKING_INTENTS,\n", ")\n", "\n", "# Layer 2 — Customer simulator + environment\n", "from layer2.customer_sim import CustomerPersona, CustomerSimulator\n", "from layer2.environment import ConversationEnvironment, EnvConfig\n", "from layer2.hf_agent import HFAgent\n", "\n", "# Persona generator\n", "from personas.generate_personas import generate_personas\n", "\n", "# Layer 1 — GRPO trainer components\n", "from layer1.grpo_trainer import (\n", " GRPOConfig, GRPOPromptTrainer, PromptEvaluator,\n", " build_meta_prompt, META_PROMPT_TEMPLATE, SFT_SEED_PROMPTS,\n", ")\n", "\n", "print(\"All layers imported ✓\")\n", "print(f\" Layer 0: reward_fn, intents={BANKING_INTENTS}\")\n", "print(f\" Layer 1: GRPOPromptTrainer, {len(SFT_SEED_PROMPTS)} seed prompts\")\n", "print(f\" Layer 2: ConversationEnvironment, CustomerSimulator, HFAgent\")" ] }, { "cell_type": "markdown", "metadata": { "id": "OVAsrMHIukzi" }, "source": [ "## 4. Sanity Check — Verify Environment End-to-End\n", "\n", "Run one episode with a keyword-based agent to confirm reward function,\n", "persona generation, environment step/reset, and intent extraction all work\n", "before we spend GPU time on training." ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "sxQ1Jn5_ukzi", "outputId": "eff92dcf-0316-4c6b-f63f-b5c14cee5732" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Reward sanity check:\n", " Perfect episode (2 turns, correct, caught injection): 125.0\n", " Bad episode (10 turns, no classification): -30.0\n", "\n", "Persona sanity check:\n", " Generated 20 personas\n", " Intents covered: {'block_card', 'check_balance', 'transfer'}\n", " SE types covered: {'soft', 'none', 'hard'}\n", " ✓ All intents represented\n", "\n", "Environment sanity check:\n", " Persona: id=16 intent=block_card SE=none\n", " First message: My card is gone, I need it blocked NOW before someone uses it!\n", " Step result: done=True reward=70.0 reason=intent_classified\n", " ✓ Environment works correctly\n", "\n", " ✓ Intent extraction works correctly\n", " ✓ HFAgent initialized (Llama 3.1 8B via HF API)\n", "\n", "============================================================\n", "ALL SANITY CHECKS PASSED — safe to proceed with training\n", "============================================================\n" ] } ], "source": [ "# -- Verify reward function --\n", "_log_perfect = ConversationLog(\n", " turns=2, intent_captured=True, intent_correct=True,\n", " injection_attempted=True, injection_succeeded=False,\n", ")\n", "_log_bad = ConversationLog(\n", " turns=10, intent_captured=False, intent_correct=False,\n", ")\n", "print(f\"Reward sanity check:\")\n", "print(f\" Perfect episode (2 turns, correct, caught injection): {reward_fn(_log_perfect)}\")\n", "print(f\" Bad episode (10 turns, no classification): {reward_fn(_log_bad)}\")\n", "\n", "# -- Verify persona generation --\n", "_personas_data = generate_personas(20, seed=0)\n", "_personas = [CustomerPersona(**p) for p in _personas_data]\n", "_intents = {p.true_intent for p in _personas}\n", "_se_types = {p.social_engineering for p in _personas}\n", "print(f\"\\nPersona sanity check:\")\n", "print(f\" Generated {len(_personas)} personas\")\n", "print(f\" Intents covered: {_intents}\")\n", "print(f\" SE types covered: {_se_types}\")\n", "assert _intents == set(BANKING_INTENTS), f\"Missing intents: {set(BANKING_INTENTS) - _intents}\"\n", "print(\" ✓ All intents represented\")\n", "\n", "# -- Verify environment reset/step with a mock agent --\n", "_sim = CustomerSimulator() # no token needed for this test\n", "_env = ConversationEnvironment(\n", " personas=_personas,\n", " simulator=_sim,\n", " config=EnvConfig(domain=\"banking\", intents=list(BANKING_INTENTS), max_turns=10),\n", ")\n", "\n", "_test_persona = _personas[0]\n", "_obs = _env.reset(persona=_test_persona)\n", "print(f\"\\nEnvironment sanity check:\")\n", "print(f\" Persona: id={_test_persona.id} intent={_test_persona.true_intent} \"\n", " f\"SE={_test_persona.social_engineering}\")\n", "print(f\" First message: {_obs['customer_message'][:100]}\")\n", "\n", "# Simulate an instant correct classification\n", "_result = _env.step(json.dumps({\"intent\": _test_persona.true_intent}))\n", "print(f\" Step result: done={_result.done} reward={_result.reward:.1f} \"\n", " f\"reason={_result.info.get('termination_reason', 'N/A')}\")\n", "assert _result.done, \"Episode should end after intent classification\"\n", "assert _result.reward > 0, f\"Correct classification should give positive reward, got {_result.reward}\"\n", "print(\" ✓ Environment works correctly\")\n", "\n", "# -- Verify intent JSON extraction --\n", "assert extract_intent_json('{\"intent\": \"transfer\"}') == {\"intent\": \"transfer\"}\n", "assert extract_intent_json('```json\\n{\"intent\": \"block_card\"}\\n```') == {\"intent\": \"block_card\"}\n", "assert extract_intent_json(\"No JSON here\") is None\n", "print(\"\\n ✓ Intent extraction works correctly\")\n", "\n", "# -- Verify HF agent can be initialized --\n", "_agent = HFAgent(hf_token=HF_TOKEN, max_tokens=300, temperature=0.3)\n", "assert _agent.is_llm_available, \"HFAgent failed to init — check HF_TOKEN\"\n", "print(f\" ✓ HFAgent initialized (Llama 3.1 8B via HF API)\")\n", "\n", "print(f\"\\n{'='*60}\")\n", "print(\"ALL SANITY CHECKS PASSED — safe to proceed with training\")\n", "print(f\"{'='*60}\")" ] }, { "cell_type": "markdown", "metadata": { "id": "XQ0My8Xuukzi" }, "source": [ "## 5. Configuration\n", "\n", "| Preset | Steps | Candidates | Episodes | Total Convos | Time (T4) |\n", "|--------|-------|------------|----------|-------------|-----------|\n", "| Smoke test | 3 | 2 | 3 | 18 | ~15 min |\n", "| Medium | 10 | 4 | 5 | 200 | ~1 hr |\n", "| Full | 30 | 4 | 8 | 960 | ~3 hrs |" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "V_dfLKpzukzi", "outputId": "e0625a2f-9714-48f0-89aa-f704bd05c6ec" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Config: 3 steps × 2 candidates × 3 episodes = 18 total conversations\n", "Model: unsloth/Qwen2.5-3B-Instruct | LoRA r=16 α=16 | LR=2.0e-05\n" ] } ], "source": [ "MODEL_NAME = \"unsloth/Qwen2.5-3B-Instruct\"\n", "LORA_R = 16\n", "LORA_ALPHA = 16\n", "\n", "NUM_TRAINING_STEPS = 3 # GRPO iterations\n", "NUM_CANDIDATES = 2 # prompts per step (min 2 for GRPO)\n", "EPISODES_PER_CANDIDATE = 3 # conversations per candidate\n", "LEARNING_RATE = 2e-5\n", "MAX_PROMPT_LENGTH = 512\n", "NUM_PERSONAS = 20\n", "\n", "SFT_WARM_START = True\n", "SFT_EPOCHS = 2\n", "SFT_LR = 1e-4\n", "\n", "config = GRPOConfig(\n", " model_name=MODEL_NAME,\n", " lora_r=LORA_R,\n", " lora_alpha=LORA_ALPHA,\n", " lora_dropout=0.0,\n", " num_candidates=NUM_CANDIDATES,\n", " episodes_per_candidate=EPISODES_PER_CANDIDATE,\n", " num_training_steps=NUM_TRAINING_STEPS,\n", " learning_rate=LEARNING_RATE,\n", " max_prompt_length=MAX_PROMPT_LENGTH,\n", " max_seq_length=4096,\n", " prompt_max_new_tokens=MAX_PROMPT_LENGTH,\n", " prompt_temperature=0.3,\n", " per_device_train_batch_size=1,\n", " gradient_accumulation_steps=4,\n", " logging_steps=1,\n", " save_steps=999,\n", " sft_warm_start=SFT_WARM_START,\n", " sft_epochs=SFT_EPOCHS,\n", " sft_lr=SFT_LR,\n", " domain=\"banking\",\n", " intents=list(BANKING_INTENTS),\n", " output_dir=\"./grpo_output\",\n", ")\n", "\n", "META_PROMPT = build_meta_prompt(config)\n", "\n", "total_conversations = NUM_TRAINING_STEPS * NUM_CANDIDATES * EPISODES_PER_CANDIDATE\n", "print(f\"Config: {NUM_TRAINING_STEPS} steps × {NUM_CANDIDATES} candidates × \"\n", " f\"{EPISODES_PER_CANDIDATE} episodes = {total_conversations} total conversations\")\n", "print(f\"Model: {MODEL_NAME} | LoRA r={LORA_R} α={LORA_ALPHA} | LR={LEARNING_RATE:.1e}\")" ] }, { "cell_type": "markdown", "metadata": { "id": "fMrcMafXukzi" }, "source": [ "## 6. Load Model with Unsloth (4-bit LoRA)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 545, "referenced_widgets": [ "70b16806ed5b4538b5b817fe56e0a0e1", "5dd2db7a2b6a40909db1a0baee40af61", "33ec729f66cf4abcb6854aba79ae8f3a", "5b22d90b0c0d4102a081cee4f99e1593", "722bc43527d041648b630e6b91c35422", "f5a3afab7a20438dbef5527ddbe94594", "595a8dc9a7584703ab777ef7d8de9c2c", "8d14f9cb936c4fb3ad9536c2e8061d21", "63680af05a0a4703ab768e7b14582b77", "1f5eace7c29546c6b2c0c288e4c1aaf9", "06937b8797814a439101064f8908c2c3", "fced7899a34e4c43976ae2c2c3f387ad", "15e50ae3cee7422da0ccd388fddfbcf4", "d2c7f92ccecd43778e3218a4f46c5204", "9886a919e0ba42298204557a5a5dc71a", "ed4655831a1c4a90bee5d5c21bd53a06", "75405bb540784977b2f455dc1b99b8d5", "6e592f9d7be14285a1b621a3dc599a0c", "2c7482ef88ee45969df2cc912f852771", "27070cc3d95841c8a94aaa7ae3f07a5e", "9d0b179d9a114ba68c81706ce67afe53", "23b95218fb404c049f55dbb0816a4e6a", "accbf45db23a438eab08aef79dc18607", "9feb863199934fc8bde80050e5fbd8e5", "8d4c115e5b76487c848af3dc6f2e6da4", "b1e72da0e68b48618791bbbcb43f78e6", "12e06c75f179450aa39a1e9aa138f497", "6e188f474dfd482caad844254328b14b", "7e6970d102fd428680ad8e21470b3dc4", "8b3dcdee3ea14a20b68e6245cab8e823", "e9f94663e3064f95990f9cf573424349", "c2d88292272e4181b91d4b24c1aa564c", "2f104ecd94e14b809ff2468393419aca", "b6524721b1bf4a0e835850b584dd54ce", "f067dd779e86424baa36415d4fdb3426", "ae50763e909b4b1db6f6fafcb3dae5e6", "94c085179aad42ca9b4517015d9fc4ac", "a2272a158dfc42658acbd08ed27ffdf8", "c60b60add37841baa9e29ebfea2e0310", "7460407517ef4c628c85b2d3c50089c6", "daa32837348b4578a210a5e9ea252aa2", "55213cfb1f75459d86da6f2271b2374d", "551569053b58414d87b37cfe76d1f3f5", "2a86bfe20f5948c7aed9746841fbc017", "53aea130a1734f67aaf9f92fad348974", "980d6f5eaf7747ee81cf4df2cb6f6244", "254cce1e6abf44c580d112f993bd8c27", "06a433a272534395bd668ec6b35f36d2", "e53e0059bfc54d61a13a930fb2fb83dd", "59ed45231fb142de91ded46d484224c5", "5c2c6b0c5ec74942bcc5ffef483de02f", "4c71123bfea24c8898fdd98c78cdce87", "049ccce6d2b34bd9a58c9eca3f6b39a8", "c0fa5ca0c07a4c3587a7b4c966ab7f72", "1a07d1fb5d4c440ea1ae6fb82a7b8e5d", "c989467f85ea4b9e9fa4b4d7fac87b39", "068dee0c31e040c7aecd485923c22153", "3f56ebdb83f64e7a833d20b2666c664f", "464fe9ecda3749cf90097736ef8529a0", "72f73bce41a04a4b9acdc7b8bb76db09", "27363d938c314894a4100e884cd277bf", "2f732ead584946b1af3202faa89550ac", "25fc4e4700f54165aaf06c5426decdbf", "1e366a867b30447182cea78f68bfdf1a", "30d13f76676045e7b979f6ff87a5c40f", "db59422f3a2748c38e8ac12119b999f1", "947844aad9cd41b38ad6b0b6b1fa47e8", "62b01a2da9e24af28104bf917d8bb247", "fbe929bf519c4104bfe6284edeaab8dc", "35ffcd4862ef462fa9202ecef821954d", "3913106edee544d4961c9f0a62ff89b0", "cb8671131d6942f98e443dc8656aed49", "06ba4651cd414bf2b5fd3900baaf2e71", "2e97fcbbf20e4dc0b7b5fef7ed392c53", "f4de53f6ad6a4733b29fe91da62c6d0c", "0b5256e7f23d45e6801c65dcb7d67a8d", "2807434d0bdb4487a9b29b92f00264d6", "b6eaeaa788704d46a852ea8e0331ffb5", "f6c36c07cf1d402abe5de6cd60e99361", "af4d210b42584cefa12ae8fb3987bb3a", "a72ac22ab0f14db0a7dccc73b5782518", "8214d0fb7c814c5f813318f97184058c", "9ff3b9c4277d4b2a9b6d39eb1564cd38", "b792c8a2c61f4fd298a6177f42984ee9", "37ba21521242436cb4656b9e6c1f7111", "41e75832e78848aebc27aef3b5c5d9ef", "bcb8f942ccb34412970fed1e2baa3ff5", "cfb52f4ff430458787e2aea1568f366b", "8c0963688258441a8a73cbe712879632", "b95b1e6f5412427698928ccb6a3a7a2c", "fab5bbfd417b40b9890afc742d29b607", "48caf6a4345147bcbd7541eda9852470", "08c3361b40c74d668323767eadd99d0a", "fe19eef15b594366b96aae4e80916064", "fd14aa0fa8494da0ae06d2f924f23036", "e14caedf048446348d7f25e611dc108c", "316990079a3c4d8c90966e1de4048846", "267f561519a84c41a96a840be208c1d7", "6fbf4c76ad394dfd99b41f28ca68a7eb", "7e8eb3d72efd4488abf1fcfefaa542c4", "c8613328dfb545348a1a7234c15c0a12", "d971afce91b94942b512bff3e3c2d004", "52ba5d56f315471891505c460411ee22", "859c4e4eb0f4491387e89518c3db9b78", "662b81f01a444251a6c7e33efa59181f", "3aa1bc1021d74f0f9a619af4ff8cc013", "1b93a16480a142afa2f168a978edaed0", "ceebdb027e614aea9a713437073c8b48", "7761c546081448d8a7c4abbec5d4b928", "6292cebc34be4130a7afcf6488e84c3f" ] }, "id": "t8Ian8gRukzi", "outputId": "dbee1bb9-cc36-4f22-bcfc-71d254976a8e" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "🦥 Unsloth: Will patch your computer to enable 2x faster free finetuning.\n", "🦥 Unsloth Zoo will now patch everything to make training faster!\n", "==((====))== Unsloth 2026.3.4: Fast Qwen2 patching. Transformers: 5.2.0.\n", " \\\\ /| Tesla T4. Num GPUs = 1. Max memory: 14.563 GB. Platform: Linux.\n", "O^O/ \\_/ \\ Torch: 2.10.0+cu128. CUDA: 7.5. CUDA Toolkit: 12.8. Triton: 3.6.0\n", "\\ / Bfloat16 = FALSE. FA [Xformers = 0.0.35. FA2 = False]\n", " \"-____-\" Free license: http://github.com/unslothai/unsloth\n", "Unsloth: Fast downloading is enabled - ignore downloading bars which are red colored!\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "model.safetensors: 0%| | 0.00/2.36G [00:00.\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "Unsloth 2026.3.4 patched 36 layers with 36 QKV layers, 36 O layers and 36 MLP layers.\n" ] }, { "output_type": "stream", "name": "stdout", "text": [ "Model: unsloth/Qwen2.5-3B-Instruct\n", "trainable params: 29,933,568 || all params: 3,115,872,256 || trainable%: 0.9607\n" ] } ], "source": [ "from unsloth import FastLanguageModel\n", "\n", "model, tokenizer = FastLanguageModel.from_pretrained(\n", " model_name=MODEL_NAME,\n", " max_seq_length=4096,\n", " dtype=None,\n", " load_in_4bit=True,\n", ")\n", "\n", "model = FastLanguageModel.get_peft_model(\n", " model,\n", " r=LORA_R,\n", " target_modules=[\"q_proj\", \"k_proj\", \"v_proj\", \"o_proj\",\n", " \"gate_proj\", \"up_proj\", \"down_proj\"],\n", " lora_alpha=LORA_ALPHA,\n", " lora_dropout=0.0,\n", " bias=\"none\",\n", " use_gradient_checkpointing=\"unsloth\",\n", ")\n", "\n", "print(f\"Model: {MODEL_NAME}\")\n", "model.print_trainable_parameters()" ] }, { "cell_type": "markdown", "metadata": { "id": "wwWJn-ndukzi" }, "source": [ "## 7. SFT Warm Start — Prime on Seed Prompts" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 444, "referenced_widgets": [ "825a8023497e4f2bb3361fa1df01493a", "50011824d5c04ef492d0ee1f640182e5", "813ce33ff2864ccc98dbbf0ebf5faa4c", "269c89bd372a4c4899348f3004dd73a9", "5c4cd5a1bf9146b2a66be4fec6b73570", "18383845e802403eb20bc4520ccfc102", "9bbf681bbb6c4c24a9a3185c3e9e7235", "6b1154daffa74b9f87d3997ea08224d3", "627ab8f1aa0c4e86b93471b54bc85487", "1576732c742f475f8699d8b2c4cbe40e", "7bf6bcf1cd234b2face224c6b37bb428" ] }, "id": "TNlp41wmukzj", "outputId": "5d057940-fbb9-4647-a865-96cb975435c0" }, "outputs": [ { "output_type": "stream", "name": "stderr", "text": [ "num_proc must be <= 3. Reducing num_proc to 3 for dataset of size 3.\n", "WARNING:datasets.arrow_dataset:num_proc must be <= 3. Reducing num_proc to 3 for dataset of size 3.\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "Unsloth: Tokenizing [\"text\"] (num_proc=3): 0%| | 0/3 [00:00" ], "text/html": [ "\n", "
\n", " \n", " \n", " [4/4 00:06, Epoch 2/2]\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
StepTraining Loss
12.964623
23.542099
32.964623
43.170697

" ] }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "SFT warm start complete ✓\n" ] } ], "source": [ "from trl import SFTConfig, SFTTrainer\n", "from datasets import Dataset\n", "\n", "if SFT_WARM_START:\n", " sft_examples = []\n", " for seed in SFT_SEED_PROMPTS:\n", " messages = [\n", " {\"role\": \"user\", \"content\": META_PROMPT},\n", " {\"role\": \"assistant\", \"content\": seed},\n", " ]\n", " text = tokenizer.apply_chat_template(\n", " messages, tokenize=False, add_generation_prompt=False\n", " )\n", " sft_examples.append({\"text\": text})\n", "\n", " sft_dataset = Dataset.from_list(sft_examples)\n", "\n", " sft_trainer = SFTTrainer(\n", " model=model,\n", " args=SFTConfig(\n", " output_dir=\"./sft_warmstart\",\n", " num_train_epochs=SFT_EPOCHS,\n", " per_device_train_batch_size=1,\n", " learning_rate=SFT_LR,\n", " logging_steps=1,\n", " save_steps=999,\n", " max_seq_length=4096,\n", " dataset_text_field=\"text\",\n", " ),\n", " train_dataset=sft_dataset,\n", " tokenizer=tokenizer,\n", " )\n", "\n", " print(f\"SFT warm start: {len(SFT_SEED_PROMPTS)} seed prompts × {SFT_EPOCHS} epochs\")\n", " sft_trainer.train()\n", " print(\"SFT warm start complete ✓\")\n", "else:\n", " print(\"SFT warm start skipped\")" ] }, { "cell_type": "markdown", "metadata": { "id": "TsJk4yB3ukzj" }, "source": [ "## 8. Set Up Layer 2 Environment + Evaluator" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "f6CwhesTukzj", "outputId": "90338877-1dfd-486f-aa35-e585d839b07e" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Layer 2 ready: 20 personas, Llama 3.1 8B via HF API ✓\n", "\n", "Pre-training sanity check (1 episode with seed prompt)...\n", " Seed prompt reward: -30.0\n", " ✓ Full LLM evaluation loop works end-to-end\n" ] } ], "source": [ "personas_data = generate_personas(NUM_PERSONAS)\n", "personas = [CustomerPersona(**p) for p in personas_data]\n", "\n", "# The repo hardcodes \"unsloth/Meta-Llama-3.1-8B-Instruct\" which is an unsloth mirror\n", "# for local transformers loading. The HF Inference API needs the official model ID.\n", "LLAMA_API_MODEL = \"meta-llama/Llama-3.1-8B-Instruct\"\n", "\n", "simulator = CustomerSimulator(hf_token=HF_TOKEN, max_tokens=200, temperature=0.7)\n", "simulator.MODEL_ID = LLAMA_API_MODEL # override unsloth mirror -> official model for API\n", "\n", "agent = HFAgent(model_id=LLAMA_API_MODEL, hf_token=HF_TOKEN, max_tokens=300, temperature=0.3)\n", "assert agent.is_llm_available, \"Agent init failed — check HF_TOKEN\"\n", "\n", "evaluator = PromptEvaluator(\n", " personas=personas,\n", " simulator=simulator,\n", " agent_fn=agent,\n", " env_config=EnvConfig(\n", " domain=\"banking\",\n", " intents=list(BANKING_INTENTS),\n", " max_turns=10,\n", " ),\n", ")\n", "\n", "print(f\"Layer 2 ready: {NUM_PERSONAS} personas, Llama 3.1 8B via HF API ✓\")\n", "\n", "# -- Pre-training baseline: evaluate one seed prompt to confirm LLM loop works --\n", "print(\"\\nPre-training sanity check (1 episode with seed prompt)...\")\n", "_pre_result = evaluator.evaluate_prompt(\n", " SFT_SEED_PROMPTS[0], num_episodes=1, step_label=\"[Pre-train check]\"\n", ")\n", "print(f\" Seed prompt reward: {_pre_result['mean_reward']:.1f}\")\n", "print(f\" ✓ Full LLM evaluation loop works end-to-end\")" ] }, { "cell_type": "markdown", "metadata": { "id": "Un7bBYw6ukzj" }, "source": [ "## 9. GRPO Training Loop" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "id": "hogitCztukzj", "outputId": "b9ff7ffb-172d-4b4a-c270-355d27b2f2ef" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "============================================================\n", "Starting GRPO training...\n", " 3 steps × 2 candidates × 3 episodes = 18 conversations\n", "============================================================\n", "\n" ] }, { "output_type": "stream", "name": "stderr", "text": [ "==((====))== Unsloth - 2x faster free finetuning | Num GPUs used = 1\n", " \\\\ /| Num examples = 3 | Num Epochs = 1 | Total steps = 1\n", "O^O/ \\_/ \\ Batch size per device = 1 | Gradient accumulation steps = 4\n", "\\ / Data Parallel GPUs = 1 | Total batch size (1 x 4 x 1) = 4\n", " \"-____-\" Trainable parameters = 29,933,568 of 3,115,872,256 (0.96% trained)\n", "Passing `generation_config` together with generation-related arguments=({'disable_compile', 'pad_token_id', 'cache_implementation'}) is deprecated and will be removed in future versions. Please pass either a `generation_config` object OR all generation parameters explicitly, but not both.\n", "--- Logging error ---\n", "Traceback (most recent call last):\n", " File \"/usr/lib/python3.12/logging/__init__.py\", line 1160, in emit\n", " msg = self.format(record)\n", " ^^^^^^^^^^^^^^^^^^^\n", " File \"/usr/lib/python3.12/logging/__init__.py\", line 999, in format\n", " return fmt.format(record)\n", " ^^^^^^^^^^^^^^^^^^\n", " File \"/usr/lib/python3.12/logging/__init__.py\", line 703, in format\n", " record.message = record.getMessage()\n", " ^^^^^^^^^^^^^^^^^^^\n", " File \"/usr/lib/python3.12/logging/__init__.py\", line 392, in getMessage\n", " msg = msg % self.args\n", " ~~~~^~~~~~~~~~~\n", "TypeError: not all arguments converted during string formatting\n", "Call stack:\n", " File \"\", line 198, in _run_module_as_main\n", " File \"\", line 88, in _run_code\n", " File \"/usr/local/lib/python3.12/dist-packages/colab_kernel_launcher.py\", line 37, in \n", " ColabKernelApp.launch_instance()\n", " File \"/usr/local/lib/python3.12/dist-packages/traitlets/config/application.py\", line 992, in launch_instance\n", " app.start()\n", " File \"/usr/local/lib/python3.12/dist-packages/ipykernel/kernelapp.py\", line 712, in start\n", " self.io_loop.start()\n", " File \"/usr/local/lib/python3.12/dist-packages/tornado/platform/asyncio.py\", line 211, in start\n", " self.asyncio_loop.run_forever()\n", " File \"/usr/lib/python3.12/asyncio/base_events.py\", line 645, in run_forever\n", " self._run_once()\n", " File \"/usr/lib/python3.12/asyncio/base_events.py\", line 1999, in _run_once\n", " handle._run()\n", " File \"/usr/lib/python3.12/asyncio/events.py\", line 88, in _run\n", " self._context.run(self._callback, *self._args)\n", " File \"/usr/local/lib/python3.12/dist-packages/ipykernel/kernelbase.py\", line 510, in dispatch_queue\n", " await self.process_one()\n", " File \"/usr/local/lib/python3.12/dist-packages/ipykernel/kernelbase.py\", line 499, in process_one\n", " await dispatch(*args)\n", " File \"/usr/local/lib/python3.12/dist-packages/ipykernel/kernelbase.py\", line 406, in dispatch_shell\n", " await result\n", " File \"/usr/local/lib/python3.12/dist-packages/ipykernel/kernelbase.py\", line 730, in execute_request\n", " reply_content = await reply_content\n", " File \"/usr/local/lib/python3.12/dist-packages/ipykernel/ipkernel.py\", line 383, in do_execute\n", " res = shell.run_cell(\n", " File \"/usr/local/lib/python3.12/dist-packages/ipykernel/zmqshell.py\", line 528, in run_cell\n", " return super().run_cell(*args, **kwargs)\n", " File \"/usr/local/lib/python3.12/dist-packages/IPython/core/interactiveshell.py\", line 2975, in run_cell\n", " result = self._run_cell(\n", " File \"/usr/local/lib/python3.12/dist-packages/IPython/core/interactiveshell.py\", line 3030, in _run_cell\n", " return runner(coro)\n", " File \"/usr/local/lib/python3.12/dist-packages/IPython/core/async_helpers.py\", line 78, in _pseudo_sync_runner\n", " coro.send(None)\n", " File \"/usr/local/lib/python3.12/dist-packages/IPython/core/interactiveshell.py\", line 3257, in run_cell_async\n", " has_raised = await self.run_ast_nodes(code_ast.body, cell_name,\n", " File \"/usr/local/lib/python3.12/dist-packages/IPython/core/interactiveshell.py\", line 3473, in run_ast_nodes\n", " if (await self.run_code(code, result, async_=asy)):\n", " File \"/usr/local/lib/python3.12/dist-packages/IPython/core/interactiveshell.py\", line 3553, in run_code\n", " exec(code_obj, self.user_global_ns, self.user_ns)\n", " File \"/tmp/ipykernel_240/957734351.py\", line 63, in \n", " grpo_trainer.train()\n", " File \"/content/repo/unsloth_compiled_cache/UnslothGRPOTrainer.py\", line 68, in wrapper\n", " output = f(self, *args, **kwargs)\n", " File \"/usr/local/lib/python3.12/dist-packages/transformers/trainer.py\", line 1412, in train\n", " return inner_training_loop(\n", " File \"\", line 332, in _fast_inner_training_loop\n", " File \"\", line 34, in _unsloth_training_step\n", " File \"/usr/local/lib/python3.12/dist-packages/trl/extras/profiling.py\", line 98, in wrapper\n", " return func(self, *args, **kwargs)\n", " File \"/content/repo/unsloth_compiled_cache/UnslothGRPOTrainer.py\", line 2725, in _prepare_inputs\n", " generation_batch = self._generate_and_score_completions(generation_batch)\n", " File \"/usr/local/lib/python3.12/dist-packages/unsloth/models/rl.py\", line 450, in wrapped\n", " return original(self, *args, **kwargs)\n", " File \"/content/repo/unsloth_compiled_cache/UnslothGRPOTrainer.py\", line 3125, in _generate_and_score_completions\n", " ) = self._generate(prompts, images)\n", " File \"/content/repo/unsloth_compiled_cache/UnslothGRPOTrainer.py\", line 3056, in _generate\n", " prompt_ids, completion_ids, logprobs, forward_kwargs = self._generate_single_turn(prompts, images)\n", " File \"/content/repo/unsloth_compiled_cache/UnslothGRPOTrainer.py\", line 3032, in _generate_single_turn\n", " prompt_completion_ids = unwrapped_model.generate(\n", " File \"/usr/local/lib/python3.12/dist-packages/unsloth/models/rl.py\", line 144, in generate_with_clone\n", " out = original_generate(*args, **kwargs)\n", " File \"/usr/local/lib/python3.12/dist-packages/peft/peft_model.py\", line 2048, in generate\n", " outputs = self.base_model.generate(*args, **kwargs)\n", " File \"/usr/local/lib/python3.12/dist-packages/unsloth/models/llama.py\", line 2128, in unsloth_fast_generate\n", " output = self._old_generate(*args, **kwargs)\n", " File \"/usr/local/lib/python3.12/dist-packages/torch/utils/_contextlib.py\", line 124, in decorate_context\n", " return func(*args, **kwargs)\n", " File \"/usr/local/lib/python3.12/dist-packages/transformers/generation/utils.py\", line 2668, in generate\n", " result = decoding_method(\n", " File \"/usr/local/lib/python3.12/dist-packages/transformers/generation/utils.py\", line 2863, in _sample\n", " outputs = self._prefill(input_ids, generation_config, model_kwargs)\n", " File \"/usr/local/lib/python3.12/dist-packages/transformers/generation/utils.py\", line 3857, in _prefill\n", " return self(**model_inputs, return_dict=True)\n", " File \"/usr/local/lib/python3.12/dist-packages/torch/nn/modules/module.py\", line 1776, in _wrapped_call_impl\n", " return self._call_impl(*args, **kwargs)\n", " File \"/usr/local/lib/python3.12/dist-packages/torch/nn/modules/module.py\", line 1787, in _call_impl\n", " return forward_call(*args, **kwargs)\n", " File \"/usr/local/lib/python3.12/dist-packages/unsloth/models/llama.py\", line 1474, in _CausalLM_fast_forward\n", " outputs = self.model(\n", " File \"/usr/local/lib/python3.12/dist-packages/torch/nn/modules/module.py\", line 1776, in _wrapped_call_impl\n", " return self._call_impl(*args, **kwargs)\n", " File \"/usr/local/lib/python3.12/dist-packages/torch/nn/modules/module.py\", line 1787, in _call_impl\n", " return forward_call(*args, **kwargs)\n", " File \"/usr/local/lib/python3.12/dist-packages/unsloth/models/llama.py\", line 1058, in LlamaModel_fast_forward\n", " attention_mask = _prepare_4d_causal_attention_mask_for_sdpa(\n", " File \"/usr/local/lib/python3.12/dist-packages/transformers/modeling_attn_mask_utils.py\", line 394, in _prepare_4d_causal_attention_mask_for_sdpa\n", " attn_mask_converter = AttentionMaskConverter(is_causal=True, sliding_window=sliding_window)\n", " File \"/usr/local/lib/python3.12/dist-packages/transformers/modeling_attn_mask_utils.py\", line 74, in __init__\n", " logger.warning_once(DEPRECATION_MESSAGE, FutureWarning)\n", " File \"/usr/local/lib/python3.12/dist-packages/transformers/utils/logging.py\", line 327, in warning_once\n", " self.warning(*args, **kwargs)\n", "Message: 'The attention mask API under `transformers.modeling_attn_mask_utils` (`AttentionMaskConverter`) is deprecated and will be removed in Transformers v5.10. Please use the new API in `transformers.masking_utils`.'\n", "Arguments: (,)\n" ] }, { "output_type": "stream", "name": "stdout", "text": [ " [Step 1/3] Candidate 1/4: mean_reward=36.1 prompt= Voice Agent: \"Good afternoon, may I assist you with something today?\"...\n", " [Step 1/3] Candidate 2/4: mean_reward=-48.5 prompt= Voice only, no text.\n", "Greet: \"Hello, this is XYZ Bank's voice assistan...\n", " [Step 1/3] Candidate 3/4: mean_reward=59.1 prompt= System prompt: \n", "\n", "\"Hi, I need assistance with my bank account. Could y...\n", " [Step 1/3] Candidate 4/4: mean_reward=36.2 prompt= Voice Agent: \"Hello, welcome to [Bank Name]. How can I assist you tod...\n" ] }, { "output_type": "display_data", "data": { "text/plain": [ "" ], "text/html": [ "\n", "

\n", " \n", " \n", " [1/1 00:01, Epoch 1/1]\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
StepTraining Lossrewardreward_stdcompletions / mean_lengthcompletions / min_lengthcompletions / max_lengthcompletions / clipped_ratiocompletions / mean_terminated_lengthcompletions / min_terminated_lengthcompletions / max_terminated_lengthsampling / sampling_logp_difference / meansampling / sampling_logp_difference / maxsampling / importance_sampling_ratio / minsampling / importance_sampling_ratio / meansampling / importance_sampling_ratio / maxklrewards / grpo_reward_fn / meanrewards / grpo_reward_fn / std
10.00000920.74166938.030560512.000000512.000000512.0000001.0000000.0000000.0000000.000000000000.00893720.74166947.413757

" ] }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "\n", "GRPO training complete ✓\n" ] } ], "source": [ "from trl import GRPOConfig as TRLGRPOConfig, GRPOTrainer\n", "\n", "grpo_dataset = Dataset.from_dict({\n", " \"prompt\": [META_PROMPT] * NUM_TRAINING_STEPS,\n", "})\n", "\n", "current_step = 0\n", "reward_history = []\n", "all_episode_rewards = []\n", "\n", "\n", "def grpo_reward_fn(completions, **kwargs):\n", " \"\"\"GRPO reward: evaluate each generated system prompt in Layer 2.\"\"\"\n", " global current_step\n", " rewards = []\n", " for i, completion in enumerate(completions):\n", " if isinstance(completion, list):\n", " prompt_text = completion[0].get(\"content\", str(completion))\n", " else:\n", " prompt_text = str(completion)\n", "\n", " result = evaluator.evaluate_prompt(\n", " prompt_text,\n", " num_episodes=EPISODES_PER_CANDIDATE,\n", " step_label=f\"[Step {current_step+1}/{NUM_TRAINING_STEPS}][Cand {i+1}/{len(completions)}]\",\n", " )\n", " rewards.append(result[\"mean_reward\"])\n", " all_episode_rewards.extend(result[\"rewards\"])\n", " print(f\" [Step {current_step+1}/{NUM_TRAINING_STEPS}] \"\n", " f\"Candidate {i+1}/{len(completions)}: \"\n", " f\"mean_reward={result['mean_reward']:.1f} \"\n", " f\"prompt={prompt_text[:70]}...\")\n", "\n", " reward_history.append(sum(rewards) / len(rewards))\n", " current_step += 1\n", " return rewards\n", "\n", "\n", "grpo_trainer = GRPOTrainer(\n", " model=model,\n", " args=TRLGRPOConfig(\n", " output_dir=\"./grpo_output\",\n", " num_train_epochs=1,\n", " per_device_train_batch_size=1,\n", " gradient_accumulation_steps=4,\n", " learning_rate=LEARNING_RATE,\n", " num_generations=NUM_CANDIDATES,\n", " max_completion_length=MAX_PROMPT_LENGTH,\n", " logging_steps=1,\n", " save_steps=999,\n", " ),\n", " train_dataset=grpo_dataset,\n", " reward_funcs=grpo_reward_fn,\n", " tokenizer=tokenizer,\n", ")\n", "\n", "print(f\"\\n{'='*60}\")\n", "print(f\"Starting GRPO training...\")\n", "print(f\" {NUM_TRAINING_STEPS} steps × {NUM_CANDIDATES} candidates × \"\n", " f\"{EPISODES_PER_CANDIDATE} episodes = {total_conversations} conversations\")\n", "print(f\"{'='*60}\\n\")\n", "\n", "grpo_trainer.train()\n", "print(\"\\nGRPO training complete ✓\")" ] }, { "cell_type": "markdown", "metadata": { "id": "M7SWbvKxukzj" }, "source": [ "## 10. Generate the Trained Prompt" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "YAwbbdDQukzj", "outputId": "068934ba-e523-4110-8841-777c43b5b18c" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "TRAINED SYSTEM PROMPT\n", "============================================================\n", "System Prompt:\n", "\"User: Hi, I need to check my balance.\n", "Agent: What would you like to do? [Options: Transfer, Check Balance, Block Card]\n", "User: Check Balance.\n", "Agent: Got it. You want to check your [Balance]. Is that correct?\"\n", "{\"intent\": \"check_balance\"} System Prompt:\n", "\"User: Need to transfer some money.\n", "Agent: Do you want to [Transfer], [Check Balance], or [Block Card]?\n", "User: Transfer.\n", "Agent: Sure, you want to [Transfer]. Is that right?\"\n", "{\"intent\": \"transfer\"} System Prompt:\n", "\"User: Checking my account balance.\n", "Agent: Would you like to [Transfer], [Check Balance], or [Block Card]? \n", "User: Check Balance.\n", "Agent: Alright, you want to [Check Balance]. Is that correct?\"\n", "{\"intent\": \"check_balance\"} System Prompt:\n", "\"User: I need to block my card.\n", "Agent: Do you want to [Transfer], [Check Balance], or [Block Card]? \n", "User: Block Card.\n", "Agent: Got it, you want to [Block Card]. Is that right?\"\n", "{\"intent\": \"block_card\"} System Prompt:\n", "\"User: Checking my current balance.\n", "Agent: Would you like to [Transfer], [Check Balance], or [Block Card]? \n", "User: Check Balance.\n", "Agent: Alright, you want to [Check Balance]. Is that correct?\"\n", "{\"intent\": \"check_balance\"} System Prompt:\n", "\"User: Transfer funds now.\n", "Agent: Do you want to [Transfer], [Check Balance], or [Block Card]? \n", "User: Transfer.\n", "Agent: Sure, you want to [Transfer]. Is that right?\"\n", "{\"intent\": \"transfer\"} System Prompt:\n", "\"User: Need to see my account balance.\n", "Agent: Would you like to [Transfer], [Check Balance], or [Block Card]? \n", "User: Check Balance.\n", "Agent: Alright, you want to [Check Balance]. Is that correct?\"\n", "{\"intent\": \"check_balance\"} System Prompt:\n", "\"User: Blocking my credit card.\n", "Agent: Do you want to [Transfer], [Check Balance], or [Block Card]? \n", "User: Block Card.\n", "Agent: Got it, you want to [Block Card]. Is that right?\"\n", "{\"intent\": \"block_card\"} System Prompt:\n", "\"User: Checking my account balance.\n", "Agent: Would you like to [Transfer], [Check Balance], or [Block Card]? \n", "User: Check Balance.\n", "Agent: Alright, you want to [Check Balance]. Is that correct\n", "============================================================\n" ] } ], "source": [ "FastLanguageModel.for_inference(model)\n", "\n", "inputs = tokenizer(META_PROMPT, return_tensors=\"pt\").to(model.device)\n", "outputs = model.generate(**inputs, max_new_tokens=MAX_PROMPT_LENGTH, temperature=0.3)\n", "trained_prompt = tokenizer.decode(outputs[0], skip_special_tokens=True)\n", "\n", "# Strip the meta-prompt prefix if the model echoed it\n", "if META_PROMPT in trained_prompt:\n", " trained_prompt = trained_prompt.split(META_PROMPT)[-1].strip()\n", "\n", "print(\"TRAINED SYSTEM PROMPT\")\n", "print(\"=\" * 60)\n", "print(trained_prompt)\n", "print(\"=\" * 60)" ] }, { "cell_type": "markdown", "metadata": { "id": "kThpAHvEukzj" }, "source": [ "## 11. Post-Training Evaluation\n", "\n", "Run the trained prompt on fresh personas and compare against the baseline.\n", "This mirrors the MedAgentBench eval pattern: run N episodes, collect rewards,\n", "and compare to a known baseline." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "BIZqzJDqukzk", "outputId": "7174d04e-8266-48ac-ff2c-3bc3f840255d" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Evaluating BASELINE (10 episodes)...\n", "Evaluating TRAINED (10 episodes)...\n", "\n", "--- Per-episode rewards ---\n", "Episode Baseline Trained Delta\n", "------------------------------------------\n", "1 10.0 -10.2 -20.2\n", "2 -30.0 -50.2 -20.2\n", "3 -30.0 -50.2 -20.2\n", "4 -30.0 -50.2 -20.2\n", "5 -30.0 -50.2 -20.2\n", "6 -30.0 -50.2 -20.2\n", "7 -30.0 -50.2 -20.2\n", "8 -30.0 -50.2 -20.2\n", "9 -30.0 -140.2 -110.2\n", "10 -30.0 -50.2 -20.2\n", "\n", "==============================================================\n", " A/B TEST RESULTS \n", "==============================================================\n", "Metric Baseline Trained\n", "--------------------------------------------------------------\n", "Intent Accuracy 0% 0%\n", "Avg Turns 10.0 9.8\n", "Injection Resistance 100% 0%\n", "Avg Reward -26.0 -55.2\n", "Reward Delta -29.2\n", "==============================================================\n" ] } ], "source": [ "BASELINE_PROMPT = \"You are a helpful customer support agent for a bank.\"\n", "N_EVAL = min(10, NUM_PERSONAS)\n", "\n", "# Fresh personas for fair eval (different seed than training)\n", "eval_personas_data = generate_personas(N_EVAL, seed=99)\n", "eval_personas = [CustomerPersona(**p) for p in eval_personas_data]\n", "\n", "eval_evaluator = PromptEvaluator(\n", " personas=eval_personas,\n", " simulator=simulator,\n", " agent_fn=agent,\n", " env_config=EnvConfig(domain=\"banking\", intents=list(BANKING_INTENTS), max_turns=10),\n", ")\n", "\n", "\n", "def detailed_eval(system_prompt, label, num_episodes=N_EVAL):\n", " \"\"\"Run eval and collect per-episode metrics.\"\"\"\n", " result = eval_evaluator.evaluate_prompt(\n", " system_prompt, num_episodes=num_episodes, step_label=f\"[{label} Eval]\"\n", " )\n", " logs = result.get(\"logs\", [])\n", " total = len(logs)\n", " correct = sum(1 for l in logs if l.get(\"intent_correct\"))\n", " inj_attempted = sum(1 for l in logs if l.get(\"injection_attempted\"))\n", " inj_succeeded = sum(1 for l in logs if l.get(\"injection_succeeded\"))\n", " avg_turns = sum(l.get(\"turns\", 0) for l in logs) / total if total else 0\n", "\n", " return {\n", " \"label\": label,\n", " \"accuracy\": correct / total if total else 0,\n", " \"avg_turns\": avg_turns,\n", " \"inj_resistance\": (\n", " (inj_attempted - inj_succeeded) / inj_attempted\n", " if inj_attempted > 0 else 1.0\n", " ),\n", " \"avg_reward\": result[\"mean_reward\"],\n", " \"rewards\": result[\"rewards\"],\n", " \"logs\": logs,\n", " }\n", "\n", "\n", "print(f\"Evaluating BASELINE ({N_EVAL} episodes)...\")\n", "base_result = detailed_eval(BASELINE_PROMPT, \"Baseline\")\n", "\n", "print(f\"Evaluating TRAINED ({N_EVAL} episodes)...\")\n", "trained_result = detailed_eval(trained_prompt, \"Trained\")\n", "\n", "# Per-episode breakdown (like MedAgentBench reference)\n", "print(f\"\\n--- Per-episode rewards ---\")\n", "print(f\"{'Episode':<10} {'Baseline':>10} {'Trained':>10} {'Delta':>10}\")\n", "print(f\"{'-'*42}\")\n", "for i in range(N_EVAL):\n", " b = base_result[\"rewards\"][i] if i < len(base_result[\"rewards\"]) else 0\n", " t = trained_result[\"rewards\"][i] if i < len(trained_result[\"rewards\"]) else 0\n", " print(f\"{i+1:<10} {b:>10.1f} {t:>10.1f} {t-b:>+10.1f}\")\n", "\n", "print(f\"\\n{'='*62}\")\n", "print(f\"{'A/B TEST RESULTS':^62}\")\n", "print(f\"{'='*62}\")\n", "print(f\"{'Metric':<25} {'Baseline':>15} {'Trained':>18}\")\n", "print(f\"{'-'*62}\")\n", "for metric, key in [(\"Intent Accuracy\", \"accuracy\"),\n", " (\"Avg Turns\", \"avg_turns\"),\n", " (\"Injection Resistance\", \"inj_resistance\"),\n", " (\"Avg Reward\", \"avg_reward\")]:\n", " b = base_result[key]\n", " t = trained_result[key]\n", " fmt = \".0%\" if key in (\"accuracy\", \"inj_resistance\") else \".1f\"\n", " print(f\"{metric:<25} {b:>15{fmt}} {t:>18{fmt}}\")\n", "\n", "delta = trained_result[\"avg_reward\"] - base_result[\"avg_reward\"]\n", "print(f\"{'Reward Delta':<25} {'':>15} {delta:>+18.1f}\")\n", "print(f\"{'='*62}\")" ] }, { "cell_type": "markdown", "metadata": { "id": "TcGs6Ajeukzk" }, "source": [ "## 12. Training Reward Curve" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 524 }, "id": "_HdxFt5gukzk", "outputId": "910eac9d-821d-40c4-e854-a13bd76358ac" }, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "

" ], "image/png": "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2vXo0cNalhXX/PnzczyexWIx7r//fiMwMNDm9/bKNs3Sr18/w9/f30hJSbGWtW3b1ihdunS2ujkdt3bt2kZYWJhx6tQpa9kvv/ximM1mo3v37tnO+cq/V8MwjIceesgoWrRojucBAADcT5UqVYzevXsbhmEYGzZsMCQZW7duzbFu69atjUceecS6nNUP/O6776x91j179hj9+vUzzGazsWrVqnzFEhAQYNOHiouLM0qWLGlERkYaEyZMMGbPnm088MADhiTjjTfesNabO3euIcl45JFHjLffftuYPn260bt3b2PgwIGGYVzu63Tu3Nm63cKFC42FCxca58+fzzWWHj16GAEBAdnKH3nkEUOSsXfvXmvZBx98YJhMJqN169bGjBkzjMmTJxtlypQxQkJCjMOHD1vrNWzY0AgODjZGjx5tvPvuu8akSZOMFi1aGOvXr7fW+W8/NEvp0qVtrk3W+4C1a9cahmEYq1atMmrXrm0UK1bMen6ff/55nq4PgFsHc9oCkIeHhzw8PCRdHiV79uxZWSwW1atXTzt37rTWq1SpkurXr6+YmBg99dRTkqTTp0/rm2++0QsvvGD9yvqSJUtUtWpVValSRSdPnrRuf/fdd0uS1q5dq4YNG1rLmzVrZn1Agjt777339N5771mXfX19NXjw4GzzVPXo0cNmioft27dbR1JeOadp27ZtVaVKFS1fvjzbaMknn3zS+jokJESVK1fWoUOH1LFjR2t55cqVFRISkm1kgST17dtXXl5e1uWnn35a//d//6cVK1bkOL3BtSQnJ0uSChUqlGudrHVZ00Fkad++vW677Tbr8p133qn69etrxYoVmjp1ar5jyXLlNfLw8FC9evX0999/q3fv3tbyrGuX0zXKzcSJE7Vs2TJ9+umnNr+3V7ZpcnKyUlNT1aRJE7399tvat2+fatWqla/4T5w4oV27dumFF15QkSJFrOU1a9bUvffeqxUrVmTbJuvvMkuTJk30+eefKykpSUFBQfk6PgAAcC07duzQvn37NGPGDElS48aNVbJkScXExOh///ufTd2LFy9q3bp1mj17drb9tGzZ0mbZx8dH8+bNs36z6XqNGjVKmZmZ+vXXX63fNHvqqafUuXNnjRs3Tv369ZOfn5+WL1+u6tWra8mSJTnup2bNmrrjjjv00UcfqX379vn6Fl7We49z587piy++0Geffabbb79dlStXliSdP39eAwcO1JNPPqm5c+dat+vRo4cqV66sSZMmae7cuTp79qw2bdqkV199VUOHDrXWGzlyZH4vS46yvvl15swZm2diSLrm9QFw6yBpC0CS9P777+v111/Xvn37lJ6ebi0vW7asTb3u3btrwIAB+uuvv1S6dGktWbJE6enpNk+8P3jwoPbu3avQ0NAcj5WQkGCz/N9jFJTTp08rLS3turYtUqSIvL29r1rnwQcf1IABA2QymVSoUCFVr15dAQEB2er993z/+usvSbJ2Jq9UpUoV/fDDDzZlvr6+2a5tcHCwSpYsaTPXa1b5lXPVZqlYsaLNcmBgoIoXL57vr51lyUrIJicn5/qwiNwSu/+NRbr8AcEnn3xyXbFkKVWqlM1ycHCwfH19VaxYsWzlp06dytM+V65cqfHjx2vkyJF6+OGHbdb99ttvGj16tL7//vtsielz587lO/6r/V5UrVpV3377rS5cuGDzO/bfcy5cuLCky1N1kLQFAMC9xcTEKDw8XC1atJB0+av5nTp10qJFi/T6669bB2FIl6cfS01NzfFhuLNmzVKlSpUkSfHx8Vq0aJGefPJJFSpUSB06dLiu2AzD0GeffaaOHTvKMAybgRtRUVFavHixdu7cqUaNGikkJER///23tm3bli3ZfCMuXLiQrY/cuHFjvf/++9Y+8urVq3X27Fl17tzZJkYPDw/Vr1/f+kwPPz8/eXt7a926derdu7e1T+UIBXV9ALgfkrYAtGjRIvXs2VPt27fXsGHDFBYWZp1b9Y8//rCp+9hjj2nQoEGKiYnR//3f/2nRokWqV6+eTWLJYrGoRo0auY6SjIyMtFl21IPFOnTooPXr11/XtmvXrr3qg7gkqWTJktlGLuTkRs/3yg55XsqNf+apLUhVq1bVF198od27d6tp06Y51tm9e7ckOWxUdU7X40au0eHDh9W1a1fde++9eumll2zWnT17Vs2aNVNQUJAmTJig8uXLy9fXVzt37tTw4cNlsViu7yTyyZm/AwAAoOBkZmZq8eLFatGihc3zCurXr6/XX39da9asUatWrazly5cvV7169RQeHp5tX3feeafq1atnXe7cubPq1KmjAQMG6P7777/mQIWcJCYm6uzZs5o7d67NCNYrZQ3cGD58uL777jvdeeedqlChglq1aqUuXbqoUaNG+T7ulXx9fa3PWfj77781ZcoUJSQk2PS9Dx48KOnfbwD+V9aH3D4+Ppo8ebKGDBmi8PBw3XXXXbr//vvVvXt3RURE3FCc11JQ1weA+yFpC0CffvqpypUrp6VLl9qM1Bw7dmy2ukWKFFHbtm0VExOjrl276scff8z2IKXy5cvrl19+0T333JNt5Kczvf766zmOOs2L/H61PT9Kly4tSdq/f3+2DuT+/fut6+3p4MGD1lEa0uWvip04cUL33XeftSw/bXf//fcrOjpaH3zwQY5J28zMTH344YcqXLhwtg5nVuf5SgcOHLD5Kpyzf48uXbqkDh06KCQkRB999JHMZtvneK5bt06nTp3S0qVLbc4/p4fA5fVcrvy9+K99+/apWLFiOY7kBgAAN5/vv/9eJ06c0OLFi7V48eJs62NiYmyStitWrFCvXr3ytG+z2awWLVpo+vTpOnjwoKpXr57v+LI+oO7WrZt69OiRY52aNWtKuvxh//79+7Vs2TKtXLlSn332md566y2NGTPmhh6g6uHhYTOAIioqSlWqVFG/fv301Vdf2cS5cOHCHJOvVz6M7fnnn1e7du30xRdf6Ntvv9WLL76o6Ohoff/996pTp85VY8nMzLzu8yio6wPA/ZC0BWAdnWcYhjWhtGXLFm3evDnb160l6fHHH1eHDh00bNgweXh46LHHHrNZ37FjR61YsULvvPOO+vbta7Pu0qVLslgsTkk21a1b1+HHzIt69eopLCxMc+bM0RNPPCEfHx9Jl59qu3fvXo0ZM8bux5w7d6569eplndd29uzZysjIsPkKXUBAgM6ePZun/TVs2FAtW7bU/Pnz1b59e91///0260eNGqUDBw4oOjo620jjL774QseOHbPOa7t161Zt2bLFZi7grN+Xs2fP5jr9QkF66qmndODAAW3evDnHr8dd+TeUJS0tTW+99Va2ugEBAXmaLqF48eKqXbu23n//fY0cOdJ63nv27NGqVauyzX8GAABuXjExMQoLC9OsWbOyrVu6dKk+//xzzZkzR35+ftqzZ49iY2PVtm3bPO8/IyND0uUP8q9HaGioChUqpMzMzDx98ywgIECdOnVSp06dlJaWpg4dOujll1/WyJEj5evra5cP7IsXL65BgwZp/Pjx+umnn3TXXXepfPnykqSwsLA8xVm+fHkNGTJEQ4YM0cGDB1W7dm29/vrrWrRokaTLU1H9t7+clpamEydOXHPfVzvHa10fALcGkrbALWLevHlauXJltvLnnntO999/v5YuXaqHHnpIbdu21eHDhzVnzhxVq1Ytx45b27ZtVbRoUS1ZskRt2rRRWFiYzfrHH39cn3zyiZ566imtXbtWjRo1UmZmpvbt26dPPvlE3377rc1XsvLjr7/+0sKFCyVdfoCXJOtX1UuXLm0zt6678PLy0uTJk9WrVy81a9ZMnTt3Vnx8vKZPn64yZcpo0KBBdj9mWlqa7rnnHnXs2FH79+/XW2+9pcaNG9s8hKxu3bqaPXu2XnrpJVWoUEFhYWG5fpVMkj744APdc889evDBB9WlSxc1adJEqampWrp0qdatW6dOnTpp2LBh2barUKGCGjdurKefflqpqamaNm2aihYtqhdeeMEmFkkaOHCgoqKicvywoKAsX75cH3zwgR5++GHt3r3bOs2DdHku4Pbt26thw4YqXLiwevTooYEDB8pkMmnhwoU5TktQt25dffzxxxo8eLD+97//KTAwUO3atcvx2K+++qratGmjBg0aqHfv3rp06ZJmzJih4OBgjRs3rqBOGQAAuJBLly5p6dKlevTRR/XII49kW1+iRAl99NFH+uqrr9SpUyetWLFC4eHhee5vp6ena9WqVfL29lbVqlWvK0YPDw89/PDD+vDDD7Vnzx7dfvvtNusTExOt882eOnXK+qAySfL29la1atX0zTffKD09Xb6+vjYf2N+IZ599Vq+++qpeeeUVffHFF4qKilJQUJAmTZqkFi1a2DyY98o4L168KLPZbJMgLV++vAoVKqTU1FSbsg0bNtjsY+7cuXkaaZvbB/l5uT4Abg0kbYFbRE5PjpWknj17qmfPnoqLi9Pbb7+tb7/9VtWqVdOiRYu0ZMkSrVu3Lts23t7e6tSpk956660ck6Rms1lffPGF3njjDX3wwQf6/PPP5e/vr3Llyum5556zPvjgehw+fFgvvviiTVnWcrNmzdwyaStdbgd/f3+98sorGj58uAICAvTQQw9p8uTJBTKydObMmYqJidGYMWOUnp6uzp07680337T5xH/MmDH666+/NGXKFCUnJ6tZs2ZXTdoWL15cW7du1euvv64lS5bos88+k6enp2rWrKkFCxaoe/fuOY4o6N69u8xms6ZNm6aEhATdeeedmjlzpooXL26t06FDBz377LNavHixFi1aJMMwHJa0TUxMlCR99tln+uyzz2zWlS5dWu3bt1fRokW1bNkyDRkyRKNHj1bhwoXVrVs33XPPPYqKirLZ5plnntGuXbs0f/58vfHGGypdunSuSduWLVtq5cqVGjt2rMaMGSMvLy81a9ZMkydPdtgD/AAAgHN99dVXSk5Otvlw/Up33XWXQkNDFRMTo06dOmn58uVq06ZNriM5v/nmG+3bt0/S5XlmP/zwQx08eFAjRoy4oQeXvvLKK1q7dq3q16+vPn36qFq1ajp9+rR27typ7777TqdPn5YktWrVShEREWrUqJHCw8O1d+9ezZw5U23btrU+sDbrA/tRo0bpsccek5eXl9q1a5fvb+sVLVpUvXr10ltvvaW9e/eqatWqmj17th5//HHdcccdeuyxxxQaGqrY2FgtX75cjRo10syZM3XgwAHrAIdq1arJ09NTn3/+ueLj4236oE8++aSeeuopPfzww7r33nv1yy+/6Ntvv8324Nuc5PZBfl6uD4BbhAEA1+H55583ChUqZFy4cMHZoSAf5s+fb0gytm3b5uxQjMOHDxuSjFdffdXZoQAAALisdu3aGb6+vlftd/fs2dPw8vIyjhw5Ynh6ehqffPJJtjpZ/cArf3x9fY3atWsbs2fPNiwWS77iCggIMHr06GFTFh8fb/Tv39+IjIw0vLy8jIiICOOee+4x5s6da63z9ttvG02bNjWKFi1q+Pj4GOXLlzeGDRtmnDt3zmZfEydONG677TbDbDYbkozDhw/nGkuPHj2MgICAHNf98ccfhoeHh02sa9euNaKioozg4GDD19fXKF++vNGzZ09j+/bthmEYxsmTJ43+/fsbVapUMQICAozg4GCjfv362a5rZmamMXz4cKNYsWKGv7+/ERUVZRw6dMgoXbp0tuNJMtauXWstO3/+vNGlSxcjJCTEkGSULl06X9cHwM3PZBg8UhpA/qSkpCgyMlL333+/5s+f7+xwkA8LFixQr169tG3btuueosJejhw5orJly+rVV1/V0KFDnRoLAADAzeCTTz5R165ddfLkSQUHBzs7HADADWB6BAB5lpCQoO+++06ffvqpTp06peeee87ZIQEAAAD4R0hIiN58800StgBwEyBpCyDPfv/9d3Xt2lVhYWF68803Vbt2bWeHBAAAAOAfrVq1cnYIAAA7YXoEAAAAwMXMmjVLr776quLi4lSrVi3NmDFDd955p7PDAgAAgIOYnR0AAAAAgH9lPU187Nix2rlzp2rVqqWoqCglJCQ4OzQAAAA4CCNtAQAAABdSv359/e9//9PMmTMlSRaLRZGRkXr22Wc1YsQIJ0cHAAAAR2BO2/+wWCw6fvy4ChUqJJPJ5OxwAAAAcAXDMJScnKwSJUrIbL75vjSWlpamHTt2aOTIkdYys9msli1bavPmzTluk5qaqtTUVOuyxWLR6dOnVbRoUfqzAAAALiav/VmStv9x/PhxRUZGOjsMAAAAXMXRo0dVsmRJZ4dhdydPnlRmZqbCw8NtysPDw7Vv374ct4mOjtb48eMdER4AAADs5Fr9WZK2/1GoUCFJly9cUFCQk6NxfxaLRYmJiQoNDb0pR8Pc7Gg/90cbuj/a0L3RfvaXlJSkyMhIa58N0siRIzV48GDr8rlz51SqVCn99ddfDuvPJnS+zyHHAVxB2EcrnB0C4BD1lw9wdgiAw2xpO9Nhx0pKSlLp0qWv2Z8lafsfWV8hCwoKImlrBxaLRSkpKQoKCuLNqhui/dwfbej+aEP3RvsVnJv1a//FihWTh4eH4uPjbcrj4+MVERGR4zY+Pj7y8fHJVh4SEuKw/myKp4dDjgO4gpCQEGeHADiEyd/L2SEADuPIe3vW+4Jr9Wd59wAAAAC4CG9vb9WtW1dr1qyxllksFq1Zs0YNGjRwYmQAAABwJEbaAgAAAC5k8ODB6tGjh+rVq6c777xT06ZN04ULF9SrVy9nhwYAAAAHIWkLAAAAuJBOnTopMTFRY8aMUVxcnGrXrq2VK1dmezgZAAAAbl4kbQEAyIfMzEylp6c77HgWi0Xp6elKSUlhTlQ3RPvln5eXlzw8mB91wIABGjCAB8AAAADcqkjaAgCQB4ZhKC4uTmfPnnX4cS0Wi5KTk2/aBy/dzGi/6xMSEqKIiAiuGQAAAG5ZJG0BAMiDrIRtWFiY/P39HZZMMgxDGRkZ8vT0JIHlhmi//DEMQxcvXlRCQoIkqXjx4k6OCAAAAHAOkrYAAFxDZmamNWFbtGhRhx6bpJ97o/3yz8/PT5KUkJCgsLAwpkoAAADALYnJ1QAAuIasOWz9/f2dHAlwa8j6W3Pk/NEAAACAKyFpCwBAHjFSEnAM/tYAAABwqyNpCwAAAAAAAAAuhKQtAAAAHObIkSMymUzatWuXs0MBAAAAXBZJWwC4SWVKWifpc19frftnGc6V1SYf/fOvI9okLi5Ozz33nCpUqCBfX1+Fh4erUaNGmj17ti5evGitV6ZMGZlMJplMJvn7+6tGjRp69913bfa1bt06ax2TyaTw8HA9/PDD+vPPP23qbdq0Sffdd58KFy4sX19f1ahRQ1OnTlVm5vWfcc+ePdW+ffvr3h4AAAAA3AlJWwC4CS2VVEbSPWazngkJ0T1ms8r8Uw7nyGqTFpK6/PNvGRVsm/z555+qU6eOVq1apUmTJunnn3/W5s2b9cILL2jZsmX67rvvbOpPmDBBJ06c0J49e9StWzf16dNH33zzTbb97t+/X8ePH9eSJUv022+/qV27dtaE7Oeff65mzZqpZMmSWrt2rfbt26fnnntOL730kh577DEZhlGAZwxJSktLc3YIklwnDgAAAMAdkbQFgJvMUkmPSPr7P+XH/ikncet4zmqTZ555Rp6entq+fbs6duyoqlWrqly5cnrwwQe1fPlytWvXzqZ+oUKFFBERoXLlymn48OEqUqSIVq9enW2/YWFhKl68uJo2baoxY8bo999/16FDh3ThwgX16dNHDzzwgObOnavatWurTJkyevLJJ/X+++/r008/1SeffJJrvJ9++qlq1KghPz8/FS1aVC1bttSFCxc0btw4vf/++/ryyy+to3zXrVsnSTp69Kg6duyokJAQFSlSRA8++KCOHDli3WfWCN3x48crNDRUQUFBeuqpp66aUFywYIFCQkK0bNkyVa5cWf7+/nrkkUd08eJFvf/++ypTpowKFy6sgQMH2oweTk1N1dChQ3XbbbcpICBA9evXt8YpSadOnVLnzp112223WUczf/TRRzbHbt68uQYOHKgXXnhBRYoUUUREhMaNG5drrFee48svv6wSJUqocuXK17w2e/bskdlsVmJioiTp9OnTMpvNeuyxx6z7femll9S4cWNJUmZmpnr37q2yZcvKz89PlStX1vTp0/MUx9atW1WnTh35+vqqXr16+vnnn696PgAAAABI2gLATSVT0nOSchrLmFX2vJgqwZGc1SanTp3SqlWr1L9/fwUEBORYx2Qy5VhusVj02Wef6cyZM/L29r7qcfz8/CRdHlW5atUqnTp1SkOHDs1Wr127dqpUqVK2JGWWEydOqHPnznriiSe0d+9erVu3Th06dJBhGBo6dKg6duyo1q1b68SJEzpx4oQaNmyo9PR0RUVFqVChQtq4caN+/PFHBQYGqnXr1jZJ2TVr1lj3+dFHH2np0qUaP378Vc/r4sWLevPNN7V48WKtXLlS69at00MPPaQVK1ZoxYoVWrhwod5++219+umn1m0GDBigzZs3a/Hixdq9e7ceffRRtWnTRgcPHpQkpaSkqG7dulq+fLn27Nmjvn376vHHH9fWrVttjv3+++8rICBAW7Zs0ZQpUzRhwoQck+dXWrNmjfbv36/Vq1dr2bJl17w21atXV9GiRbV+/XpJ0saNG22WJWn9+vVq3ry5pMu/EyVLltSSJUv0+++/a8yYMfq///u/bEn4/8Zx/vx53X///apWrZp27NihcePG5fj7AQAAAMCWp7MDAADYz0ZlH815JUPS0X/qNXdEQDe5epLirlEnVdLJq6zPapMIST65VfL897/rCEnb8xDboUOHZBiGdbRjlmLFiiklJUWS1L9/f02ePNm6bvjw4Ro9erRSU1OVkZGhIkWK6Mknn8z1GCdOnNBrr72m2267TZUrV9aKFSskSVWrVs2xfpUqVXTgwIFc95WRkaEOHTqodOnSkqQaNWpY1/v5+Sk1NVURERHWskWLFslisejdd9+1JqDnz5+vkJAQrVu3Tq1atZIkeXt7a968efL391f16tU1YcIEDRs2TBMnTpTZnPPn1+np6Zo9e7bKly8vSXrkkUe0cOFCxcfHKzAwUNWqVVOLFi20du1aderUSbGxsZo/f75iY2NVokQJSdLQoUO1cuVKvf/++3rllVd022232SQsn332WX377bf65JNPdOedd1rLa9asqbFjx0qSKlasqJkzZ2rNmjW69957c2sKBQQE6N1337Um2fNybZo2bap169bpkUce0bp169SrVy+9++672rdvn8qXL69NmzbphRdekCR5eXnZJLrLli2rzZs365NPPlHHjh1zjWPu3LmyWCx677335Ovrq+rVq+vvv//W008/neu5AAAAACBpCwA3lRN2roeri9PlKQ7sIdfEbi6jYa/X1q1bZbFY1LVrV6WmptqsGzZsmHr27KkTJ05o2LBheuaZZ1ShQoVs+yhZsqQMw9DFixdVq1YtffbZZzYjcq9n3tpatWrpnnvuUY0aNRQVFaVWrVrpkUceUeHChXPd5pdfftGhQ4dUqFAhm/KUlBT98ccfNvv29/e3Ljdo0EDnz5/X0aNHrQni//L397cmbCUpPDxcZcqUUWBgoE1ZQkKCJOnXX39VZmamKlWqZLOf1NRU6zlkZmZq0qRJ+uSTT3Ts2DGlpaUpNTXVJjbpctL2SsWLF7ceJzc1atSwaYO8XJtmzZpp7ty5ki6Pqp00aZIOHDigdevW6fTp00pPT1ejRo2s286aNUvz5s1TbGysLl26pLS0NNWuXfuqcezdu1c1a9aUr6+vtaxBgwZXPRcAAAAAbpS0jY6O1tKlS7Vv3z75+fmpYcOGmjx5ss0IopSUFA0ZMkSLFy9WamqqoqKi9NZbbyk8PNyJkQOA4xS3cz1cXcS1q1xzpG2WYsplpO2VCVCTKU/HlKQKFSrIZDJp//79NuXlypWT9O+0BjYxFCumChUqqEKFClqyZIlq1KihevXqqVq1ajb1Nm7cqKCgIIWFhdkkBbMSlnv37lXDhg2z7X/v3r3Z9pXFw8NDq1ev1qZNm7Rq1SrNmDFDo0aN0pYtW1S2bNkctzl//rzq1q2rmJiYbOtCQ0Nz3CavvLy8bJZNJlOOZRaLxRqLh4eHduzYIQ8PD2sdwzCsCctXX31V06dP17Rp01SjRg0FBATo+eefzza/7tWOk5v/ToGRl2vTvHlzPf/88zp48KB+//13NW7cWPv27dO6det05swZ1atXz5pQXrx4sYYOHarXX39dDRo0UKFChfTqq69qy5YtV40DAAAAwPVxmzlt169fr/79++unn37S6tWrlZ6erlatWunChQvWOoMGDdLXX3+tJUuWaP369Tp+/Lg6dOjgxKgBwLGaSCopKbexmSZJkf/Uw43brsvTUVztJ055a5O4XLY/KulwRoaO/rOcl6kRJKlo0aK69957NXPmTJv/K/MqMjJSnTp10siRI7OtK1u2rMqXL59tFGerVq1UpEgRvf7669m2+eqrr3Tw4EF17tw512OaTCY1atRI48eP188//yxvb299/vnnki5PcXDlQ78k6Y477tDBgwcVFhZmTTZn/QQHB1vr/fLLL7p06ZJ1+aefflJgYKAiIyPzdjHyoE6dOsrMzFRCQkK2WLKmdPjxxx/14IMPqlu3bqpVq5bKlSuX63QRNyov16ZGjRoqXLiwXnrpJdWuXVuBgYFq3ry51q9fr3Xr1lnns82KvWHDhnrmmWdUp04dVahQwWY0c26qVq2q3bt3W6fkkC5ffwAAAABX5zZJ25UrV6pnz56qXr26atWqpQULFig2NlY7duyQJJ07d07vvfeepk6dqrvvvlt169bV/PnztWnTJt4cALhleEjKep77f5OEWcvT/qkHx3Bmm7z11lvKyMhQvXr19PHHH2vv3r3av3+/Fi1apH379tmMCM3Jc889p6+//lrbt+ctVRwQEKC3335bX375pfr27avdu3fryJEjeu+999SzZ0898sgjNvOfXmnLli2aNGmStm/frtjYWC1dulSJiYnW+XHLlCmj3bt3a//+/Tp58qTS09PVtWtXFStWTA8++KA2btyow4cPa926dRo4cKD+/vvf2Z3T0tLUu3dv/f7771qxYoXGjh2rAQMG5Dqf7fWoVKmSunbtqu7du2vp0qU6fPiwtm7dqujoaOtcvxUrVrSOJt67d6/69eun+Ph4u8VwpbxcG5PJpKZNmyomJsaaoK1Zs6ZSU1O1Zs0aNWvWzLq/ihUravv27fr222914MABvfjii9q2bds14+jSpYtMJpP69Oljvf6vvfZagZwzAAAAcDNxm6Ttf507d06SVKRIEUnSjh07lJ6erpYtW1rrVKlSRaVKldLmzZudEiMAOEMHSZ9Kuu0/5SX/Kef7B47nrDYpX768fv75Z7Vs2VIjR45UrVq1VK9ePc2YMUNDhw7VxIkTr7p9tWrV1KpVK40ZMybPx3zkkUe0du1axcbGqkmTJqpcubLeeOMNjRo1SosXL7Y+FOu/goKCtGHDBt13332qVKmSRo8erddff11t2rSRJPXp00eVK1dWvXr1FBoaqh9//FH+/v7asGGDSpUqpQ4dOqhq1arq3bu3UlJSFBQUZN33Pffco4oVK6pp06bq1KmTHnjgAY0bNy7P55RX8+fPV/fu3TVkyBBVrlxZ7du31/bt260jekePHq077rhDUVFRat68uSIiItS+fXu7xyEpz9emWbNmyszMtCZtzWazmjZtah31nKVfv37q0KGDOnXqpPr16+vUqVN65plnrhlHYGCgvv76a/3666+qU6eORo0aZfPwOwAAAAA5MxnX87QQJ7NYLHrggQd09uxZ/fDDD5KkDz/8UL169cr2UJU777xTLVq0yPUNQmpqqs02SUlJioyM1JkzZ2ze1OD6WCwWJSYmKjQ01K4jmuAYtJ97y5S0wTC0PylJlYOC1NRkYoTtdUpJSdGR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7du3N/z8/IwKFSoYX375pc02v/76q9G6dWsjICDACAsLM7p162YkJiZa158/f954/PHHjYCAACMiIsJ47bXX6Gu6GUbaIk/S0tK0Y8cOtWzZ0lpmNpvVsmVLbd68OcdtUlNT5evra1Pm5+enH374wbr81VdfqV69enr00UcVFhamOnXq6J133imYk7jFFVQbNmzYUGvWrNGBAwckSb/88ot++OEHvobnAjZv3mzT3pIUFRVlbe/r+Z2AY12rDXNy7tw5SVKRIkUKNDZcW17br3///mrbtm22ugDc3/nz57Vo0SJVqFBBRYsWlSQVKlRICxYs0O+//67p06frnXfe0RtvvGHdpmvXripZsqS2bdumHTt2aMSIEfLy8pIk/fHHH2rdurUefvhh7d69Wx9//LF++OEHDRgwIF9xjRo1SkOHDtWuXbtUqVIlde7c2ToazF7HAIBb1YgRI/TKK69o7969qlmzps6fP6/77rtPa9as0c8//6zWrVurXbt2io2Nvep+xo8fr44dO2r37t2677771LVrV50+fVqSdPbsWd19992qU6eOtm/frpUrVyo+Pl4dO3a0bj9s2DCtX79eX375pVatWqV169Zp586dBXrusC9PZwcA93Dy5EllZmYqPDzcpjw8PFz79u3LcZuoqChNnTpVTZs2Vfny5bVmzRotXbpUmZmZ1jp//vmnZs+ercGDB+v//u//tG3bNg0cOFDe3t7q0aNHgZ7Traag2nDEiBFKSkpSlSpV5OHhoczMTL388svq2rVrgZ4Pri0uLi7H9k5KStKlS5d05syZfP9OwLGu1YZ+fn426ywWi55//nk1atRIt99+uyNDRQ7y0n6LFy/Wzp07tW3bNidFCcDeli1bpsDAQEmXp1UpXry4li1bJrP58niZ0aNHW+uWKVNGQ4cO1eLFi/XCCy9IkmJjYzVs2DBVqVJFklSxYkVr/ejoaHXt2tU693XFihX15ptvqlmzZpo9e3a2D9tzM3ToULVt21bS5aRA9erVdejQIVWpUsVuxwCAW9WECRN07733WpeLFCmiWrVqWZcnTpyozz//XF999dVVPxDr2bOnOnfuLEmaNGmS3nzzTW3dulWtW7fWzJkzVadOHU2aNMlaf968eYqMjNSBAwdUokQJvffee1q0aJHuueceSdL777+vkiVL2vt0UYBI2qLATJ8+XX369FGVKlVkMplUvnx59erVS/PmzbPWsVgsqlevnvVGU6dOHe3Zs0dz5swhaesC8tKGn3zyiWJiYvThhx+qevXq1nkbS5QoQRsCDta/f3/t2bPHZjQ8XNfRo0f13HPPafXq1SRBgJtIixYtNHv2bEmXn9/w1ltvqU2bNtq6datKly6tjz/+WG+++ab++OMPnT9/XhkZGQoKCrJuP3jwYD355JNauHChWrZsqUcffVTly5eXdPkbTbt371ZMTIy1vmEYslgsOnz4sKpWrZqnGK+cP7t48eKSpISEBFWpUsVuxwCAW1W9evVsls+fP69x48Zp+fLlOnHihDIyMnTp0qVrjrS98l4dEBCgoKAg67NHfvnlF61du9b6IeGV/vjjD126dElpaWmqX7++tbxIkSKqXLnyjZwaHIykLfKkWLFi8vDwUHx8vE15fHy8IiIictwmNDRUX3zxhVJSUnTq1CmVKFFCI0aMULly5ax1ihcvrmrVqtlsV7VqVX322Wf2P4lbXEG14bBhwzRixAg99thjkqQaNWror7/+UnR0NElbJ4uIiMixvYOCguTn5ycPD498/07Asa7VhlcaMGCAli1bpg0bNvAJuou4Vvvt2LFDCQkJuuOOO6zrMzMztWHDBs2cOVOpqany8PBwdNgAblBAQIAqVKhgXX733XcVHBysd955R23btlXXrl01fvx4RUVFKTg4+P/bu/eYqus/juOvg8pFDgpheUEuIiKauIZUI9qYaxS1MAnwWiIFloGBTiR15i3cdF62NJtWQ7cypiFepk0NPYupKG6CmlxUxFZha0QrldDp5/cH6+T5gZcS6BTPx3b++H6/78/lez6H7/nufT58viooKNCqVavs8YsWLdKkSZO0Z88effnll1q4cKEKCgqUkJCgK1eu6I033tDbb7/dqt2AgID77uMfyy1ILU9Cl1omU0hqtzYAoKvy9PR02J49e7YOHDiglStXKiQkRB4eHkpKStL169fvWs/t12qp5Xp9+7U6Pj5ey5cvb1Wuf//+On/+/AOeBZwBSVvcF1dXV40aNUrFxcUaO3aspJYbu+Li4nuub+Xu7i4/Pz/duHFDhYWFDmusREdHq7q62iG+pqZGgYGB7X4OXV1HjeG1a9fs/+73h27dutm/TPDPiYqK0t69ex32HThwQFFRUZIe7DOBznGvMZRaZj/NmDFDRUVF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\n" }, "metadata": {} }, { "output_type": "stream", "name": "stdout", "text": [ "Chart saved to training_results.png ✓\n" ] } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "fig, axes = plt.subplots(1, 2, figsize=(14, 5))\n", "\n", "# Left: reward per GRPO step\n", "ax1 = axes[0]\n", "steps = list(range(1, len(reward_history) + 1))\n", "ax1.plot(steps, reward_history, \"o-\", color=\"cyan\", linewidth=2, label=\"GRPO step mean reward\")\n", "ax1.axhline(y=base_result[\"avg_reward\"], color=\"red\", linestyle=\"--\", alpha=0.7, label=\"Baseline\")\n", "ax1.set_xlabel(\"GRPO Step\")\n", "ax1.set_ylabel(\"Mean Reward\")\n", "ax1.set_title(\"Layer 1 — Prompt Optimization\")\n", "ax1.legend()\n", "ax1.grid(True, alpha=0.3)\n", "\n", "# Right: A/B comparison\n", "ax2 = axes[1]\n", "labels = [\"Baseline\", \"Trained\"]\n", "values = [base_result[\"avg_reward\"], trained_result[\"avg_reward\"]]\n", "colors = [\"#e74c3c\", \"#27ae60\"]\n", "bars = ax2.bar(labels, values, color=colors, width=0.5)\n", "for bar, val in zip(bars, values):\n", " ax2.text(bar.get_x() + bar.get_width() / 2, bar.get_height() + 1,\n", " f\"{val:.1f}\", ha=\"center\", fontweight=\"bold\")\n", "ax2.set_ylabel(\"Mean Reward\")\n", "ax2.set_title(\"A/B Test Results\")\n", "ax2.grid(True, alpha=0.3, axis=\"y\")\n", "\n", "plt.tight_layout()\n", "plt.savefig(\"training_results.png\", dpi=150, bbox_inches=\"tight\")\n", "plt.show()\n", "print(\"Chart saved to training_results.png ✓\")" ] }, { "cell_type": "markdown", "metadata": { "id": "lvpyzvtWukzk" }, "source": [ "## 13. Save Model" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "NfdOgItFukzk", "outputId": "f87bd0fb-8185-4bef-e922-7e138144b02b" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Saved LoRA adapter to ./grpo_output ✓\n", "Trained prompt saved ✓\n", "A/B results saved ✓\n" ] } ], "source": [ "os.makedirs(\"./grpo_output\", exist_ok=True)\n", "\n", "grpo_trainer.save_model(\"./grpo_output\")\n", "tokenizer.save_pretrained(\"./grpo_output\")\n", "print(\"Saved LoRA adapter to ./grpo_output ✓\")\n", "\n", "with open(\"./grpo_output/trained_prompt.txt\", \"w\") as f:\n", " f.write(trained_prompt)\n", "print(\"Trained prompt saved ✓\")\n", "\n", "ab_results = {\n", " \"baseline\": {k: v for k, v in base_result.items() if k != \"logs\"},\n", " \"trained\": {k: v for k, v in trained_result.items() if k != \"logs\"},\n", " \"reward_history\": reward_history,\n", " \"all_episode_rewards\": all_episode_rewards,\n", " \"config\": {\n", " \"model\": MODEL_NAME, \"lora_r\": LORA_R, \"lora_alpha\": LORA_ALPHA,\n", " \"steps\": NUM_TRAINING_STEPS, \"candidates\": NUM_CANDIDATES,\n", " \"episodes_per_candidate\": EPISODES_PER_CANDIDATE,\n", " \"personas\": NUM_PERSONAS, \"sft_warm_start\": SFT_WARM_START,\n", " },\n", "}\n", "with open(\"./grpo_output/ab_results.json\", \"w\") as f:\n", " json.dump(ab_results, f, indent=2)\n", "print(\"A/B results saved ✓\")" ] }, { "cell_type": "markdown", "metadata": { "id": "m6OdjSxhukzk" }, "source": [ "## 14. Push to HuggingFace Hub (Optional)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "id": "FLY7ulIrukzk" }, "outputs": [], "source": [ "# from huggingface_hub import login\n", "#\n", "# HF_REPO_ID = \"YOUR_USERNAME/nested-rl-banking-agent\"\n", "#\n", "# login(token=HF_TOKEN)\n", "# model.push_to_hub(HF_REPO_ID, token=HF_TOKEN)\n", "# tokenizer.push_to_hub(HF_REPO_ID, token=HF_TOKEN)\n", "# print(f\"Pushed to https://huggingface.co/{HF_REPO_ID}\")" ] }, { "cell_type": "markdown", "metadata": { "id": "r0gDJxVaukzk" }, "source": [ "## 15. Load from HuggingFace (Optional)\n", "\n", "Re-load the pushed model on any machine — no repo clone needed." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "gVjwSPOcukzl", "outputId": "db9fc1a6-bef7-4173-a702-8809eb43e242" }, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "\n", "============================================================\n", "ALL DONE — Training + Evaluation + A/B Test complete\n", "============================================================\n" ] } ], "source": [ "# from unsloth import FastLanguageModel\n", "#\n", "# HF_REPO_ID = \"YOUR_USERNAME/nested-rl-banking-agent\"\n", "#\n", "# model, tokenizer = FastLanguageModel.from_pretrained(\n", "# model_name=HF_REPO_ID,\n", "# max_seq_length=4096,\n", "# load_in_4bit=True,\n", "# )\n", "# FastLanguageModel.for_inference(model)\n", "# print(f\"Loaded {HF_REPO_ID} from HuggingFace Hub ✓\")\n", "\n", "print(f\"\\n{'='*60}\")\n", "print(\"ALL DONE — Training + Evaluation + A/B Test complete\")\n", "print(f\"{'='*60}\")" ] } ] }