diff --git a/.devcontainer/post_create_command.sh b/.devcontainer/post_create_command.sh index a958832aa9..a26fd076ed 100755 --- a/.devcontainer/post_create_command.sh +++ b/.devcontainer/post_create_command.sh @@ -6,11 +6,10 @@ cd web && pnpm install pipx install uv echo "alias start-api=\"cd $WORKSPACE_ROOT/api && uv run python -m flask run --host 0.0.0.0 --port=5001 --debug\"" >> ~/.bashrc -echo "alias start-worker=\"cd $WORKSPACE_ROOT/api && uv run python -m celery -A app.celery worker -P threads -c 1 --loglevel INFO -Q dataset,generation,mail,ops_trace,app_deletion,plugin,workflow_storage\"" >> ~/.bashrc +echo "alias start-worker=\"cd $WORKSPACE_ROOT/api && uv run python -m celery -A app.celery worker -P threads -c 1 --loglevel INFO -Q dataset,priority_dataset,priority_pipeline,pipeline,mail,ops_trace,app_deletion,plugin,workflow_storage,conversation,workflow,schedule_poller,schedule_executor,triggered_workflow_dispatcher,trigger_refresh_executor\"" >> ~/.bashrc echo "alias start-web=\"cd $WORKSPACE_ROOT/web && pnpm dev\"" >> ~/.bashrc echo "alias start-web-prod=\"cd $WORKSPACE_ROOT/web && pnpm build && pnpm start\"" >> ~/.bashrc echo "alias start-containers=\"cd $WORKSPACE_ROOT/docker && docker-compose -f docker-compose.middleware.yaml -p dify --env-file middleware.env up -d\"" >> ~/.bashrc echo "alias stop-containers=\"cd $WORKSPACE_ROOT/docker && docker-compose -f docker-compose.middleware.yaml -p dify --env-file middleware.env down\"" >> ~/.bashrc source /home/vscode/.bashrc - diff --git a/api/constants/pipeline_templates.json b/api/constants/pipeline_templates.json new file mode 100644 index 0000000000..32b42769e3 --- /dev/null +++ b/api/constants/pipeline_templates.json @@ -0,0 +1,7343 @@ +{ + "pipeline_templates": { + "en-US": { + "pipeline_templates": [ + { + "id": "9f5ea5a7-7796-49f3-9e9a-ae2d8e84cfa3", + "name": "General Mode-ECO", + "description": "In this template, the document content is divided into smaller paragraphs, known as general chunks, which are directly used for matching user queries and retrieval in Economical indexing mode.", + "icon": { + "icon_type": "image", + "icon": "52064ff0-26b6-47d0-902f-e331f94d959b", + "icon_background": null, + "icon_url": "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAoKADAAQAAAABAAAAoAAAAACn7BmJAAAT1klEQVR4Ae1dzXPcRBbvlsZ2xo6dcbwXinyMC+IDW5WY08IJh2NyIFRxJLvhHyDxaWv3kuS0e4v5CwjLHqmCHMgxMbVbBZxIOEAVCWXnq7hsMiaJPf4aad9Pmh5rNBqPPmdamtdVdkutVuv1r396\/fX0RgpNwspvterurqjatqiatlWxhKgYUhyHeLaQFYrwh5OqE3v+SSkqtrruSS\/yoRRijbBa89bRSZN7aVLYq7hu2eKBgfzSWLXpeqkkVmdfmXau4fogA8nc37CyUqs0TLEghfUOEatKhJoXspNU\/ZVqOJ8mbXGHCLlq2\/ZdKY07ZkMsz85Ot5E6a2T6QsB7j2oL9Aa+QxVdoArhryMYhiEMUnmmaQpJKg1\/SEMgcJxzHJumm4ZjFVR+dT4MMWEp8OcNOLdI3algWQ3KQ52GbTl5LcuNGw2L8lEfExBASiHt5YZhfDZ3ZPpOQJZUkzIjIDSdZVgXbCnfI4kXlNQgS6lkOkQD2UZGRlqEU3k47g8CjUZDgIy7uzsUN8TOzm7bg4kcq0Tpq68f+8P1tgspnqROQId4JXGRXrlLalwG0o2NjRLZRh3y4ZyDngiAhNvbWw4ZlZYEEUlLXH\/t6PTVtKVOlQn3H\/7vnLSNazSuqELQkZGSOHCg7MRpC87lZY\/A1tZ2i4x4GoiYtkZMhYCk9aoN0\/6UZFyAoEw8oFCcAK24vr7uHTd+ZY7IxTRm0okJuPKodtGy7SvobtG1lstl0npjxUGfa9JCABqxXq8rItJs2VpMOj6MTUBnrGeKyzQXuwQJR0dHxMTERGu22pKaDwqFAMaFICHIiEDtv3Ti2Mxi3ErGIiC6XMuwv6Sx3jxrvbjQ5\/u+zc0th4hY+sHSjTEq34\/TJUcmYJN8tzHRwDrd1NRka70u35Cy9FERgDZ8\/vyF0yUTkVaNEXk6KgkjEdBLPqzhTU4eZPJFbbWC5QcJX7x46awjxiFhaAL6yQfNx+t5BWNTzOqgG4YmxGJ2VBKGIiCTL2bLDNFtcUnYubEaAFpzwlFFt8uaLwAgTnJ6Q3ADHKEluaq1bX9JiqvSC5qeBPz1YQ07G\/OYcGDMx91uL0iH9zq4oeYF4MyuaV3uhca+XTBtrV0QwvgUBR86NMUTjl5o8nUHAUxMfv\/9uWOBQ13z4onjM0vdoOlKQGfcZ9o\/YIdjfHycdze6IcjpgQhgnXBjYwPX1mjb7s1uyzNdu2Da270G8sGKhbfWAjHmxH0QAGewO0ah0thx7AQCcwcS0O16xTmM+7C3y4ERiIOAZ2t24f7D2rmgMgIJSCZVzuAR5FNWyUE3cxojsB8CmDsoBUbfp1wLmhV3EPDXR7XLapsN3S8HRiAJAuiKYZ5Hw7nqrmE5hive8joISJ9QXUAGqE8OjEAaCMAoGYE04kW\/FmwjIMZ+0H5gLP44MAJpIODhU4W04AVvmW0EVGO\/0VE2KPWCxMfJEfBoQXyk1gotAq48rs3z2K+FCx+kjAC0ICYlFBbwma4qvkVA+jzvAhK561XQcJw2Aq1JrWUtqLJbBJSGfAeJ3P0qaDhOGwF8lotAmtDhGo4dAmJmQiZd80hgDQgUOGSBABwSqG5YzYYdAjbMxgIeyOTLAnYuUyEA8oGECPAPhNghoG1LR\/sZhnsRFzgwAlkgAHtBJ9juONAhIDHzFBLhp4UDI5AlAoqAjmc0elCTgKKKhwZ5nkI6B0YgLQSUkqPe2FF6zS7YnYAodqb1MC6HEfAj0JyEILmKfyWajVTJixxbvQCNnISNDUvcvl0X9+7tiKfPGuLp04Yj+fi4IY68WhKnTo2KkyfHxMyMfmN6EBAWVrCahldciVVpadu3MQOenJzMSRMMp5gg2uefvxC\/3HPdYvRC4a23DoizZya0IyLM9fEJJ\/mOPF2SdqOCoaBHNfaqV9+v443\/\/vtN8csvO+Lxk93WG3\/kSEnMHDbpjR8TADvrMEg5bt3eEDdvbpCZe7Bn06C6f\/fdprh7d8sh4bvvjgdlGUgalmKcb4jtRlX++uDpJWLitbGxMTLB0kdIhQwA\/PzfL3oCj+4Gb3tWRBykHF\/fXBdff72uIIkVA5uzZ\/UwscO3IvhmBB8sleCNHlvE8M+sW\/jii5cCb36YgO7pX58\/d7Rj2kAPUg7UP4h8cydonEdjvVOesd7jx7viEf3dvPmScGjXlCBxuSyFDprQ09tWSrBUBfU8iWHaO\/M8ACws+bzC4L563RIffJDOeHaQcuClQrfrDePjUpwhbfbu6c7eCkMS\/L1Nw5FbNEm5SVpzg7BQAXXBcGXQkxP1mYchjePOMgwE1ImAGLsEvfUKyF4xwEeXmTQMWg4QxjvmA\/kuXZwOJJ+\/ru+eLotLlypivNxqYnoxbZrEPPdnHeg59bzyOCTQaRsOwCcN6I69b3+c8gYpB7QfXgBvgOaDhgsbkPeMb9z3Cy3dJMUl7PO75VPKjjzrTu+9Ht1y9zkdoAP8pAFv+3fftjdglDIHLcfdH9s1+MyMEUrz+esITTh3on2L9fatuj9bX8\/xuy8ItCR4SDsC3kmh61Rohl0vU\/m98aDl+PFu+1rfmTMHveJFOj5J4z5vuBdyHdF7T1bH1AO7v8Gmyyy4Riv7aYUnT+KXNWg5MKP1BuxwxA2YKXvD02d7ExNver+OPTYHVYN+xYkWovWZhGAZIa2QpCsftBz+cdrRo\/EJ6J\/1JsElrbZR5WjXBSvBOB4OBLQjoP9tTdIMRyPMGP3PGbQc\/ucn0Vp+bY4FaV2CdgR8NcFYxw\/q9OH41Ru0HDM+2ZOsaz7xDWuOHmmfFftx6+d5axKi1mb6+fCgZ83NpQfOqVPxDRQGLceJuXa\/PD\/6lmWCsOuW5l\/PPHmyvexu92WV7uFaxaCtOK0mIW+\/VW5bvY8LAtbNsCUVNwxaDv9WGxaQb91q35YLUzdsZ\/q7b2zHDTK0EXCQggQ9G+OT839Ovo+bZN0Mcg1aDjzfv4AMTeYfzwVhqNKwlOPfS4a1kH98qfIPIo4\/SMpQWqxbJbHagOlREu2nqjZoOc6fn2rrDbC7s7RUC6UJofmWPlnr2EsGNjoF8+PFv16BQMqRoC7CvfEGjVNosgaz8yjhNFmJnDsXf9fA\/6xBygET+9KIFD\/9tLcrskvLpD\/9vC2+IwNdZWgwNeXqEXS1MNy9cWNd\/Oe\/dfrRaRpgecJ77x0Uf3xjsN2vEqded7dJ5f2HzxwpDx+eVte0ir+lveEg+za\/kLAU+fDDKTGf0fhmkHKg601iHQSsdDJIhTzPntUQCe0J6EhJ\/0CAH2mf+Blt1alxEMYy2KI6QTPnt\/50QEBjZB0GJUeQfV+Yuu5nPxjm\/qzy5I6AWQGRp3LRxUIb+s20utUBVtPnz09qNelQsjIBFRI5jEFEmGvBYubxE7Lv23DHeugR8JEWeoTTC7Sc1YceIS58TMC4yPF9qSCgCJj9oCkVcbmQoiLABCxqy+akXkzAnDRUUcVkAha1ZXNSLyZgThqqqGIyAYvasjmpFxMwJw1VVDGZgEVt2ZzUiwmYk4Yqqpjxv\/UrKiL71At+WnTwTKqLHPtAFfpSbqxhQtcog4zYe9XBM6kucqQBsdqKywUB8cYHeUhV5lhZekiFZXFUz6RoIJjUwwYviWW3t6F1kcMrU5Lj3BCQPZMKxwSrqAapWo8B2TOpcJx0BpEvzx5SvZpT2y44iRk6XJIl8ZCKsdY\/\/lnr+KCnm2dSL6BBlsvojv\/+t8ORDUN1kcNbv7SOVRes5TIMLH6D3vqwlU\/qIRXk18EzqS5yhMU9Tj4tCQjgk4a4HlKhdfwm74PwTKqLHEnbodf92hGQPZO6TVZkD6leUmpHQPZM6jbP0HhI9bJRh2P2TOq2QpE9pHp5pp0GVN\/8eoWMe4xxVNSgi2dSXeSIil\/U\/NoRMGoFOH++EdCOgGl6borjIdX\/\/DhaVFHCr82xHhg26CJHWHnj5tOOgOyZ1G3KofGQGpe5Wd3HnkldZIvsIdXLHe00IHsmdZunyB5StSYgxkmD9JCK5+vgmVQXObxkyeJYOw2ISrJnUrep2UNqFpQPWSZ7JhWOdyv2kBqSMFllY8+kxTZI1dYe0E\/oYfdMGmRn6Mco6Jw9pAahkrM0LEbDRMxvptWtGll5JtVFjm71jpKuDFJzowGjVC6rvCCADp5JdZEjCc5MwCTo8b2JEVAE1HIZJnHtuIDcIMAEzE1TFVNQJmAx2zU3tWIC5qapiikoE7CY7ZqbWjEBc9NUxRSUCVjMds1NrZiAuWmqYgrKBCxmu+amVlp7x1Io6uIRlOVQLZJerPVeMPY82TPpXmPrgseeRPGP1FactgTUxSMoyxGfZPvdqQhofrz41yvIWC6X98vf12swfbpxY13s7Li\/gxvl4bu7Qvz087Zzy9zcaJRbO\/KyHB2QpJZQr286ZWk3BoTGCfIN2G+PoCxHalzbtyCtumCMcdgz6V576YLHnkTpHakuWKtlGHR57Jl0r5F1wWNPovSPtCEg3na\/yfsweybVBY\/0KddeokHuctaQZNvRB\/ztRSU708UjKMuRrB3D3O3h2ppBvNOCgLp4BGU5wlAoWZ42AiYrKr27dfEIynKk16ZhStJmDKiLR1CWIwxt0sujDQHTqxKXlCcEtCGgLh5BWY7s6WtZ7oRX0vzDEFKs4pGNhpX9k\/d5gi4eQVmOfRoppUtqEmJLEFCToItHUJajv4QAAbVYhtHFIyjL0WcCWrb9Ox5p24PtgnXxCMpyZE9Ay3J\/v0UKuapNF4xq6+IRlOXIloTeTTfYA85LKRdKJVOMjIxk++QepY+PG0IHj6AsR4+GSnh5Z2dH7JLhJk1GbshfHzy9ZEt5bWxsTExMjCcsOp3bYQUSZBMYpfSzZybE2bMTUW7pyMtydECSSsLGxobY3NwCARdLDWk7azE0Ckyl8DQKAXnKZUPc\/JrMs+rRxqZpegRlOdJozc4yLMttUymNVXnvUW1B2vZt0zTFoUNTnbkHmAKTJGghv5lWN5GK7plUFzy64R82\/cWLF\/S5BXXBUp6WKyu1asO0VwzDEJXKobBl9DUfgGfPpHuQ64LHnkTRjtbWfhfQguaInHV+Pe\/+w2dO\/zs9XRE0IYlWGudmBCIioMzxXz92WLrLMLa7Hae2SCKWx9kZgdAI7O421wBtcQc3uQSU7gmmxxwYgSwRUIvQNA15gOc0NaDtnCh2ZikAlz3cCGD9zw22VwPay0hU7HQz8H9GIH0EGo1mFyyNPQKaDXMZj4IG5HFg+qBziXsIYPkFwWyIZcROFzw7Ow2LmGWQj7thwMIhCwQU+cgQ9U6Tc80xID2NyPcNHrq97fpVyUIALnO4Edje3nIAsIXLNZy4kxDnyFhGxAQEChyyQEBpQMsyrqvyWwQ8cXR6mRKdblhlVJk4ZgSSIrC1teXsftA2x+rc7LQzAUGZLQLihPaEbyDe3Kwj4sAIpIaA6lltIa96C20joEGqkRi6Bg3IWtALEx8nQUDxCdrv9WPT171ltREQMxMy0f8EGVgLemHi4yQIrK+vO7cTtz7zl0OkbA9kHVOxDPsH+mSuOj5eFgcOHGjPwGeMQAQEMPZbX9+gr3\/F6mvHDs\/6b23TgLgILUh2Wos4hhtVXpgGEhziIIBvzZUrXv\/YT5XXQUBcoH76K4qcGfHLl676VDdwzAiERQDDuKb181f+sZ8qI5CAuGg25EekNmlCskPjQdehtLqJY0agFwL45mNraxtd7xoZnjo9atA9XQlIXfEq2UxfxU1Qo4N23REkPKfpiYDb9bpLedT1Ls6+QlzqEroSEPlfOz69RIPATzAOhB0\/k7ALipzcQgAcAVecuQNxp1vXq24gDbl\/aM6Kb9OseB4fLk1NTbLZ\/v6QDe1VkO75cyiqBm1qiDuvHT\/8Zi8w9tWAuBmzYsOS71OBqygYD+CZcS9Yh+96G\/loycUYle+HQaGnBlSF4Os5Wh+EJqyyJlSocAwEOsg3Ik\/vN+7zohaagLjJT8KDBw8K0+ypRL3P4+OCIYAx38uXL91uF5ovAvkARSQC4gYvCfEt8eTkJJMQwAxhUBMOrPURkSKTD5BFJiBuapLwS0xM8B1xuXyAt+wAzBAFrPPV63Wn+8WEA2O+sN2uF6ZYBFQF3H\/wdImmxBdxPjY2SiQsszZU4BQ0xngPxgXb281PeGmpxbSMK5isxqlyIgLigfcf1i5IYV8j1woVdMnQhvC0xaF4CLRpPdrhIOuWqyeOzywlqWliAuLh6JIbprhG86FzOAcRJyYmyN+gdr8GC\/E4REQA9nzY1\/XYiC7T9tpHcbpc\/6NTIaAq1NGGtn0ZSzVIAwFHR0dZIyqAchb7iUdkWcXWWtNYJZXapEpAJdG9B0+v0O8\/\/EURERrRJeMYa0UFkoYxxnf4LHdnZ9sxJMA5ApHEMVQuWcZS3LFet+pmQkD1ML9GVOkgIxazS6USddeITXWJ4z4hAHLhD9ZO2OHCX4BjgmVpyxuGJa6nTTxVzUwJqB6y8rg2T2tGNFmR72DpRqV7Y2hJLGpjWQfHiNUfSKqCe71dbJVP5RmGWBHIX1eszSHgVw+UBsM6ncqvSNa00\/PfjvNlyvsNNcJy80vJoDyppbW3ZGrFdi+IJiwVmrAsEEBYQzxFa0jVbqTsXgpfSQUBuOWDZzSbnFNJYxnuMrLSdN3k7TsBuwmy8lutSo6TqkTICkhpCatCv6Z9HPlp4FulyAm4jiUfdY6YlGVHmvd6EY+p4daoB13rqFvzp9cofY2Wx5zr9NNsDwxhrDXop7EIq1Ua+aymMYPteHaMhP8DKleEJHlBQFwAAAAASUVORK5CYII=" + }, + "copyright": "Copyright 2023 Dify", + "privacy_policy": "https:\/\/dify.ai\n", + "position": 1, + "chunk_structure": "text_model", + "language": "en-US" + }, + { + "id": "9553b1e0-0c26-445b-9e18-063ad7eca0b4", + "name": "Parent-child-HQ", + "description": "This template uses an advanced chunking strategy that organizes document text into a hierarchical structure of larger \"parent\" chunks and smaller \"child\" chunks to balance retrieval precision and contextual richness.", + "icon": { + "icon_type": "image", + "icon": "ab8da246-37ba-4bbb-9b24-e7bda0778005", + "icon_background": null, + "icon_url": "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAoKADAAQAAAABAAAAoAAAAACn7BmJAAAYkklEQVR4Ae2dz28cx5XHq2f4m5JIyo4R2+t46B+H1S5gGUiwa1\/EAFmvkUtsIHGOq6y9Z1vJHyDpD0iknG2vneMmBmxfFo5twPTFzmIDRAYS7cFKSMU\/FCS2RVKiSIpk975PNWtYU9M9nB\/dM8PueoLY3TXVVV2vv\/N+1auaQA0JLV27XpNHqe3K\/yAIZ1WkZitK3c\/jhUEwG8g150I1\/df+E8hn+5\/bnxT3PFArMuaVhgFyTfkeBSpa5jRU6irlUVhZrsafL8\/fPac\/4\/NBUtDvzpeWrs\/ujquFqgpPhZWgJsA6Kc9Q6\/dz+P6EA5G6FFXUsoqij6Kocqm6pRbn5+fqAO4Hj\/oCQJFuCzKYU5GKOPK\/iSqViqoEgaqOVFUgR\/5TBgVy5Bqq7pXpi70\/pr5dVvTzKBJuyn+buA6tsnB3V+oIzqJQ1w1DOYaR2pUj54kkoBTJuahGKr+Yv2vuUmKdDAtzAyCSLpwMTwdR8D153gXzzIBlpFrVQKvKcXR0tA44U8cf+8OBXQEoYNzZ3la7O7tqe2fH7XhZoHr+obvvfNX9IKvrzAEI8NSEej4KoheMXQboxsfH1OjYmAafkWZZDcK3kx0HAOHtrS21vb1jS8ll0Umvit14Prue4pYyBeCVz794qhJULkjTNZofHRlRE1OT+si1p8PFga2t2zEY9yVj5hIxEwDiwYpF8oqwdwEWe+DBheIQUnH95npdIkaBeqMSBWey8KR7BuDVv1x\/Xkzdc6hbVOvk5KSamBgvDvf9SOocQCJubGzEQJRwThiFZ3q1D7sGoLb1JtVZ8bxe4AnHxkbV9PR03VutP7U\/KRQH8J4BIWCExNa\/+ODX7zjT7SC7AqBWuVH0ugQ3T3qp1y3rD\/d9m5tbGog6FEToJgie7kYldwzAPXvvPWFfjTjdsWNH6\/G6w81S\/\/SdcgBpuLZ2w9iGeMrf7hSEHQHQBh8xvKNHj3jwdfrWClYfEN64cVMRUxTqGIRtA9AFH5LPx\/MKhqYuh4MaRhJ2A8K2AOjB1+WbKdFt3YIwnmw9gFHS+OtSpYba9ZLvAGaV9GO0IdgAI2AFzOhIyQH8OBCAS3+5fkGJt4vDgc3n1e4BHC3xx2Cj7hcIZiQX4OxB7Gipgq9c++K05Ki8QsMzM8e8w3EQN\/3nmgM4JqurazoDRyThmQfvueNiGmtSAajtviD6HTMcU1NTfnYjjYO+PJEDxAlv3boluXRqRTKiHk0Lz6Sr4CC6APjIYvFTa4k89oUtOABmmB0DQ3t5Aom1EwGI6hXP+insPuZ2PXkOdMMBa2p24crn159KaiMRgGL3aeMR8Jms5KSbfZnnQCsO4DsYAVYRjZrkFTcBUGw\/wFcDeKhfT54DvXAAVUx6nlAtnAh14ordXhMARV+fpsL0kWm7nj\/3HOiaAyQlQyIRn3elYAMAsf2kXg3E7qGW+zx5DvTEgTqexCEJx8PTdmMNADS239i4Tyi1meTPe+eAJQVZpFanOgCXPr1+Ukq97VdnjT\/JkgNIQZwSoQXxMxZM23UAhpVYNI6OaoPRfO6PngOZccA4tbLUc8E0WgegJBOeotCrX8Maf8yaAyzLhQzWONcA1J6JTB5T4J0PuOApDw6wIUFdDbN+XEgDcHd8d4ELDz644CkvDgA+QKhpSi1w1ACUD7T0q8i+LJ48B\/LkAHv\/QOFubAdqAMraukcoHB2RyWNPngM5cmAvYRU7sEY32uUV51hfVKsxHvnA0z4H1rYj9dZnW+ry6q7683qoLq\/sqFUpo9zQfVMV9XfTVfWPs1V1YmZEPXbXqKLMUyMH2IxKU6C00ItjLnsOiEFn4y3lvAJcL368qT7827b+fxAXPrkVKv5T39A\/CBife2jSg9EwRI57TgglNf4EewuOlkg+mJ2doazUZID30scbDRKuV6Y8UxtXPz4x5aWiMHJlZVWvJRY1PI8ErMHcpI0fKS8T\/fTyhsoaeIZ\/v1zeUvwHhD85Ue4cS1sKVnajXR2PCSpiCZaUUJ1PvLuifnb5VqrUe\/xro+o\/Hp5Q\/\/n4UYU0S6L7pqoaXNRNI\/r45\/++rtV1Wp2il4\/secKyPWZtpFoJZAmd6GJRwWUkpNLZj9YTgXdsNNCge+7hScU59FMBEPe49OQ9Y+rcyem6itX24F+3E9vWgH9nRV381hH1r3Jf2chIQFkrMjsiWwbPwlr2Zy4bAaafidp1CbChJgGeIUDz7Ac31B\/EA3bpJ6JWf5ygVl+6spkIbO7H1vx3aa+MKtkAUGIxsyMCuxoMqRdyUQJKAx9qFlAYiQcrfv35bXX20nqT2kTlPvfweANQW9WnTTt0Q11UMlQmu9As85D0v\/vrqS9lAiCASpJ85x+ZagJTGlAB368WjtVVrkaR\/Dmo\/q8\/EzCLyrcJEBIzTLMt7bpFOxfXI7ifQVXMHF3RRuiMB1X6wv\/ebChFMr126lgD+Kh39qNkFY2954Kv3frPiYR9+zuzDRKWhwGUtFEGMsJOFq3P1SVgGQbOGH+wuNqkBl87NaMIGhsCCNRLAkSSvddp\/WNjstOEo45Rzc9+sKbBaZ6jqMe6wytsKBUAUY8uqFC7Nvio85LMgLi2Gir35cePSN1GlmVVH7D9YWVXmwZJDk1RwViREEycl1VwLxjguXYfNpft6Rr7LQl8qNwk8NFmr\/VtcL2oZ2CKrYqtSY+aJOrHADR62WZGkc6Nt2nGhETD24UAZ6sQC3ab7RVnWR+v+78krmhAzPGlj5kx2Q8BmWcu4rEU0WcA4waPecF4nnyGvdcqvueCL8v65x6ZlhBM\/EUwACuDFDRjbTRoTGnBjh\/KjIRNSD\/Ub1b2W6\/2IRKWZymjFCyFBHz5SuNsxzO1sXqIxbx0A1ATYrHtPaSkCcnkVd\/uj2f5wErrMs9WxGNsAzIXLP+KSIDn9+Jd2kTWSxJlEWIxKp2jS520T17h2nYotmfxZETd3xD\/o8L+bTCqqNkwrvp1QcE1KpRwjGv4M2OSFA\/Mu755xrdk1qSIVAegYK\/wNuDl1ebkAfulAiZ3VoPPTUjGrst53vXt\/lgCUHQqPABd9Wu\/UFRiUoiFQDSJqS7lXf8xySO0U\/pZf1J0KjwAP11PliKd2GOAoB\/1fyCeOcmqhlj8VHQqPABdZwAVmueUWi\/tux42K++KToUHoPsCh8nec+1JO+DNc7uAdMdShOvSAdBeq4t0HNQUXJo9WQRQdTKGwgMQqWJLEhNbyyrLGSnWSVb0QfU7eXlFqFt4ALp5d6syK\/fix8mJpq5KNC94UCEZW1qbZynasfAAZIrrk1v7Ad0zkg1thzrMC3VXtVGOik4LyeRdn\/7vk60+ik6FB+B9041TWUng60eIxZ1lAdxJsyw24OxEWbu8SOeFB+CJmXQpgspNCsm0sg\/zrO8Ci02Oik6FH+GT946rM79tXIXGSx02ey8JaOywVXQqPADxgt0pLnYjYFcCO+426JAMz2Iv18R29U5IQb5+j39tpMHxwA50wZdmj\/XLPrSn4GD7cw9NFIT7rYdReAmoX6ZsscFefyYeyJFr1mMMQ1Y0ywWQwDaVQf0y3lIAEGkXg20\/w4VFSp\/qMMt+mQFA3iEWu32A5y6YYrlAGdRvaQDIQFl+6UrBtJSrTkImvapowOdKP7Naz3whinxsDJIVeKRGCqYNEa+431nRfCHc1XoAuizSj3dRChVsQIdkeevz7aYlmIMIybALwjlnkyKew5W+5tmLeiyNBDQv8GXZ4dT2gClflcU\/a7f3nQBUolkFZ+4zR+w3N6Wr0\/p44d9\/f9U0qY88E+2WjUolAXm5qLfzshj8zG\/3d8jCK37i3VXFIvEn7x1LnSLr1d6jf9SuK\/kop98yqV7GDAV\/uvaVTrs9fnwuLinJXwDo2l8MHUlkwjWGFajGpCm4TkI4tGk2QTftukdMhLJsVPnVV\/HSg9JJQF46KjNtuWYS+FyVSxudpGgh9fB23bZpxybqHOQs2fWLcF46AAK+tFkP94UCBpJNbeL+drKoARvAS\/vZBwM06tjARD2Tw1iW3VJLpYLTwEeQ+q3PtkUyJq+gA4DMJzOllzRrAZgADD\/PgIPBUtCktC8DZOZ5cYaw+WKHZM18VD9e+OaRQoPQqOBDA0CkBL\/X9uEXOzqM8omsmTWSAwCQ98eLfezOUW3QU2YTdfE8CX\/YZDsWqMC0bTvse7o9N1LPDTQDatspMu3bIOx1\/KbNYTkeGgAitV6WReL2HnrtMBGJxIs2nuX3319rkkrU4SXbRH8AMclBset1cm6AZ\/\/eiHt\/GggZww0JE\/U6fre\/QV8PPQD5xh\/kNbbDRHY+oC0XUEjLt7+T\/tt4ABFH5WX5rY\/fd7lAHJX8mKjtVsCzx5AGQrtOp+eMH8962DY5GmoAptlqnTI\/rT7gY1d8V02n1TdgZJ8ZVPgnstsCZYZoB8eBdjEFyMImEbbd9k07HPMAIVrgVwszdW1g9zeocwPAofOCecHsFm+\/YMMko8pwCPhtXqNekXDscEoq\/UHORBzTa54NMX0kHennPlHXSu17xPe+9mW9Kv3\/3\/eO1697OQHEjJM2Xep2\/OYLjeND+8NEQ+WEGEa54AM0F741rT3RdpiHFGHz8CSvFskHgHslG4C09dn37+i1Sf2lSwoRZTX+YZKERgIOzVww3\/gk5hMieftfZjoCDc4F93CvSyzLZHH6sFE\/xm++4MM0\/qEBIA6HK\/kIkTA\/240txT3xBuCNu83TR56hlm6BXdbxDwUAAYWbHIr0yiI1iTCGKwlZbO6CvVvgZHFfmcc\/FAAk7mYTNo8brLU\/7\/Q8jgc2rg8mtjgsVObxDxyA2D5ujA7J143aTQMUbeHE2BQHdgdvC5Z9\/AMHoLsRN9IPJyJrwvO1Qc2Ld\/vOus922nOfoWzjHzgAP\/yi8Udknry39xBJ2ot3bUHmlQdNZR\/\/wAHo7oPMrgV5kRv\/cxMT8uq3VbtlH\/\/AAejuBJ\/njlDMntjElNqgqezjHzgAscVsynPS3Ezdmf7cvk15P4\/uM5Rt\/AMHYD9ftu9r+DgwcADaninsyTNA3CxtGpNWB\/F6yj7+gQPwG84Opmk\/LJMFONzfBB6GLXDLPv6BA\/CEkx704d\/yC42QrmVTng6P3U+r87KPf+AAfOzOxvw0fi08L3KDvqwfaZdQ379c3tRrN554d6XpNsrMWmNX1TdVtgoOy\/itR870dOAAdDOHeXmtVpR1O3qm+1z7sp2gN\/ewVPKf5Dfc2OqXdpLih5TxGSD8+ze\/0ke3v6RnH\/bxJz1zlmUDByBG+A+dqbesc\/YAtTvhz3Rfq5AH97A\/DDuXumt323kBgJF72Xa3Vf7dsI6\/nTFmUWfgAGQQz8refTYhObLM2UvKtWuVbUP\/T7yz0pQiZj9ju+ekfj3xzmqT9LXvH7bx28+W93mjAZZ3byntEyBmnhZJY4gXh4Tqda+UeP+WRruSvtygtOk3jzUpAJps77Q1GcM0fsOHfh2HZk0IKi+WFI3TY90uK6Q9JJ+b6Eq2Cen6bvwNhhugcLSJe7JYkwLQ0lanDcP47THnfW7WhAwNABlwDABWxDWCkBeHymw3TQsnBjsyCUhJGw3RdwyAlaZ7kJb0nQRY7ksj2sPutKU6dRlL\/AVotn4GOf60ceRVPpQAZLCxCrzRBEI+4+Wxjx4ZM2b5IuW8OALYH0gMMW0zIKRYrAIbExK4H8LhcKWlvW1HXKvzv4DQtWeR6uxRmESDGn\/Ss+RZNrQAZNBpkqBbhgC+NMln+nN\/pwPJx6KmLIgwjisJf\/PduVQ7tN\/jz2KMnbZhANisBzptKYf6Rk0Bgl6JNlB5tJlGbogGwLbyktPaSSunLdq0qdWalH6P336ufp8PlQ2YNHikAQAhrtYumdga4Y1WwKM9bDUCxzbZu1LZ5b2cu9uw8Yz\/893ZlrFI+st7\/L2MqZd7jQQcegCaQQIUptJIYb8ssw5\/FpuPMoiX+Q1JNj0xW5Xt2UY62pfFzF6YfpBUvxFg5EEA3Twz7V\/45rQ4Vu1J+bzGn8c422nTAHAo4oDtPDAgwwtu1xNup03q9HtNhu2QsCblmVp7T5rX+NvrPb9a6YZRfn0OVctlX5Mx6JdRUYHSqR1R2JgaP+gH61f\/ZV+T0S8+2\/1E0R7WBHsVFe0BUE7KSLZNxvhbJSj0yh\/XIXL77rX9w3J\/HYCCvdKr4MPy0or6nKUHIMa9TYQ98iJX4rl959XvMLdbegCWfU3GoMFZegCWfU3GIAAY2k6IKKBlHmI3zE\/1DGKQ7fZZ9jUZ7fIpy3reCbG4WfY1GRYrBnJakfBfqeOAOALDuCZlIGgYQKeVIIj0LydHUTlVMDwv85qMAWBOhbtxwnGgguXSOyG8AALEbuoXa1LsedtuX1Sna1K67ecw3Wd8EJ65IvMfy5yEJXVCGDuUlLNHGthByyrju5v\/EvMjy5rfK7Ep61xDu+3Dcm60bajCq5XK3lxw3TU+LKPI+DmxBeOs6cbEUbOsspN8RHL\/kpZ1Aj76KHsA2vaCgyvXvjhdUZVXxsfH1PR0NinoGWOjr82VZU1GX5nqdHbzxk11e3tbBZXg6WDp2vWFSEXvVatVNTNzzKlazssyrMkY5Ju9sXZDbe\/sSCJW8G2ckGUepi4WuSg5lWlNxiBetTXpsaxn4v907SudizU3O4tYHMQzDW2fRV2TMUiGm3T8B+4+HhgALskD1WZnZ1Sl4iMzSS8HrzaPNSlJfRW5bEdigGura0r076UHvn78Ub0mROIylwSKtW0xDMfHs\/+RmCIwFM81jzUpReBNJ2MwQWgVqqvctyfuIn0BOj15DuTJgR1xPqAoiC5x1AAUL3iRi3DHAxA+eMqPA7t7GBNTbx+A1a3qIl0iAcu6OCk\/lvuWbQ4QftF0Sy1y1BJwfn5uRbyRRUIxO6GXgppB\/k\/mHKiDTxwQMEcHdZc3VNH7FNy+3biTPGWePAey4MDtzXh7FdGyGmu0WQegTMctUnB7ywMQPnjKngNGAlZGKq+a1usAnL97btGoYVPRVPJHz4FeObC1tWUyrpbn75rTDght1gGoOwiiNzlu3mpMIdKf+T+eAz1wwGhWmf89bzfTCMANEY2SnoUE9FLQZpM\/74UDFp6WRdO+arfVAEA8E\/GEf04FLwVtNvnzXjiwfnNd3y7x5l+47YjZ10hLS9dno4nod1Jam5qaVBMT7e1f19iKv\/IciDmA7be+fouLZUk+mHf50iAB+VDHBKPgDOcbG5s+MA0jPHXFAdKuwBDk2n6mwSYA8sH8PXNviGjUgemb67H4NDf4o+dAuxzAjGOtURSoN1zbz7SRCMD4w+BH2iGRDJnNzf1fMDI3+qPnQCsObErQeYtJDfYA3NOoSfVTASiIXQ7C2GVGjFpZrEnt+DLPgToHYtUbh\/ICAR9Yqn\/onKQCkHqiii\/iFTNHTB6\/B6HDPX\/ZxAEwAlbADNhJU73mxiYv2HxgjtorHo\/eE1F6koVLx44e9Wn7hjn+2MABQLeGoCKvVJKcH7jn+KMNFRIuWkpA6muvOAieltNlGl67Iegu6X7SCfzzRXscaACfYCWIMXMgfw6UgKYFWb5ZY\/mmXNe8JDRc8Uc40AQ+WW7Zyu6zudY2ALnJBeGRo0dU1S9isvlZunNsPhaaa7WL5OsAfDCrIwBygw1CVtAdPXbUgxDGlJCMw7G3r1DH4INlHQOQmzQIo+h1ufuk6Ho1OTnhp+xgTImION\/GxoZWvzgc2Hztql2bTV0B0DTwx8+\/vCgdP8\/1+NiYmpC5Y6+SDXeKecTeI7mAvV0guf55ZatyzqTYdzrqngBIZyINT8sSuwvyLZhFJSMN\/driTl\/D4ajfIPVkhkOiIecfvOeOi708fc8ApHNUsqjjC\/JteIprgDh9ZFqNjhya30LksT2lcIB8PuZ1rRzRRXE2ftSNynW7yASAplEtDVV0Vq5rlAHAMdn2zUtEuHH4KAF4y3pqTZJVshpNpgA0D\/XHa1+ek2\/Iv8l1jTIkogbjxLiXijBkSAn7jrXh25JEsCWL07jWhLrF1tusXOzW1ksbci4ANJ25EtGUA8bqSFWNyLEi03sj8t9TfzkAuPjPfkDE8NixQG9MYEAXP86iOJlvqg31atbAM6PNFYCmk6W\/Xj8Z7oSnRSqeUhK6MeX2ESmJB01Yp1KNj5zH1\/sA1ddSbpOpZ5cV\/dwAyB2nSRiJyMPbA5POydsD3I4AjfIWe4IvCjTfZ5mu2HiLbvtZXze+yaxbT2iP5AY1rhbCIDwpvxHxiPw6BA5MIigTbvdF2XJA5mzVpTCMrup14VtqMS9Jl\/bYfQdg2oNoTxqbUcI5sli0FkbhrGRK3B\/XD2rmPvnyyi6a8t8mrikvE4ldJmNecYcsL3RZl+nPI\/25\/ALM1UpQWdmV+qJL+JzVaXE9XXlwf\/4f1AC7LPmFaqYAAAAASUVORK5CYII=" + }, + "copyright": "Copyright 2023 Dify", + "privacy_policy": "https:\/\/dify.ai\n", + "position": 2, + "chunk_structure": "hierarchical_model", + "language": "en-US" + }, + { + "id": "9ef3e66a-11c7-4227-897c-3b0f9a42da1a", + "name": "Simple Q&A", + "description": "This template generates structured Q&A pairs by extracting selected columns from a table. These pairs are indexed by questions, enabling efficient retrieval of relevant answers based on query similarity.", + "icon": { + "icon_type": "image", + "icon": "ae0993dc-ff90-48ac-9e35-c31ebae5124b", + "icon_background": null, + "icon_url": "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAoKADAAQAAAABAAAAoAAAAACn7BmJAAAUPklEQVR4Ae1dW4wcxRWt6pl92rseQ7xgYocdIALFeRglkSBEYkkkwF\/YEoT8RDiKwkd+wEryG+P8JpHNTySEQuwkHzEgYX6C4AM2UghISYTzMMrDySzYeION4\/Wu7X3NdOWe6qnempru3Znpefbca427uroe3afP3lv3Vk2NFF0ihdnZSZEVkyUpJqWSOSFUzlPezbg9X6qcFILySOi6Plb8R+WVCq5X5Kf4RMo5wog+liiB8zCPcJzBVV\/67xFwc0r6MxlF9YpiJr99u76G650Ueq\/tlcKlQq5UGprKKO9eXxDZpNgtVBSp2ntffdrbSSXEDBH5z0qqk5nM8nR+az4kcDswaQsBCxdmp4Tw7lVC0VHgUyWe5wmP2JjJZoSkIz7Ig0g64hySKefpk\/J\/prydl\/a0UoQmfWzBuW\/l+aUSlSF6KV+X9X06+kqU6Ih0jJwkpKeF8o7lJyZOxpRpWnbLCAhN5xdH9lMHD9HdTpk7BlmymYwmWoaOAwMDIeFMGT62B4ESERRkLK6uilKxJFaLxcqOpZjxfXXotontRysvNO+s6QQE8URx9AklxZP0Z5fDrYJ0Q0ODYmBwUJPPaLPmPQa31CwEQMKV5WWxulpc05JERBpPHs1vu+FQs\/ox7TSVgKc\/PLfXy3iHzZhuIJsVw6MjAkeW3kNgeXklIKPRjC3QiE0hYOHS7KQqyp8TxFOAmYkHFNIj0IpXr1wNNSINK094WXUgvzW5J52YgO9dPP9ESamnYG5hWkdGRsTw8FB60OcnCRGARlxcXDREnCOH50DS8WHDBAzGeiMH6a\/hSdzh4OCA2LRpU+ithnfNiVQhAO8ZJAQZIUp4R27dNnGg0YdsiIBlk\/sSdbqbtV6j0Pd2vaWlZU3EcijopMyqfY2Y5LoJqMlXkm\/A0UCcbnx8LIzX9TakfPf1IgBtOD+\/EJhkeMoZdV+9JKyLgDb5EMMbG9vM5Kv3raWsPEi4sHBFIKZI06R1k7BmArrkg+bjeF7K2NTg48AMQxM2QsKaCMjka\/DN9FG1RkkYTLZuABTF+F7CmA9mlzXfBmD16WVYQ3ADHAFXwBkdKdkAjw0JWLjw38PUxm44HBjzsdndANE+vgxuWH7Bbr+46eBGcKxrgk+fn91PK1R+joa3bBlnh2MjNPm6RgCOyeXL83oFjiqJA7feeOOROGhiCRiM+7x3MMMxOjrKsxtxCHJ+JAKIE167dg3X5ihGeGdceCbeBBexqEDlsIqFp9YiMebMdRAAZzA7RpIrrxOILB1JQJheWu64F+M+zO2yMAKNIGBNzU6d\/ujc3qg2IgnoeVIPHkE+syo5qjLnMQLrIQDfwSgwWu9+OMorriJg4eKHB800G8wvCyOQBAGYYr0elEIz\/sqwXrhit1dFQAoo7keBTZs32eU4zQg0jAAWJUOkJ59wtWAFATH2g\/YDY3kVc8N4c0UHAYtP+ntC9uUKApqx3+AQLyi1QeJ0cgRCLRh8SS1sMCRg4fxZ\/f1cOB089gvx4USTEIAWLM+iTQVf0w0aDgnoe95+ZA0M8BeIAmj4\/2YjYBQbTZRMmbZDAkqVuReZbH4NNHxsNgL4Wi6EnBHNNaQ1AQuXLuVoCcNuZLDzARRYWoEANiQIzTC+P06iCVgqrUzhhMkHFFhahQDIBxJqKY1O4agJKJWvtZ9H+7KwMAKtRAB7\/0B8vzSFY3kMKD+Hk4GsnjxGkoURaAkCesEqtSwp3owOAg0o5CSlaTVrmY84YWEEWoAANqPSkvG00iszLnBADDtb0C83yQhoBMpOiF62jwxP70yKBAWgWRiBViMAAhqugXsetsVFp1EbP7b6Zrj9\/kQg1ILEPa8kPR2PoeBgf6LBT912BLJlTxj7gXsZpSZxB9gGl4URaAcCRgNiM3qPdg0OItJkm1kYgXYgYAhInkjOM\/GYtcx23AL30c8IGCfEk97Nod1lAvYzJTr37PS9c3kzuvfMHF3n7oV77hMEjLJTpdLWUAP2ybPzY3YBAqHD63lbmIBd8EL6+RaySujfZdO\/UtQNQHzipz\/qhttI7T28\/53vd\/zZwkkPxAFpWUIQiOYwTMdfTD\/eAJvgfnzrXfTMTMAuehn9eCtMwH586130zJ7QPw5Nc8H0j4URaAcCJg5Iu3DkSAOWnRBeDdMO7LkPQiAkIO0dyCaYKdFRBJiAHYWfO2cCMgc6igATsKPwc+dMQOZARxFgAnYUfu6cCcgc6CgCTMCOws+dMwGZAx1FgAnYUfi5cyYgc6CjCDABOwo\/d84EZA50FIGu3xK\/G77D0NE3lLDzbv+ODWvAhC+YqydDgAmYDD+unRABJmBCALl6MgSYgMnw49oJEWACJgSQqydDgAmYDD+unRABJmBCALl6MgSYgMnw49oJEWACJgSQqydDgAmYDD+unRABJmBCALl6MgS6fi64kcd769z74t2PLoiz85fF\/Mqy2DE2LsaHhsVdN+0Uuz420UiTus788rJ4tfBPcXZhPmzjro\/vFHff9InwPEkC9+3Krusn9L27+Wk5Tw0BQY6f\/eWP9PmTQDpOdoxtEQe++CXxyB2fjisSmY92D\/\/hzeq2\/yCI4FvE8Ye+LnaOj0fWrSUT5Hv0xPGqorjXA1+8pyo\/LRmpMMGnPjov9jx\/jAjy+2qCOG\/q7MJl8d3XX6GX\/WtxZn5NkznFKk5BvEO\/ez22bbT56Mu1t1fRePnkxb+fisoWrxVOR+anJbPnCQjy6ZdPJKhH3jp3pibSwNyC2LaMDw2JnWTWbQEJv\/f6b+ysutKvFv4VWR7P99YHZyKvpSGzp00wyPH4KyeqNBNMIkzsp2i8B7JAXvz738Tb9CLPWEQ1pDm+9+ux7xLaz5Zvffbz2oRjTKk1H5lN0yZIPb+8VPeY7dX\/nK56BrvPt8k8301jzTRKT2tAkMO8fPNyQJDff+NxTZIH8reRgwAnYaf4yVf2iON7HxUP5D9piuojSIOxY5zAkTECMh\/88ldCgoHoT9IYzRbbQbHz10u\/+I+\/VVx2HSWMP9MqPUtAvOgXSKvZAvKBIHECwjy7Z2+VJxyMHZfiqoX544PDYdokovLMtVqOgWddaX4Pfvm+UHOjDZRJqxnuWQK6phHkgsdYi\/zgnkqSBiSIHuzD1BqByXUdlx+++bq5rL1hmP16xB374TnuorAOtLctr8WMEe0yvZjuWQJicG4Lxkg2WexrbhplYZZteZtMcZQgzmeLcTSggbUnbY0p6w3toF2MTW0xxHv49s\/Y2eIFMtMYX6ZNepKA0FjvOgR8uM643v23OGPBGE\/zkds\/TR7vlvC9Y8z47VdeEg8+f1QgbQQB41o1sKkDEtttIN+QOPiDChwo5OOZT1FwPW3SkwQ8dfHDqvew6\/ptVXnrZezYvEYqlIN5jRI4Hj8mB8aWVyk2B0IYgTaFg1OvvPXB+xVVYH5tEw7y2\/LcX+OdJbtcL6V7koBRANdqfk3dXduqCXvG8nhNORyhjVzv2VyH04MwTr39o36c+TVt3+967KSl02aGU0NA89JaccQsiOssoB9ox\/snK015rf2vZ35NG1FmGNo3TdK3BLy8vFL1HreUg9bmAszsnuPH9PyyybOPuP44jQdtrQRTji+Dm48bKjL1XUK75teUc82wqzVNuV499iQBbafAAB9nPs1192gHmM0114weohDLqYuV3jYWBtj94\/qh371hmqgKjJuZmLBAOfHcnyuDy9B2CKq7H3tMiKpwWmzCu+322nlPTsVFBX\/fJSLsHK90LNZ7Ge86jow7+4DpMVd7YawHh+ORO3aRF3wsdEQQItlBK2FATiwDs8UlNa7Bm3VncNCX25\/djp1Gf9\/67BfsrJ5N96QGhFapiuNFhFG+S4sD7vnlM\/oDU2oHkd3VJ66mcafHEB4xfcJcYvmVLZhNwZSeq9mivPPn1pn6s9uMS79GfxxpkZ4kIMB3A8TQCjbBUAYa6TItSD1D8TaYSozXINA0rgZy44iumXOvQ2NiftkWmGK73QduuS3SO8aiiCSSJjPckyYYLw8myF58ahwCxOOM2YOmevbBfXrZFeqAhFgL6BIA5Yx2Q7ko0WNGZ\/YEWhHerDstaOpHechYeGqTFGWf3bNPe9SmXtQRwW879ohnT8NC1Z7VgDDDWHxgCwiGVcW2JsTg3n5RUdovagbDNckwra5WRN+oGxUjxJSamdWw79E1\/dCk9qod\/CFEfVxv2P0jsvvopXTPEhAgg1iu8wAS3vOrZ\/Q8LTQTPiBOnDcKEkcRxQ0Co90Hn\/8FeaHva00EbYQ0NKobUsG9naXV1lGEdYnzMDk0tYh7PzDDaVgh07Mm2Lw0LK\/SWs+ZStMvyJqrNeXtIzRX3PItaM7AzK9Nf5kFqHYbcWkQFmPCn3x1bZwIz9o1v1FmOqpNE5S2zXAaFqr2tAbEi8L47ZWvPRapxaJepJ0XFQu0r2NdXj3hDmhTO0YIx8geH742U7nuD9q7ntCRa4bTsFC15wkIwsC8wiPFSmiY0zhzi3x7vBZoqbX1fDb5TBokRNuuqTfX0SbGbIgRBvPCcILWVrEgPINxJzSXG+er1fyavlwzrIcBCT1q03anjvI\/F\/6r0Pl1123t1D1U9OvuadzoHtEgF14QtNwOClBDU5ovEmEdH0y0kVo1HcZ0py4G3zdG3U9tIw22OfjOsWmr247NwrPZz\/W\/\/13STfb8GDAOGKzP0+KETpCHsAe+xmnGY9BSWIUcp+WChqBph4NwTUSbpgwf60MgtQRcDwaYyDfJXLN0HoFUjAE7DyPfQaMIMAEbRY7rNQUBJmBTYORGGkWACdgoclyvKQgwAZsCIzfSKAJMwEaR43pNQYAJ2BQYuZFGESACyjlUVr6eEGm0Ha7HCNSMgFIh1+Y8IVVAQBFm1twQF2QEGkEgJKAUc10\/E+LOZTbywFynexHgMWD3vpu+uDMmYF+85u59SCZg976b1N6Zb5wQJeeyUokZcj8mS74vPK\/zfGx0\/V9q31YKHyx0QoQiL5iFEeggAp4vBMcBO\/gC+r1rTyqld2ZUiqjIwgi0AQG\/VNK9SCln2AS3AXDuohIB44Mg11NSzCDhkxPCwgi0AwFjbX3lv0d+bzAXHLrG7bgD7qOvEVjzguWcVyrPBQtbL\/Y1PPzwrUbALwXW1sMYMENxQHRYLAYDw1Z3zu0zAqEGVD7FAYsBAcNMxocRaDECmPTQQtzz8tu3z+AETgivCdSw8H8tRsA4vOBeEIYpe8KK1wS2GHpuvliOAdJC6JNAQxOQ\/A99srq6yggxAi1FwAShhV96Dx2VNaCvT9bY2dJ74Mb7GIFisaifXnm2BhSZaeT67AlrcPi\/1iFQKnPMk96aCc5kBqfRJTQgOyJAgqVVCKyWNaDIXJtGH9oE57dunZNCTCMUU\/Q5Htgq8Pu93ZB85IDkt+bnQgIiQUGY3+K4slL9G2rIZ2EEkiKwshT8xK1SJc01tBc4IUFiGhkrET\/ih3wWRiApAkYDeiJ71LQVEjC\/bfu0McOmoCnER0YgKQLLtF2yDkDT1G9+YkI7IGgzJGC5g5dxXLq2WD7lAyPQHASMZZVCHbJbrCRgdugotuqABmQtaMPE6SQIhHzS2m87cWxNKggIb1gJ\/2lcZi24BhKnkiFw9cpV3QBFWY65LdGwr1IKly7l1OryO0KKydHRETE8PFxZgM8YgToQwNjv6tVrtPuVmLll4sa8W7VCA+Kijgl68gDSi4tLHJgGECwNIYBlV+AQxB37mQarCIgL+Y\/dcIJUow5MX7kaqE9TgY+MQK0IYBinl\/kJcSI\/UTn2M21EElBfLKpvaoeEVsgsLQUsNpX4yAhshMASBZ2X9aQGfe+jqLRFjaoTS0AsFpSidAiVoEbDVaxRrXAeI2AhEJjeIJQnlX\/ALHq2ioTJWAKiRH7bTUeU9J\/GHPHC\/AKTMISNE3EIgHzgCjhDX798Os70mvo01FtftFdcXHmD3JjdmUxGjI+NCeltWG39RvlqKhEA6eahqLDqmRY5k9d750YPuq4GRGXtFRf9fXCj0fD8ArGb95PeCNe+u+6Qb0aW1L5aQKhZlRVmZydVRr6B+CBrwlqg7Z8yEeS7b71xn41MzQREJZeEm8c2i0wX7CloPxCn24sAxnxXFq4YswvNVzP5cKd1ERAVbBJiQ8ux8TEmIYDpQzEOh1nlUi\/5AFndBEQlTcKs9xIcE9piS4yMDPOUHYDpI0Gcb3FxUXu7cDgw5qvV7NowNURA08C\/Pzp3RCrvCZwPDQ6KYZo7ZpNs0EnnEeM9LC5YKX+FF6EW7+ryU\/l8sMS+3qdOREB0Vjg\/u19J7zBpwxxMMrThEP0iOUv6EKjQerRsjyJ9h27dduORJE+amIDoHCZZZOVh2ux8L85BxE2bN4mBbNf\/Dg5ul2UDBLCeD\/O61hrRaUlTtY2YXLerphDQNKq1oZAHEapBHgg4ODTIGtEA1GPHKuJRLFhPrd1w04lmPUpTCWhu6t8XZp+SSj5miAiNqMk4PMRa0YDUhUeM7\/Dd8FVaRLBMX07DeSAwtzTWu7J0pNGxXtzjtoSApjNXI5p8kDGTzYgsHT2a3svSh6W9CIBc+GA\/IMxwYccCvTFBSDp9P9NEkJfFlcWjzSaeedqWEtB0Ujh\/frcvivulzNyL0I3Jt4\/QkvCgEdbxMsER6eB8jaD6nPJtMeXsvLSnDYHc50RsDqLoaDSYXpNXJhw2IkW+jt25lYPzaaLmb2mOdhrflIwu0rzcyjfZvHZjWyoUCjkxNjpFG1Tv9oT3OVLyk3GkjG2ELzQHAdqWj4ZKJ31Vos3CaX+ghWvTrdJ0cTfcdgLG3UjgSRMZpZejP9FJ+vvNecq7WZeXatLUU0LmhFQ5c66PivKofEVe6k9oc3mzv7f1rPjpteCUrqvgR4h8SbvRU9gE+4HrLZlpZ9JmeLBWtw0n\/w+IOsoy1qfzJgAAAABJRU5ErkJggg==" + }, + "copyright": "Copyright 2023 Dify", + "privacy_policy": "https:\/\/dify.ai\n", + "position": 3, + "chunk_structure": "qa_model", + "language": "en-US" + }, + { + "id": "982d1788-837a-40c8-b7de-d37b09a9b2bc", + "name": "Convert to Markdown", + "description": "This template is designed for converting native Office files such as DOCX, XLSX, and PPTX into Markdown to facilitate better information processing. PDF files are not recommended.", + "icon": { + "icon_type": "image", + "icon": "9d658c3a-b22f-487d-8223-db51e9012505", + "icon_background": null, + "icon_url": "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAoKADAAQAAAABAAAAoAAAAACn7BmJAAAQfElEQVR4Ae2dT4wbVx3H35vxrjd\/dmMnIZA0UrxtilQuTYUEB5CySD2CSJE4Vl0uHIpQk1sFh7YHqt7aCsGBS7fqEQlSwRGpi8QFJMRyQoKEdaR2U9qkdva\/vfYMv+8b\/7zjsZ2xPTP22PN70u6bP2\/en+\/7+Pf+zMwbrVLiNu9XSpSVUpP+tOsUlKsKtH\/l4Z6rXNrW2uyrc6cthAs6hMVfllyVCou\/Y+eq6sM9x3+sfO6Uxvl7Squqq6yyTT7tl5cvFss4MWmXG3cGNjcrhWZerWjlXFdKlyj9a\/RXcogyOCMX\/nsbBJ93vOWZMPLPKFCg\/\/g7dqRZl070y2Wn6VfteHKqu1tfUGC1QTqX6aJ\/utrasGtqfXm5CEDH5o5zl2CSZN1WKPrrBNMKlR\/bXc6yLKUtrXK2rTSJhj8c+3zboeN0riXkVwrdvxkO3xXpDB\/AD5N\/nFxM7P\/vEbUhLec0m+r8okXhHBPWcRwCkCBskk\/bPZ2B0l23ctb7yxeKGz3DxHgwMQBh6Zy8s0oofd8PHWCxc7YBzSbY5ubm2sD1KtdnBKDfXViy\/LuyHVBgGL2aBChgPGocqQZtN44agdhU2XWcN65ePr8WPBHXfuwAAjy1oF6hX9pNyqRpIgBdPj+v5ufmDXxszQYpxDCCDhLfrIeJqhcgrNVr6oh8n5UsW1qvUb\/xjbj1ixXAO1sPblDD+TZlsoSM5uZy6uTCCeNjfxQXVdBR0pzma+LUq1arGxh9ljF2ixgLgBjBUv\/jPW5q4wCPIYhTUI5zlv0k9AKAu3t7fot4myzirThG0pE7VJufVtDc\/gPwoWk9efKkWlpcjGT1ZhmQaSwbDEqhcEadOnXKDAypDDdQ53c+frAatTwjA4i+3uZW5W3Hcd+hTBTm5+dMJhcW8lHzJNenVAH045eWFk1\/HnVOsxPv3d16iC7XyG6kJhhNLoH3e5pDugard+LECZUUeEk0KSOrNQUXjkuvw8OaOjg48KaCaOrGsvQLozTJQ1tAA5\/rfgT4ME935sxSYvBNQX1nNoswOKh7MAAWqEn+CGwMK8hQALbho1Eu5vBgjk0Ghk1Vws+EAqh7MAAWyOFu1tAQDgygwDcTzMReiKgQDgRgL\/iGmUyOvdQSYaoUAAujWsKBADQDDl+zK\/Clqv5TkZkuCGmQau6KheQuFEBMtaCTCVO7uHi6\/VBASLxyOoMKAEIwYsYFGJjkndfCZHgsgHfuP1il5yhuMt0m4rAY5XymFeA+oddK6ps0T4hnAvq6vgCi36ddc1\/XzPMJfH01lBMBBcAK5oY9p18DS4Eg7d2+ANKQGjPcBcx+JzXJ3M6FbMycAmAGd8fIFfCcQL8C9gQQTS9dcKOT5H5RyHFRoLcCuHeMphjPCdzZqtzoFaongNT0ms4jzKg0vb1kk2ODKAD4uCkmDN\/uNSruAvDu\/QrgKwE8NL\/iRIEoCqApxtM05ErOvNM1IOkCkO4uryL0aTKf4kSBOBTAQ8nGaf1K0Ap2ANjq+5VAbIvaONKXODKugI8n856QX44OALnvl5+XZ\/r8Isl2dAXYCuIlNX9sbQA3P65coxPS9\/OrI9uxKQAryCNimhdc4YjbANKboqs4OOd1GPm8+KJAbArwoJbetlvhSNsAKktfx0Fpflka8eNWAK\/lwpElNKyZbfzDyMTJuxVsnz1bhJcaF3zEPDUZm5KMpOlFfqzcUK0+Mo\/xWzVdxDIgxgI2880V6Ckj3ymhakqziT4gVsWAw\/pA8A2A2tUYgKic5Z3EtjhRIAkFsPaPca1+oNcH1PpZHMzROi3iRIEkFWi9P4KOYAnp8FJTZse2PR5xIi0uTX2YtGgyzfnAYlRw1Bobo8fEmSa4Tec0l1DynmoF0A9suRJ8ix8WlKdeWrKIl6gCAJBZA3sWrQhXQopWCpvfRJWQyCemgN8KWtptFpATWu1oYhmShLOlQI6nYprNEi2Kq0sovqW5O4g9caJAcgqwBaQlmQu0gHBrFVNCUZwoMA4FGECwZ7na6wO2D44jB5JGphXgQYilrCvtdlcAzDQTEys8AaivIHVbbsNNrBKyljAbu6Zyi20LmDURpLyTU4AHvDTsOCMATq4eJGVSAGNfMw+IrxSJEwXGoQDf9HDxCggl6AEoE9Hj0F7SCCggTXBAENkdrwIC4Hj1ltQCCuQ+33EVlo+pWw49pRA4G8Nu1Of5vvpqNYZcZDeKf79lelgjC5DEOzn4Bt32jvcRShp6uNIHHLl65MJRFOB5QLqW7gXLIGQUDeWaCAoEAYwQlVwqCkRTIIcvasOdjelD0En0GaIVUa6OU4GofXrOS67hcZfAsIOTEF8UCFdAAAzXSEIkqIAAmKC4EnW4AgJguEYSIkEFBMAExZWowxUQAMM1khAJKiAAJiiuRB2ugAAYrpGESFABATBBcSXqcAUEwHCNJESCCgiACYorUYcrIACGayQhElRAAExQXIk6XAEBMFwjCZGgAgJgguJK1OEK8BrR4SGnNETwnYhXf7uvfvf3+kilWf12Xv3su\/wpei+KqO+sBPMXNb6RCjbBizJnAd\/64Un1zMXhP0fxzCW7C74J1tvMJJ05AFFzH\/z4tLo8xLI4CPvrF+X7yUlQn0kAl05oA+HSQvhyJIAPwD4xBLBJVNSsxplJAFGZAApghblfkeUT+MJUGv18ZgGEZOjXoU\/Yz\/38eydMmH7n5Xh0BTIH4F\/\/Sx+m8LkffH1e\/fT5Bd8RbxPHXvpW55fj\/7XV7AonB6IpkDkAf\/LBnvq44i0LwdIFYcN0SxBKXPMyXSsuXgUyB+D2gate\/M1uF4Robr\/5ZM40ucG5PsCHaz4JgBtvVWQztswBiGoGSLCE24e0RKLPYcARnG5BGIQV+HxCxbiZSQChH\/pzb\/7hoENKTM8ER7wII32\/Dpli3cksgFARt+R++afDvoLi3Ki37fyRYqCDv1Hd81+bi3T9qOmO47qZvxccJiIgg+ULjnjX\/lJ7LJxh8fJ5gOef6hkW6KjXcz7S6mfaAnKl\/IKaWf\/0zN9oqubNP3Y2zxx2GD8ID0AcxhL2uh4DpVlys1WaCDWDUe44HFvDMEsYhI\/z9g0C0P9j4ePT6osFTLDmABke\/wq6MEvYDz50Fx7XZw2mMw37YgETriW2dGz5OLngPh\/PEnwos1hArvkE\/cdZwmCyvcCcRcvH5RYLyEok7PezhGHJRnmCOyzuNJwXCzjGWuhnCftlYdbhQ7kFwH61n9DxQSHMAnwCYEKQhUUbBmFW4BMAw0hJ8Hw\/CLMEnwCYIGCDRB2EMGvwQaOZHwXH\/Z5t3PEBQnb+bT426\/7MAzgNFZhF8LheZBTMSog\/EQUEwInILomyAgIgKyH+RBQQACciuyTKCgiArIT4E1FAAJyI7JIoKyAAshLiT0QBAXAiskuirIAAyEqIPxEFBMCJyC6JsgICICsh\/kQUEAAnIrskygoIgKyE+BNRQACciOySKCuQe7DjLdbYyHUu2sgBxBcF\/Ap8th0PJ9UWd2IB\/erK9tgVAIBVpOq6nYs1jj0nkmBmFPCxVrVcpQXAzFR9OgrqB1Df3fpik7JVKhTOKMuSFjkdVTTbuXAcR1Wrj1DIshA323Wd+tIJgKmvotnOoAA42\/WbytK5TnvAi0GIKiOXTjOe+Z1UllgylSoFeBBCn4qsigVMVdVkLzMWKESxHZkHzF7tp6DE1AS7ZjzsutIEp6A+MpGFpuN99FG7WqZhMlHjKSukv7G1tNsahNDkoDhRYBwKcGvrKOeepXTrXvDx0HgceZA0MqwAj4LBnuVq17sXrNpzMxmWRoo+DgWardbWVVaZBiF2GYk2GvI18HGIL2kcP3llwwLSAoFliNI2i6KQKJCwAr6bHmVr+WKxjPTwhILMBSasvERvFABrcGCP74SUzRH\/+NgckH+iQLwKNI+7ehuImZfoxU7p6OhI5fP5eFOMGFtc7yBEzMbUXn5hiW1MOorAk9Bk6+4hR17uHNfs+OhMR24lFzOnQKPRMGXSyjUW0ADoWu46jjZat0hMCPknCiSgQKPpzba42joG0K7Z60gLFlAGIgmoLlG2FWgceRbQrql1HDR9wOXlYvXO1hfrNBez4hCE1hx3DdvXpWYjbX2a1AjTykia+8wMH2V1A8why+0eKs0D\/hkH6vXjD6dgX5woEJcCh\/WaiYqeiDasYacNIL0St44DNQEQMohLQAG2gPa8tcbRtwF8+mJxne4Gr+OOCAfkQOKLAlEVqNVq5mYHxVNevlA0AxDE2QYQOzQ0\/hD+\/uEBPHGiQGwKcMvqOvoNf6QdAFo1YxqrsIBiBf0yyXYUBXw8la9eLq754+oAECMTmoZ5FwHECvplku0oCuzu7XmXu+77wXg6AMTJXN16h7wyqD08PAyGl31RYCgF\/H2\/p54493rw4i4AYQVpwaJbCHhwcCgT00HFZH9gBfDYFRiCC\/b9OJIuAHHi6qXibR4R7+22zCdfIb4oMKAC6Ma1Hr26Hez7cRQ9AcRJW+sfkVfFEzLSFLNc4g+qwOFhTdVr5qZG1dJei9rr2r4Aeg+qekNm0xTL0h299JNjPRTwml5vKo+a3lv80HOPoJ3zgMEAT10qvkO3Td7F5PT2zo6sHxMUSPa7FAB8YAXMgJ1+TS9f2NcCcgD7yHpd081jtOU7u7syKGFhxO9SANAZRvDIvas2rl4+d7MrUOBAKIAYFWutX6Dryk16lmtnmywhJSROFPArYFpJYgOMkCtblmHGH6TndiiAuMq8PKL1d2hTIOwpY7YPdsFHrDyu3+dXayAAcUFPCGVg4tcyk9umz+e3fEPAB8EGBhCBgxDKwASqZNfxgKPd7A4JH5QbCkBcwBDywOTR9rbME0KYjDnM86HuzUQzDThorm\/gZtcv1dAA4mJA+OSls8\/xFM3+\/oHCDWf8IsTNtgI80t3f329PtVj10eCDUiMByBJjmO227phg1htNMm4+i5tNBWD18H2Po\/oRClh1lHsLDPD7HaOUOhKASPDqxeIamd\/n6HHW2zDHe3v7JpPyPOEo1ZHOa1CXMC5s9aj7tY46f\/rSOTw5FclRXPG5O\/crq9p1X6MYS4g1R2\/X5efnI622EHzLS96Kg7L9XZx6ATw8UOAzJmU8KYWHVfrnYLgzsQLISf\/nk4ev0y\/kJdov4Rg+AQYYF+bzxsexQV2cgg6a5jSHi6IX+nd4N7x+VKeuVN308VpamAeV8axolOa2l66JAMgJBS0iHweMOdtWuVxO2Zat7JzNp7r8KIJ2RZaBA4PqBdjwh6edMI2CFQsAH46xIzjoRTX9oVVTa3GD50uDN5PzNz+rXGvWnVW6PXOdinetV0qwkpZNKwZrTVB6PrYf7NA6mgQpuy+fsZXGxyV8DuHwlyXHAAXL\/GnFW3kA6zAjzJdocSL0zTk8FiLFtpk+CV5M+4CuiXfE6TVdvCnZI0ish8Zea5ublUIzr1a061wjap6lDJT6QYmS8hfdudTnFyOPmziqmfSH1KtMImzQdNo9AIflMpKydP3EHjuA\/TKyeb9Sot9uiVbtLwBKepanQGGvPNwzTUKJrzt\/2irQEZzzO+wHj\/nPz+J2lQqFvw73cNcp4wAZOXqIRFXPnTJVfI+ajapL+6RdmRZeKWMuF+Em7f4PpXL0Ed9VCt8AAAAASUVORK5CYII=" + }, + "copyright": "Copyright 2023 Dify", + "privacy_policy": "https:\/\/dify.ai\n", + "position": 5, + "chunk_structure": "hierarchical_model", + "language": "en-US" + }, + { + "id": "98374ab6-9dcd-434d-983e-268bec156b43", + "name": "LLM Generated Q&A", + "description": "This template is designed to use LLM to extract key information from the input document and generate Q&A pairs indexed by questions, enabling efficient retrieval of relevant answers based on query similarity.", + "icon": { + "icon_type": "image", + "icon": "e4ea16ed-9690-4de9-ab80-5b622ecbcc04", + "icon_background": null, + "icon_url": "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAoKADAAQAAAABAAAAoAAAAACn7BmJAAAQjUlEQVR4Ae1dTYwcxRWuqpnd2R\/veqzgxXaw2YEgRSDBEkJEwsFLDkE5xRwicogUR0g55GJWKGfjXBPJyyU3hLkFKRLmkohD4uVgHIVEOCggRTGZNTbesDbysj\/end3prryveqq3Z6bnv3t2tvu91Uz9dHVV99ffvqpX9bpGigGR4tLStMiKaUeKaallXgidV1o9iMtzpc5LISiPhI6bsOqLymvtHa\/KT3BCyhXCiD4B0QJpP49wXMRRV7rXCbgVLd3FjKbzymKxcPSoOYbjeyn0XPsrxbvFvOPkZjNanXQFkU2KGaHDSNXf60ppa1e1EItE5H9qqa9mMqWFwqGCT+B+YNIXAhZvL80KoU5qoSkU+NSJUkooYmMmmxGSQnyQB5EUIg3JVPJMovJlywfzkh7XmtCkT1CQdgN5ruNQGaKXdk1Z16XQ1cKhEPEGcpWQXhBavVmYmrraoExk2bEREJrOLY+epgZ+RFc7a68YZMlmMoZoGQqHhoZ8wtkyHPYHAYcICjKWd3aEU3bETrlc3bAUi66rz31j6uiF6gPRpSInIIgnymNntBQv079dHpcK0uVyw2JoeNiQz2qz6G6Da4oKAZBwu1QSOzvlXS1JRKTx5IXC4fvPRdWOrSdSAl774tYplVHn7ZhuKJsVI2OjAiHL\/kOgVNr2yGg1YwwaMRICFu8uTeuyfIMgngXMTDygkByBVtxY3\/A1Ig0rL6qsnisc6t2S7pmA179cPuNo\/Sq6W3Sto6OjYmQklxz0+U58BKARNzc3LRFXyOCZ63V82DUBvbHe6Fn6b3gZVzg8PCTGx8d9a9W\/ao4kCgFYzyAhyAjRQs0\/fHhqrtub7IqAlS73bWp0hrVet9Dv7\/O2tkqGiJWpoKsyq1\/opkvumICGfI68BEMD83STkxP+fN3+hpSvvlMEoA1XV9e8LhmWckY\/1ykJOyJgkHyYw5uYOMDk6\/SpJaw8SLi2ti4wp0jLpB2TsG0C1pIPmo\/n8xLGpi5vB90wNGE3JGyLgEy+Lp9Mik7rloTeYmsLoGiO722M+dDtsuZrAVZKD6M3BDfAEXAFnDEzJS3waEnA4u3\/nac6ZmBwYMzH3W4LRFN8GNwI2AUzbnn8bCs4mnbB15aXTpOHyhuo+ODBSTY4WqHJxw0CMEy++mrVeOBoR8w9fOTIfCNoGhLQG\/epD7HCMTY2xqsbjRDk\/FAEME947949HFuhOcInG03PNO6Cy3Aq0Hl4sfDSWijGnNkEAXAGq2Mk+YqfQGjpUAKi6yV3x1MY92Ftl4UR6AaBwNLs7LU7t06F1RFKQKWkGTyCfNYrOexkzmMEmiEA28EqMPJ3Px9mFdcRsPjlF2ftMhu6XxZGoBcE0BUbf1CamnG3R4zjSrC+OgLShOJpFBg\/MB4sx3FGoGsE4JQMkUqeqdWCVQTE2A\/aD4xlL+au8eYTaxAI8Mm8JxQ8XEVAO\/YbzrFDaRAkjveOgK8FvZfU\/Ap9AhaXb5r3c2F08NjPx4cjESEALVhZRZv1XtP1KvYJ6Cp1GllDQ\/wCkQcNf0eNgFVstFAya+v2CSh15iQyufu10HAYNQJ4LRdCxojhGuKGgMW7d\/PkwjCDDDY+gAJLHAhgQwK\/G8b74ySGgI6zPYsEkw8osMSFAMgHEhpxxmYRGgJK7Rrtp2hfFhZGIE4EsPcPxHWdWYSVMaB8AomhrFk8RpSFEYgFAeOwSjVLmm9GA54GFHKa4uTNWuEjEiyMQAwIYDMqIxlllF6FcZ4BYtkZQ7tcJSNgEKgYIcZtHxnK7EyKCE1AszACcSMAAlqugXsK2+Ki0bCNH+O+GK4\/nQj4WpC4pxypzHwMTQ6mEw2+674jkK1YwtgPXGW0nsYVYBtcFkagHwhYDYjN6BXtGuzNSFPfzMII9AMBS0CyRPLKzsfsZvbjEriNNCNgjRAl1YN+v8sETDMl9u7e6b1z+SCaV3aNbu+uhVtOCQJW2WnHOeRrwJTcO9\/mACDgG7xKHWQCDsADSfMlKC3wu2zUBbMVnGYe9PXe\/UUPzAOSW4I3Ec0E7OtD4MY8BFL7AsiJ3\/0m0Rz47Je\/2hf3x2PAffGYknuRTMDkPtt9cWdKmB+HprVg+mNhBPqBgJ0HpF048qQBK0YIe8P0A3tugxDwCUh7B3IXzJTYUwSYgHsKPzfOBGQO7CkCTMA9hZ8bZwIyB\/YUASbgnsLPjTMBmQN7isDArgUnfa12T5\/6ADXOGnCAHkYaL4UJmManPkD3zAQcoIeRxksZ2DFg7cPYL\/5ttdfdbjqtY17WgO0yhMvFggATMBZYudJ2EWACtosUl4sFASZgLLBype0iwARsFykuFwsC+8YKjuXuG1R65dZn4sWLb1UdfevUT8R3jx2vyuNE7wiwBgzBcHVruy735upXdXmc0TsCTMAQDFe3t0JyOSsOBJiAIajeXKvXdmF5IadyVocIMAFDAPvkzu263Jtrq3V5nNE7AkzAEAxvhGjAK5\/fCCnJWb0iwASsQRCa7pM7yzW5QqALvsGGSB0uvWYwAWsQvPL5ZzU5u8k\/\/PtfuwmORYIAE7AGxvkP3q\/J2U2+\/tE\/xGqJLeRdRHqPMQEDGJ7\/4LIIG\/\/ZIqulkjjfhKC2HIftI8AErGAF8rVDLmhBlGWJBoHUL8V5Wu2yALHaFRAV5809\/T0xmRtp9zQuF4JAagkIAr3+0d8N8RDvVEDYd4vXDAmfOXZCHJ+c7LQKLk8IJJ6AcCyw67iYYsHnr2Tp3ohgYhlTM6\/85U+GSI99bUo8QCR89D4KJyaNZpzM5ciB4QQTrQkCiSdgrVdLEyx6OvTxl8sCH2jFoCT9XZbgvXYTZyOkG9T4nMgQYAJGBiVX1A0CTMBuUONzIkMg8WNAeDLDysUKBowGeLog\/DhkvbcXVI+T4fHM108YA+SBiYOmqgcmvbCXepN+buIJ2MiNHiSEhwuW3pqtfjQjAKzclx7\/Nn2+xfOBzYBqcizxBGx079BSP\/7mQfF84REzF9jp6sZLjz8V60R0Wqzn1BLQEhNaDCsakHZJOPf0s\/45th4Ou0OAjZAKbiAhutNWYjVfq3J8vD0EmIABnLy13VwgpzqKbttqy+ojnOoWASZgADnPqHgqkFMdfekJNjaqEek9xQSswbBZN\/yD6UdqSnOyVwSYgDUIQguGebY8Rk4Gx3lerwat3pNMwBAMnwnZggOeLizRI8AEDMHUrmQEDz1K7lYs0SPABAzBNIyAYXkhp3JWhwgwAUMAmxyud7PH2JAlegSYgCGYTo4M1+Xyux91kESSkfqluDAU4UaflrXYsPvvZx5rwH6izW3VIbBvNGC3v6PRjSbr9Y25OpQ5oyEC+4aADe8g4gPv\/vc\/4teXL3XtIxjx5SS+OiZg5RHj9c35v70vrtzibdj6yfrUExDvCb\/y5z8y8frJukBbA0vAbsZuuK92x4p2nNdsPxg4nrK7fYAtMUQHloAx3Kup0hLP22otfEsOvEfy2+\/\/kJ0P4noIgXpTRcBWBgaI9\/J3nuXfAwkQJO5oKgjYysDAOu\/ZZ58Tzz\/E\/n5xE662fiKgXBFC57WrhVSy9vi+T7948fcNDQzPA5pfq+z3Q9Za2yZXskLqFaFFXtOXpL+kSaNpFTYw9u5J+wSUggiYMmEDY7AeeGoIyAbGYBHPXk3iCcgGhn3UgxkmloBsYAwm4XBVrjVCtFzJSi0WySaZdlxXKJUM7yw2MAaXfLgy3wgROnlGyOWf\/oJXMAabf1VXp1whaB6QWEnzgEkQfnd3fz1FJbU2P46rNVGRhRHoAwKu45hWpJSLyRj09QE0biI6BKwNghqVlmIREZeMEBZGoB8I2N7W1e51snuxFhwwjftxBdxGqhHYtYLlinKwFgwJ6sVUw8M3HzcCruP1tgpjwAzNA6LBctkbGMbdONfPCPgaULsrSpQ9AvqZjA8jEDMCWPQwQtxThaNHF5GAEZKUuUBzc\/w1sAhYgxfc86ZhKpYwfAJZGIE4EShX5gDJEfoq2jEEJPvDJHZ2duJsm+tmBISdhKbIdcBR0YCuSeyyk5FiBOJBoFwum4q1CmpAkVlArsuWsAGHv+JDwKlwTEm12wVnMsMLaBIakA0RIMESFwI7FQ0oMvcW0IbpgguHDq3Q60gLmIopuzwfGBf4aa\/XJx8ZIIVDhRWfgIjQJMx7CLe3txGwMAKRI7C95e1EobVjuIYGPCPEiywgY7vEBAQOLNEjYDWgEtkLtnafgIXDRxdsN2wL2kIcMgK9IlCiHw03E9C09FuYmjIGCOr0CVhp4B2EW\/c2K0kOGIFoELA9qxT6XLDGagJmcxewVQc0IGvBIEwc7wUBn09G+x0lju1KFQFhDWvhvobDrAV3QeJYbwhsrG+YCmiW5c3ammjYVy3Fu3fzeqf0IW0TMz02NipGRup\/tKX6DE4xAo0RwNhvY+Me+ZuKxYemjhRqS1ZpQBw0c4JKziG+ubnFE9MAgqUrBOB2BQ5Basd+tsI6AuJA4b77L5JqNBPT6xue+rQncMgItIsAhnHGzU+Ii4Wp6rGfrSOUgOZgWf\/cGCTkIbO15bHYnsQhI9AKgS2adC6ZRQ1676OsTY8adk5DAsJZUArnHE6CGvW9WMNq4TxGIICA1\/V6U3lSu3PW6TlQxI82JCBKFA4fm9fSfQ1rxGura0xCHzaONEIA5ANXwBl6\/fK1Rl2vPZ+Ges3FWMXl7UtkxsxkMhkxOTGRyK18m6PAR9tBAKRbhaKC1zM5OZPV+2Sr85pqQJxsrOKy+wLMaFS8ukbsTsg+Mq3A4ePtI1BDvkXp6BfaObulBrSVFJeWpnVGXsL8IGtCiwqHQCCEfM81G\/cFUWubgDiploQHJg6ITEL2FAyCwvH2EcCYb31t3Xa70Hxtkw+tdERAnBAkITa0nJicYBICmBSKNTisl0un5ANkHRMQJxkSZtXbMExoiy0xOjrCS3YAJkWCeb7NzU3T\/cLgwJiv3W43CFNXBLQVfHrn1rzU6gzSueFhMUJrx9wlW3SSGWK8B+eC7corvJhqURulVwsFz8W+07vuiYBorLi8dFpLdZ60YR5dMrRhLpfr9Dq4\/D5AoErrkdsezfSde\/jwkfleLr1nAqJxdMkiK8\/TvgqnkAYRxw+Mi6FsYjfhx22mRuDPh3XdgI\/ogqSl2m663FrQIiGgrdRoQyHPYqoGeSDgcG6YNaIFaJ+FdcSjuWCztHb\/sYtR3UqkBLQX9entpVellj+zRIRGNGQcybFWtCANYIjxHd4N3yEnghK9nIa0J+huaay3vjXf7Viv0e3GQkDbWK1GtPkgYyabEVkKFS3vZenD0l8EQC58sB8QVriwY4HZmMAnnbmeBSLIO2J980LUxLN3GysBbSPF5eUZV5RPS5k5iakbmx8MoSVhQWNaR2W8EHEvvUtQk6b8oNhywbykxy2Bau8Tc3MQTaHVYMYnr0I4bESKfDN3V3uyl14gar5Ha7QLeFMyvEh0udVPMrp6G9ZULBbzYmJsljaonlFCPUFKfroRKRtWwgeiQYC25aOh0lVXO7RZOO0PtHZvIS5N1+iC+07ARhfiWdJERqny9C86Tf+\/eaXVg6a81NP2PC1kXkidt2kTasqj8lV5iU\/Q5vJ2f+\/AveKn17wkHdfejxC5knajp2kT7AdutmSmnUmjsGADzXYd\/T+j7cbUE7Qx3wAAAABJRU5ErkJggg==" + }, + "copyright": "Copyright 2023 Dify", + "privacy_policy": "https:\/\/dify.ai\n", + "position": 6, + "chunk_structure": "qa_model", + "language": "en-US" + } + ] + }, + "9f5ea5a7-7796-49f3-9e9a-ae2d8e84cfa3": { + "chunk_structure": "text_model", + "description": "In this template, the document content is divided into smaller paragraphs, known as general chunks, which are directly used for matching user queries and retrieval in Economical indexing mode.", + "export_data": "dependencies:\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/dify_extractor:0.0.5@ba7e2fd9165eda73bfcc68e31a108855197e88706e5556c058e0777ab08409b3\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/general_chunker:0.0.7@a685cc66820d0471545499d2ff5c87ed7e51525470155dbc2f82e1114cd2a9d6\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/notion_datasource:0.1.12@2855c4a7cffd3311118ebe70f095e546f99935e47f12c841123146f728534f55\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/jina_datasource:0.0.5@75942f5bbde870ad28e0345ff5ebf54ebd3aec63f0e66344ef76b88cf06b85c3\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/google_drive:0.1.6@4bc0cf8f8979ebd7321b91506b4bc8f090b05b769b5d214f2da4ce4c04ce30bd\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/firecrawl_datasource:0.2.4@37b490ebc52ac30d1c6cbfa538edcddddcfed7d5f5de58982edbd4e2094eb6e2\nkind: rag_pipeline\nrag_pipeline:\n description: ''\n icon: d86a91f4-9a03-4680-a040-e5210e5595e6\n icon_background: '#FFEAD5'\n icon_type: image\n icon_url: data:image/png;base64,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\n name: General Mode-ECO\nversion: 0.1.0\nworkflow:\n conversation_variables: []\n environment_variables: []\n features: {}\n graph:\n edges:\n - data:\n isInLoop: false\n sourceType: tool\n targetType: knowledge-index\n id: 1751337124089-source-1750836372241-target\n selected: false\n source: '1751337124089'\n sourceHandle: source\n target: '1750836372241'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: variable-aggregator\n targetType: tool\n id: 1753346901505-source-1751337124089-target\n selected: false\n source: '1753346901505'\n sourceHandle: source\n target: '1751337124089'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: tool\n targetType: variable-aggregator\n id: 1750836391776-source-1753346901505-target\n selected: false\n source: '1750836391776'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: document-extractor\n targetType: variable-aggregator\n id: 1753349228522-source-1753346901505-target\n selected: false\n source: '1753349228522'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1754023419266-source-1753346901505-target\n selected: false\n source: '1754023419266'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1756442998557-source-1756442986174-target\n selected: false\n source: '1756442998557'\n sourceHandle: source\n target: '1756442986174'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInIteration: false\n isInLoop: false\n sourceType: variable-aggregator\n targetType: if-else\n id: 1756442986174-source-1756443014860-target\n selected: false\n source: '1756442986174'\n sourceHandle: source\n target: '1756443014860'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1750836380067-source-1756442986174-target\n selected: false\n source: '1750836380067'\n sourceHandle: source\n target: '1756442986174'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: if-else\n targetType: tool\n id: 1756443014860-true-1750836391776-target\n selected: false\n source: '1756443014860'\n sourceHandle: 'true'\n target: '1750836391776'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: if-else\n targetType: document-extractor\n id: 1756443014860-false-1753349228522-target\n selected: false\n source: '1756443014860'\n sourceHandle: 'false'\n target: '1753349228522'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1756896212061-source-1753346901505-target\n source: '1756896212061'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1756907397615-source-1753346901505-target\n source: '1756907397615'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n nodes:\n - data:\n chunk_structure: text_model\n index_chunk_variable_selector:\n - '1751337124089'\n - result\n indexing_technique: economy\n keyword_number: 10\n retrieval_model:\n score_threshold: 0.5\n score_threshold_enabled: false\n search_method: keyword_search\n top_k: 3\n selected: false\n title: Knowledge Base\n type: knowledge-index\n height: 114\n id: '1750836372241'\n position:\n x: 479.7628208876065\n y: 326\n positionAbsolute:\n x: 479.7628208876065\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: File\n datasource_name: upload-file\n datasource_parameters: {}\n fileExtensions:\n - txt\n - markdown\n - mdx\n - pdf\n - html\n - xlsx\n - xls\n - vtt\n - properties\n - doc\n - docx\n - csv\n - eml\n - msg\n - pptx\n - xml\n - epub\n - ppt\n - md\n plugin_id: langgenius/file\n provider_name: file\n provider_type: local_file\n selected: false\n title: File\n type: datasource\n height: 52\n id: '1750836380067'\n position:\n x: -1371.6520723158733\n y: 224.87938381325645\n positionAbsolute:\n x: -1371.6520723158733\n y: 224.87938381325645\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n is_team_authorization: true\n output_schema:\n properties:\n documents:\n description: the documents extracted from the file\n items:\n type: object\n type: array\n images:\n description: The images extracted from the file\n items:\n type: object\n type: array\n type: object\n paramSchemas:\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg,\n jpeg)\n ja_JP: the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg,\n jpeg)\n pt_BR: o arquivo a ser analisado (suporta pdf, ppt, pptx, doc, docx, png,\n jpg, jpeg)\n zh_Hans: 用于解析的文件(支持 pdf, ppt, pptx, doc, docx, png, jpg, jpeg)\n label:\n en_US: file\n ja_JP: file\n pt_BR: file\n zh_Hans: file\n llm_description: the file to be parsed (support pdf, ppt, pptx, doc, docx,\n png, jpg, jpeg)\n max: null\n min: null\n name: file\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: file\n params:\n file: ''\n provider_id: langgenius/dify_extractor/dify_extractor\n provider_name: langgenius/dify_extractor/dify_extractor\n provider_type: builtin\n selected: false\n title: Dify Extractor\n tool_configurations: {}\n tool_description: Dify Extractor\n tool_label: Dify Extractor\n tool_name: dify_extractor\n tool_node_version: '2'\n tool_parameters:\n file:\n type: variable\n value:\n - '1756442986174'\n - output\n type: tool\n height: 52\n id: '1750836391776'\n position:\n x: -417.5334221022782\n y: 268.1692071834485\n positionAbsolute:\n x: -417.5334221022782\n y: 268.1692071834485\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n author: TenTen\n desc: ''\n height: 252\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Knowledge\n Pipeline\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\n starts with Data Source as the starting node and ends with the knowledge\n base node. The general steps are: import documents from the data source\n → use extractor to extract document content → split and clean content into\n structured chunks → store in the knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n user input variables required by the Knowledge Pipeline node must be predefined\n and managed via the Input Field section located in the top-right corner\n of the orchestration canvas. It determines what input fields the end users\n will see and need to fill in when importing files to the knowledge base\n through this pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Unique\n Inputs: Input fields defined here are only available to the selected data\n source and its downstream nodes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Global\n Inputs: These input fields are shared across all subsequent nodes after\n the data source and are typically set during the Process Documents step.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For\n more information, see \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer\",\"target\":null,\"title\":null,\"url\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 1124\n height: 252\n id: '1751252161631'\n position:\n x: -1371.6520723158733\n y: -123.758428116601\n positionAbsolute:\n x: -1371.6520723158733\n y: -123.758428116601\n selected: true\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 1124\n - data:\n author: TenTen\n desc: ''\n height: 388\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Currently\n we support 4 types of \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Data\n Sources\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\":\n File Upload, Online Drive, Online Doc, and Web Crawler. Different types\n of Data Sources have different input and output types. The output of File\n Upload and Online Drive are files, while the output of Online Doc and WebCrawler\n are pages. You can find more Data Sources on our Marketplace.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n Knowledge Pipeline can have multiple data sources. Each data source can\n be selected more than once with different settings. Each added data source\n is a tab on the add file interface. However, each time the user can only\n select one data source to import the file and trigger its subsequent processing.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 285\n height: 388\n id: '1751252440357'\n position:\n x: -1723.9942193415582\n y: 224.87938381325645\n positionAbsolute:\n x: -1723.9942193415582\n y: 224.87938381325645\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 285\n - data:\n author: TenTen\n desc: ''\n height: 430\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n document extractor in Retrieval-Augmented Generation (RAG) is a tool or\n component that automatically identifies, extracts, and structures text and\n data from various types of documents—such as PDFs, images, scanned files,\n handwritten notes, and more—into a format that can be effectively used by\n language models within RAG Pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Dify\n Extractor\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" is\n a built-in document parser developed by Dify. It supports a wide range of\n common file formats and offers specialized handling for certain formats,\n such as \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":16,\"mode\":\"normal\",\"style\":\"\",\"text\":\".docx\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\".\n In addition to text extraction, it can extract images embedded within documents,\n store them, and return their accessible URLs.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 430\n id: '1751253091602'\n position:\n x: -417.5334221022782\n y: 532.832924599999\n positionAbsolute:\n x: -417.5334221022782\n y: 532.832924599999\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n author: TenTen\n desc: ''\n height: 265\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"General\n Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" divides\n content into chunks and retrieves the most relevant ones based on the user’s\n query for LLM processing. You can customize chunking rules—such as delimiter,\n maximum length, and overlap—to fit different document formats or scenarios.\n Preprocessing options are also available to clean up the text by removing\n excess spaces, URLs, and emails.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 265\n id: '1751253953926'\n position:\n x: 184.46657789772178\n y: 407.42301051148354\n positionAbsolute:\n x: 184.46657789772178\n y: 407.42301051148354\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n author: TenTen\n desc: ''\n height: 344\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n knowledge base provides two indexing methods: \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Economical\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\",\n each with different retrieval strategies. High-Quality mode uses embeddings\n for vectorization and supports vector, full-text, and hybrid retrieval,\n offering more accurate results but higher resource usage. Economical mode\n uses keyword-based inverted indexing with no token consumption but lower\n accuracy; upgrading to High-Quality is possible, but downgrading requires\n creating a new knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 344\n id: '1751254117904'\n position:\n x: 479.7628208876065\n y: 472.46585541244207\n positionAbsolute:\n x: 479.7628208876065\n y: 472.46585541244207\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n is_team_authorization: true\n output_schema:\n properties:\n result:\n description: The result of the general chunk tool.\n properties:\n general_chunks:\n items:\n description: The chunk of the text.\n type: string\n type: array\n type: object\n type: object\n paramSchemas:\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: The text you want to chunk.\n ja_JP: The text you want to chunk.\n pt_BR: The text you want to chunk.\n zh_Hans: 你想要分块的文本。\n label:\n en_US: Input Content\n ja_JP: Input Content\n pt_BR: Input Content\n zh_Hans: 输入变量\n llm_description: The text you want to chunk.\n max: null\n min: null\n name: input_variable\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: The delimiter of the chunks.\n ja_JP: The delimiter of the chunks.\n pt_BR: The delimiter of the chunks.\n zh_Hans: 块的分隔符。\n label:\n en_US: Delimiter\n ja_JP: Delimiter\n pt_BR: Delimiter\n zh_Hans: 分隔符\n llm_description: The delimiter of the chunks, the format of the delimiter\n must be a string.\n max: null\n min: null\n name: delimiter\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: The maximum chunk length.\n ja_JP: The maximum chunk length.\n pt_BR: The maximum chunk length.\n zh_Hans: 最大块的长度。\n label:\n en_US: Maximum Chunk Length\n ja_JP: Maximum Chunk Length\n pt_BR: Maximum Chunk Length\n zh_Hans: 最大块的长度\n llm_description: The maximum chunk length, the format of the chunk size\n must be an integer.\n max: null\n min: null\n name: max_chunk_length\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: number\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: The chunk overlap length.\n ja_JP: The chunk overlap length.\n pt_BR: The chunk overlap length.\n zh_Hans: 块的重叠长度。\n label:\n en_US: Chunk Overlap Length\n ja_JP: Chunk Overlap Length\n pt_BR: Chunk Overlap Length\n zh_Hans: 块的重叠长度\n llm_description: The chunk overlap length, the format of the chunk overlap\n length must be an integer.\n max: null\n min: null\n name: chunk_overlap_length\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: number\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: Replace consecutive spaces, newlines and tabs\n ja_JP: Replace consecutive spaces, newlines and tabs\n pt_BR: Replace consecutive spaces, newlines and tabs\n zh_Hans: 替换连续的空格、换行符和制表符\n label:\n en_US: Replace consecutive spaces, newlines and tabs\n ja_JP: Replace consecutive spaces, newlines and tabs\n pt_BR: Replace consecutive spaces, newlines and tabs\n zh_Hans: 替换连续的空格、换行符和制表符\n llm_description: Replace consecutive spaces, newlines and tabs, the format\n of the replace must be a boolean.\n max: null\n min: null\n name: replace_consecutive_spaces_newlines_tabs\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: Delete all URLs and email addresses\n ja_JP: Delete all URLs and email addresses\n pt_BR: Delete all URLs and email addresses\n zh_Hans: 删除所有URL和电子邮件地址\n label:\n en_US: Delete all URLs and email addresses\n ja_JP: Delete all URLs and email addresses\n pt_BR: Delete all URLs and email addresses\n zh_Hans: 删除所有URL和电子邮件地址\n llm_description: Delete all URLs and email addresses, the format of the\n delete must be a boolean.\n max: null\n min: null\n name: delete_all_urls_and_email_addresses\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n params:\n chunk_overlap_length: ''\n delete_all_urls_and_email_addresses: ''\n delimiter: ''\n input_variable: ''\n max_chunk_length: ''\n replace_consecutive_spaces_newlines_tabs: ''\n provider_id: langgenius/general_chunker/general_chunker\n provider_name: langgenius/general_chunker/general_chunker\n provider_type: builtin\n selected: false\n title: General Chunker\n tool_configurations: {}\n tool_description: A tool for general text chunking mode, the chunks retrieved\n and recalled are the same.\n tool_label: General Chunker\n tool_name: general_chunker\n tool_node_version: '2'\n tool_parameters:\n chunk_overlap_length:\n type: variable\n value:\n - rag\n - shared\n - Chunk_Overlap_Length\n delete_all_urls_and_email_addresses:\n type: variable\n value:\n - rag\n - shared\n - clean_2\n delimiter:\n type: mixed\n value: '{{#rag.shared.Dilmiter#}}'\n input_variable:\n type: mixed\n value: '{{#1753346901505.output#}}'\n max_chunk_length:\n type: variable\n value:\n - rag\n - shared\n - Maximum_Chunk_Length\n replace_consecutive_spaces_newlines_tabs:\n type: variable\n value:\n - rag\n - shared\n - clean_1\n type: tool\n height: 52\n id: '1751337124089'\n position:\n x: 184.46657789772178\n y: 326\n positionAbsolute:\n x: 184.46657789772178\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n output_type: string\n selected: false\n title: Variable Aggregator\n type: variable-aggregator\n variables:\n - - '1750836391776'\n - text\n - - '1753349228522'\n - text\n - - '1754023419266'\n - content\n - - '1756896212061'\n - content\n height: 187\n id: '1753346901505'\n position:\n x: -117.24452412456148\n y: 326\n positionAbsolute:\n x: -117.24452412456148\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n is_array_file: false\n selected: false\n title: Doc Extractor\n type: document-extractor\n variable_selector:\n - '1756442986174'\n - output\n height: 92\n id: '1753349228522'\n position:\n x: -417.5334221022782\n y: 417.25474169825833\n positionAbsolute:\n x: -417.5334221022782\n y: 417.25474169825833\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: Notion\n datasource_name: notion_datasource\n datasource_parameters: {}\n plugin_id: langgenius/notion_datasource\n provider_name: notion_datasource\n provider_type: online_document\n selected: false\n title: Notion\n type: datasource\n height: 52\n id: '1754023419266'\n position:\n x: -1369.6904698303242\n y: 440.01452302398053\n positionAbsolute:\n x: -1369.6904698303242\n y: 440.01452302398053\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n output_type: file\n selected: false\n title: Variable Aggregator\n type: variable-aggregator\n variables:\n - - '1750836380067'\n - file\n - - '1756442998557'\n - file\n height: 135\n id: '1756442986174'\n position:\n x: -1067.06980963949\n y: 236.10252072775984\n positionAbsolute:\n x: -1067.06980963949\n y: 236.10252072775984\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: Google Drive\n datasource_name: google_drive\n datasource_parameters: {}\n plugin_id: langgenius/google_drive\n provider_name: google_drive\n provider_type: online_drive\n selected: false\n title: Google Drive\n type: datasource\n height: 52\n id: '1756442998557'\n position:\n x: -1371.6520723158733\n y: 326\n positionAbsolute:\n x: -1371.6520723158733\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n cases:\n - case_id: 'true'\n conditions:\n - comparison_operator: is\n id: 1581dd11-7898-41f4-962f-937283ba7e01\n value: .xlsx\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 92abb46d-d7e4-46e7-a5e1-8a29bb45d528\n value: .xls\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 1dde5ae7-754d-4e83-96b2-fe1f02995d8b\n value: .md\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 7e1a80e5-c32a-46a4-8f92-8912c64972aa\n value: .markdown\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 53abfe95-c7d0-4f63-ad37-17d425d25106\n value: .mdx\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 436877b8-8c0a-4cc6-9565-92754db08571\n value: .html\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 5e3e375e-750b-4204-8ac3-9a1174a5ab7c\n value: .htm\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 1a84a784-a797-4f96-98a0-33a9b48ceb2b\n value: .docx\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 62d11445-876a-493f-85d3-8fc020146bdd\n value: .csv\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 02c4bce8-7668-4ccd-b750-4281f314b231\n value: .txt\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n id: 'true'\n logical_operator: or\n selected: false\n title: IF/ELSE\n type: if-else\n height: 358\n id: '1756443014860'\n position:\n x: -733.5977815139424\n y: 236.10252072775984\n positionAbsolute:\n x: -733.5977815139424\n y: 236.10252072775984\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: Jina Reader\n datasource_name: jina_reader\n datasource_parameters:\n crawl_sub_pages:\n type: variable\n value:\n - rag\n - '1756896212061'\n - jina_subpages\n limit:\n type: variable\n value:\n - rag\n - '1756896212061'\n - jina_limit\n url:\n type: mixed\n value: '{{#rag.1756896212061.jina_url#}}'\n use_sitemap:\n type: variable\n value:\n - rag\n - '1756896212061'\n - jian_sitemap\n plugin_id: langgenius/jina_datasource\n provider_name: jinareader\n provider_type: website_crawl\n selected: false\n title: Jina Reader\n type: datasource\n height: 52\n id: '1756896212061'\n position:\n x: -1371.6520723158733\n y: 538.9988445953813\n positionAbsolute:\n x: -1371.6520723158733\n y: 538.9988445953813\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: Firecrawl\n datasource_name: crawl\n datasource_parameters:\n crawl_subpages:\n type: variable\n value:\n - rag\n - '1756907397615'\n - firecrawl_subpages\n exclude_paths:\n type: mixed\n value: '{{#rag.1756907397615.exclude_paths#}}'\n include_paths:\n type: mixed\n value: '{{#rag.1756907397615.include_paths#}}'\n limit:\n type: variable\n value:\n - rag\n - '1756907397615'\n - max_pages\n max_depth:\n type: variable\n value:\n - rag\n - '1756907397615'\n - max_depth\n only_main_content:\n type: variable\n value:\n - rag\n - '1756907397615'\n - main_content\n url:\n type: mixed\n value: '{{#rag.1756907397615.firecrawl_url1#}}'\n plugin_id: langgenius/firecrawl_datasource\n provider_name: firecrawl\n provider_type: website_crawl\n selected: false\n title: Firecrawl\n type: datasource\n height: 52\n id: '1756907397615'\n position:\n x: -1371.6520723158733\n y: 644.3296146102903\n positionAbsolute:\n x: -1371.6520723158733\n y: 644.3296146102903\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n viewport:\n x: 1463.3408543698197\n y: 224.29398382646679\n zoom: 0.6387381963193622\n rag_pipeline_variables:\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1753688365254'\n default_value: null\n label: URL\n max_length: 256\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: text-input\n unit: null\n variable: jina_reader_url\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1753688365254'\n default_value: 10\n label: Limit\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: number\n unit: pages\n variable: jina_reader_imit\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1753688365254'\n default_value: true\n label: Crawl sub-pages\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: checkbox\n unit: null\n variable: Crawl_sub_pages_2\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1753688365254'\n default_value: true\n label: Use sitemap\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: Use_sitemap\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756896212061'\n default_value: null\n label: URL\n max_length: 256\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: text-input\n unit: null\n variable: jina_url\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756896212061'\n default_value: 10\n label: Limit\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: number\n unit: pages\n variable: jina_limit\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756896212061'\n default_value: true\n label: Use sitemap\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: Follow the sitemap to crawl the site. If not, Jina Reader will crawl\n iteratively based on page relevance, yielding fewer but higher-quality pages.\n type: checkbox\n unit: null\n variable: jian_sitemap\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756896212061'\n default_value: true\n label: Crawl subpages\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: jina_subpages\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: null\n label: URL\n max_length: 256\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: text-input\n unit: null\n variable: firecrawl_url1\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: true\n label: firecrawl_subpages\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: firecrawl_subpages\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: null\n label: Exclude paths\n max_length: 256\n options: []\n placeholder: blog/*,/about/*\n required: false\n tooltips: null\n type: text-input\n unit: null\n variable: exclude_paths\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: null\n label: include_paths\n max_length: 256\n options: []\n placeholder: articles/*\n required: false\n tooltips: null\n type: text-input\n unit: null\n variable: include_paths\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: 0\n label: Max depth\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: Maximum depth to crawl relative to the entered URL. Depth 0 just scrapes\n the page of the entered url, depth 1 scrapes the url and everything after enteredURL\n + one /, and so on.\n type: number\n unit: null\n variable: max_depth\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: 10\n label: Limit\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: number\n unit: null\n variable: max_pages\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: true\n label: Extract only main content (no headers, navs, footers, etc.)\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: main_content\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: \\n\\n\n label: Dilmiter\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: A delimiter is the character used to separate text. \\n\\n and \\n are\n commonly used delimiters for separating paragraphs and lines. Combined with\n commas (\\n\\n,\\n), paragraphs will be segmented by lines when exceeding the maximum\n chunk length. You can also use special delimiters defined by yourself (e.g.\n ***).\n type: text-input\n unit: null\n variable: Dilmiter\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: 1024\n label: Maximum Chunk Length\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: number\n unit: tokens\n variable: Maximum_Chunk_Length\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: 128\n label: Chunk Overlap Length\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: Setting the chunk overlap can maintain the semantic relevance between\n them, enhancing the retrieve effect. It is recommended to set 10%-25% of the\n maximum chunk size.\n type: number\n unit: tokens\n variable: Chunk_Overlap_Length\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: true\n label: Replace consecutive spaces, newlines and tabs.\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: clean_1\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: null\n label: Delete all URLs and email addresses.\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: clean_2\n", + "graph": { + "edges": [ + { + "data": { + "isInLoop": false, + "sourceType": "tool", + "targetType": "knowledge-index" + }, + "id": "1751337124089-source-1750836372241-target", + "selected": false, + "source": "1751337124089", + "sourceHandle": "source", + "target": "1750836372241", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "variable-aggregator", + "targetType": "tool" + }, + "id": "1753346901505-source-1751337124089-target", + "selected": false, + "source": "1753346901505", + "sourceHandle": "source", + "target": "1751337124089", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "tool", + "targetType": "variable-aggregator" + }, + "id": "1750836391776-source-1753346901505-target", + "selected": false, + "source": "1750836391776", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "document-extractor", + "targetType": "variable-aggregator" + }, + "id": "1753349228522-source-1753346901505-target", + "selected": false, + "source": "1753349228522", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1754023419266-source-1753346901505-target", + "selected": false, + "source": "1754023419266", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1756442998557-source-1756442986174-target", + "selected": false, + "source": "1756442998557", + "sourceHandle": "source", + "target": "1756442986174", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInIteration": false, + "isInLoop": false, + "sourceType": "variable-aggregator", + "targetType": "if-else" + }, + "id": "1756442986174-source-1756443014860-target", + "selected": false, + "source": "1756442986174", + "sourceHandle": "source", + "target": "1756443014860", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1750836380067-source-1756442986174-target", + "selected": false, + "source": "1750836380067", + "sourceHandle": "source", + "target": "1756442986174", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "if-else", + "targetType": "tool" + }, + "id": "1756443014860-true-1750836391776-target", + "selected": false, + "source": "1756443014860", + "sourceHandle": "true", + "target": "1750836391776", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "if-else", + "targetType": "document-extractor" + }, + "id": "1756443014860-false-1753349228522-target", + "selected": false, + "source": "1756443014860", + "sourceHandle": "false", + "target": "1753349228522", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1756896212061-source-1753346901505-target", + "source": "1756896212061", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1756907397615-source-1753346901505-target", + "source": "1756907397615", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + } + ], + "nodes": [ + { + "data": { + "chunk_structure": "text_model", + "index_chunk_variable_selector": [ + "1751337124089", + "result" + ], + "indexing_technique": "economy", + "keyword_number": 10, + "retrieval_model": { + "score_threshold": 0.5, + "score_threshold_enabled": false, + "search_method": "keyword_search", + "top_k": 3 + }, + "selected": false, + "title": "Knowledge Base", + "type": "knowledge-index" + }, + "height": 114, + "id": "1750836372241", + "position": { + "x": 479.7628208876065, + "y": 326 + }, + "positionAbsolute": { + "x": 479.7628208876065, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "File", + "datasource_name": "upload-file", + "datasource_parameters": {}, + "fileExtensions": [ + "txt", + "markdown", + "mdx", + "pdf", + "html", + "xlsx", + "xls", + "vtt", + "properties", + "doc", + "docx", + "csv", + "eml", + "msg", + "pptx", + "xml", + "epub", + "ppt", + "md" + ], + "plugin_id": "langgenius/file", + "provider_name": "file", + "provider_type": "local_file", + "selected": false, + "title": "File", + "type": "datasource" + }, + "height": 52, + "id": "1750836380067", + "position": { + "x": -1371.6520723158733, + "y": 224.87938381325645 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": 224.87938381325645 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "is_team_authorization": true, + "output_schema": { + "properties": { + "documents": { + "description": "the documents extracted from the file", + "items": { + "type": "object" + }, + "type": "array" + }, + "images": { + "description": "The images extracted from the file", + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "paramSchemas": [ + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "ja_JP": "the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "pt_BR": "o arquivo a ser analisado (suporta pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "zh_Hans": "用于解析的文件(支持 pdf, ppt, pptx, doc, docx, png, jpg, jpeg)" + }, + "label": { + "en_US": "file", + "ja_JP": "file", + "pt_BR": "file", + "zh_Hans": "file" + }, + "llm_description": "the file to be parsed (support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "max": null, + "min": null, + "name": "file", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "file" + } + ], + "params": { + "file": "" + }, + "provider_id": "langgenius/dify_extractor/dify_extractor", + "provider_name": "langgenius/dify_extractor/dify_extractor", + "provider_type": "builtin", + "selected": false, + "title": "Dify Extractor", + "tool_configurations": {}, + "tool_description": "Dify Extractor", + "tool_label": "Dify Extractor", + "tool_name": "dify_extractor", + "tool_node_version": "2", + "tool_parameters": { + "file": { + "type": "variable", + "value": [ + "1756442986174", + "output" + ] + } + }, + "type": "tool" + }, + "height": 52, + "id": "1750836391776", + "position": { + "x": -417.5334221022782, + "y": 268.1692071834485 + }, + "positionAbsolute": { + "x": -417.5334221022782, + "y": 268.1692071834485 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 252, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Knowledge Pipeline\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" starts with Data Source as the starting node and ends with the knowledge base node. The general steps are: import documents from the data source → use extractor to extract document content → split and clean content into structured chunks → store in the knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The user input variables required by the Knowledge Pipeline node must be predefined and managed via the Input Field section located in the top-right corner of the orchestration canvas. It determines what input fields the end users will see and need to fill in when importing files to the knowledge base through this pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Unique Inputs: Input fields defined here are only available to the selected data source and its downstream nodes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Global Inputs: These input fields are shared across all subsequent nodes after the data source and are typically set during the Process Documents step.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For more information, see \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer\",\"target\":null,\"title\":null,\"url\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 1124 + }, + "height": 252, + "id": "1751252161631", + "position": { + "x": -1371.6520723158733, + "y": -123.758428116601 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": -123.758428116601 + }, + "selected": true, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 1124 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 388, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Currently we support 4 types of \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Data Sources\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\": File Upload, Online Drive, Online Doc, and Web Crawler. Different types of Data Sources have different input and output types. The output of File Upload and Online Drive are files, while the output of Online Doc and WebCrawler are pages. You can find more Data Sources on our Marketplace.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A Knowledge Pipeline can have multiple data sources. Each data source can be selected more than once with different settings. Each added data source is a tab on the add file interface. However, each time the user can only select one data source to import the file and trigger its subsequent processing.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 285 + }, + "height": 388, + "id": "1751252440357", + "position": { + "x": -1723.9942193415582, + "y": 224.87938381325645 + }, + "positionAbsolute": { + "x": -1723.9942193415582, + "y": 224.87938381325645 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 285 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 430, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A document extractor in Retrieval-Augmented Generation (RAG) is a tool or component that automatically identifies, extracts, and structures text and data from various types of documents—such as PDFs, images, scanned files, handwritten notes, and more—into a format that can be effectively used by language models within RAG Pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Dify Extractor\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" is a built-in document parser developed by Dify. It supports a wide range of common file formats and offers specialized handling for certain formats, such as \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":16,\"mode\":\"normal\",\"style\":\"\",\"text\":\".docx\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\". In addition to text extraction, it can extract images embedded within documents, store them, and return their accessible URLs.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 430, + "id": "1751253091602", + "position": { + "x": -417.5334221022782, + "y": 532.832924599999 + }, + "positionAbsolute": { + "x": -417.5334221022782, + "y": 532.832924599999 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 265, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"General Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" divides content into chunks and retrieves the most relevant ones based on the user’s query for LLM processing. You can customize chunking rules—such as delimiter, maximum length, and overlap—to fit different document formats or scenarios. Preprocessing options are also available to clean up the text by removing excess spaces, URLs, and emails.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 265, + "id": "1751253953926", + "position": { + "x": 184.46657789772178, + "y": 407.42301051148354 + }, + "positionAbsolute": { + "x": 184.46657789772178, + "y": 407.42301051148354 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 344, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The knowledge base provides two indexing methods: \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Economical\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", each with different retrieval strategies. High-Quality mode uses embeddings for vectorization and supports vector, full-text, and hybrid retrieval, offering more accurate results but higher resource usage. Economical mode uses keyword-based inverted indexing with no token consumption but lower accuracy; upgrading to High-Quality is possible, but downgrading requires creating a new knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 344, + "id": "1751254117904", + "position": { + "x": 479.7628208876065, + "y": 472.46585541244207 + }, + "positionAbsolute": { + "x": 479.7628208876065, + "y": 472.46585541244207 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "is_team_authorization": true, + "output_schema": { + "properties": { + "result": { + "description": "The result of the general chunk tool.", + "properties": { + "general_chunks": { + "items": { + "description": "The chunk of the text.", + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "paramSchemas": [ + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "The text you want to chunk.", + "ja_JP": "The text you want to chunk.", + "pt_BR": "The text you want to chunk.", + "zh_Hans": "你想要分块的文本。" + }, + "label": { + "en_US": "Input Content", + "ja_JP": "Input Content", + "pt_BR": "Input Content", + "zh_Hans": "输入变量" + }, + "llm_description": "The text you want to chunk.", + "max": null, + "min": null, + "name": "input_variable", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "The delimiter of the chunks.", + "ja_JP": "The delimiter of the chunks.", + "pt_BR": "The delimiter of the chunks.", + "zh_Hans": "块的分隔符。" + }, + "label": { + "en_US": "Delimiter", + "ja_JP": "Delimiter", + "pt_BR": "Delimiter", + "zh_Hans": "分隔符" + }, + "llm_description": "The delimiter of the chunks, the format of the delimiter must be a string.", + "max": null, + "min": null, + "name": "delimiter", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "The maximum chunk length.", + "ja_JP": "The maximum chunk length.", + "pt_BR": "The maximum chunk length.", + "zh_Hans": "最大块的长度。" + }, + "label": { + "en_US": "Maximum Chunk Length", + "ja_JP": "Maximum Chunk Length", + "pt_BR": "Maximum Chunk Length", + "zh_Hans": "最大块的长度" + }, + "llm_description": "The maximum chunk length, the format of the chunk size must be an integer.", + "max": null, + "min": null, + "name": "max_chunk_length", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "number" + }, + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "The chunk overlap length.", + "ja_JP": "The chunk overlap length.", + "pt_BR": "The chunk overlap length.", + "zh_Hans": "块的重叠长度。" + }, + "label": { + "en_US": "Chunk Overlap Length", + "ja_JP": "Chunk Overlap Length", + "pt_BR": "Chunk Overlap Length", + "zh_Hans": "块的重叠长度" + }, + "llm_description": "The chunk overlap length, the format of the chunk overlap length must be an integer.", + "max": null, + "min": null, + "name": "chunk_overlap_length", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "number" + }, + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "Replace consecutive spaces, newlines and tabs", + "ja_JP": "Replace consecutive spaces, newlines and tabs", + "pt_BR": "Replace consecutive spaces, newlines and tabs", + "zh_Hans": "替换连续的空格、换行符和制表符" + }, + "label": { + "en_US": "Replace consecutive spaces, newlines and tabs", + "ja_JP": "Replace consecutive spaces, newlines and tabs", + "pt_BR": "Replace consecutive spaces, newlines and tabs", + "zh_Hans": "替换连续的空格、换行符和制表符" + }, + "llm_description": "Replace consecutive spaces, newlines and tabs, the format of the replace must be a boolean.", + "max": null, + "min": null, + "name": "replace_consecutive_spaces_newlines_tabs", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + }, + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "Delete all URLs and email addresses", + "ja_JP": "Delete all URLs and email addresses", + "pt_BR": "Delete all URLs and email addresses", + "zh_Hans": "删除所有URL和电子邮件地址" + }, + "label": { + "en_US": "Delete all URLs and email addresses", + "ja_JP": "Delete all URLs and email addresses", + "pt_BR": "Delete all URLs and email addresses", + "zh_Hans": "删除所有URL和电子邮件地址" + }, + "llm_description": "Delete all URLs and email addresses, the format of the delete must be a boolean.", + "max": null, + "min": null, + "name": "delete_all_urls_and_email_addresses", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + } + ], + "params": { + "chunk_overlap_length": "", + "delete_all_urls_and_email_addresses": "", + "delimiter": "", + "input_variable": "", + "max_chunk_length": "", + "replace_consecutive_spaces_newlines_tabs": "" + }, + "provider_id": "langgenius/general_chunker/general_chunker", + "provider_name": "langgenius/general_chunker/general_chunker", + "provider_type": "builtin", + "selected": false, + "title": "General Chunker", + "tool_configurations": {}, + "tool_description": "A tool for general text chunking mode, the chunks retrieved and recalled are the same.", + "tool_label": "General Chunker", + "tool_name": "general_chunker", + "tool_node_version": "2", + "tool_parameters": { + "chunk_overlap_length": { + "type": "variable", + "value": [ + "rag", + "shared", + "Chunk_Overlap_Length" + ] + }, + "delete_all_urls_and_email_addresses": { + "type": "variable", + "value": [ + "rag", + "shared", + "clean_2" + ] + }, + "delimiter": { + "type": "mixed", + "value": "{{#rag.shared.Dilmiter#}}" + }, + "input_variable": { + "type": "mixed", + "value": "{{#1753346901505.output#}}" + }, + "max_chunk_length": { + "type": "variable", + "value": [ + "rag", + "shared", + "Maximum_Chunk_Length" + ] + }, + "replace_consecutive_spaces_newlines_tabs": { + "type": "variable", + "value": [ + "rag", + "shared", + "clean_1" + ] + } + }, + "type": "tool" + }, + "height": 52, + "id": "1751337124089", + "position": { + "x": 184.46657789772178, + "y": 326 + }, + "positionAbsolute": { + "x": 184.46657789772178, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "output_type": "string", + "selected": false, + "title": "Variable Aggregator", + "type": "variable-aggregator", + "variables": [ + [ + "1750836391776", + "text" + ], + [ + "1753349228522", + "text" + ], + [ + "1754023419266", + "content" + ], + [ + "1756896212061", + "content" + ] + ] + }, + "height": 187, + "id": "1753346901505", + "position": { + "x": -117.24452412456148, + "y": 326 + }, + "positionAbsolute": { + "x": -117.24452412456148, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "is_array_file": false, + "selected": false, + "title": "Doc Extractor", + "type": "document-extractor", + "variable_selector": [ + "1756442986174", + "output" + ] + }, + "height": 92, + "id": "1753349228522", + "position": { + "x": -417.5334221022782, + "y": 417.25474169825833 + }, + "positionAbsolute": { + "x": -417.5334221022782, + "y": 417.25474169825833 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "Notion", + "datasource_name": "notion_datasource", + "datasource_parameters": {}, + "plugin_id": "langgenius/notion_datasource", + "provider_name": "notion_datasource", + "provider_type": "online_document", + "selected": false, + "title": "Notion", + "type": "datasource" + }, + "height": 52, + "id": "1754023419266", + "position": { + "x": -1369.6904698303242, + "y": 440.01452302398053 + }, + "positionAbsolute": { + "x": -1369.6904698303242, + "y": 440.01452302398053 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "output_type": "file", + "selected": false, + "title": "Variable Aggregator", + "type": "variable-aggregator", + "variables": [ + [ + "1750836380067", + "file" + ], + [ + "1756442998557", + "file" + ] + ] + }, + "height": 135, + "id": "1756442986174", + "position": { + "x": -1067.06980963949, + "y": 236.10252072775984 + }, + "positionAbsolute": { + "x": -1067.06980963949, + "y": 236.10252072775984 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "Google Drive", + "datasource_name": "google_drive", + "datasource_parameters": {}, + "plugin_id": "langgenius/google_drive", + "provider_name": "google_drive", + "provider_type": "online_drive", + "selected": false, + "title": "Google Drive", + "type": "datasource" + }, + "height": 52, + "id": "1756442998557", + "position": { + "x": -1371.6520723158733, + "y": 326 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "cases": [ + { + "case_id": "true", + "conditions": [ + { + "comparison_operator": "is", + "id": "1581dd11-7898-41f4-962f-937283ba7e01", + "value": ".xlsx", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "92abb46d-d7e4-46e7-a5e1-8a29bb45d528", + "value": ".xls", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "1dde5ae7-754d-4e83-96b2-fe1f02995d8b", + "value": ".md", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "7e1a80e5-c32a-46a4-8f92-8912c64972aa", + "value": ".markdown", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "53abfe95-c7d0-4f63-ad37-17d425d25106", + "value": ".mdx", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "436877b8-8c0a-4cc6-9565-92754db08571", + "value": ".html", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "5e3e375e-750b-4204-8ac3-9a1174a5ab7c", + "value": ".htm", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "1a84a784-a797-4f96-98a0-33a9b48ceb2b", + "value": ".docx", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "62d11445-876a-493f-85d3-8fc020146bdd", + "value": ".csv", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "02c4bce8-7668-4ccd-b750-4281f314b231", + "value": ".txt", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + } + ], + "id": "true", + "logical_operator": "or" + } + ], + "selected": false, + "title": "IF/ELSE", + "type": "if-else" + }, + "height": 358, + "id": "1756443014860", + "position": { + "x": -733.5977815139424, + "y": 236.10252072775984 + }, + "positionAbsolute": { + "x": -733.5977815139424, + "y": 236.10252072775984 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "Jina Reader", + "datasource_name": "jina_reader", + "datasource_parameters": { + "crawl_sub_pages": { + "type": "variable", + "value": [ + "rag", + "1756896212061", + "jina_subpages" + ] + }, + "limit": { + "type": "variable", + "value": [ + "rag", + "1756896212061", + "jina_limit" + ] + }, + "url": { + "type": "mixed", + "value": "{{#rag.1756896212061.jina_url#}}" + }, + "use_sitemap": { + "type": "variable", + "value": [ + "rag", + "1756896212061", + "jian_sitemap" + ] + } + }, + "plugin_id": "langgenius/jina_datasource", + "provider_name": "jinareader", + "provider_type": "website_crawl", + "selected": false, + "title": "Jina Reader", + "type": "datasource" + }, + "height": 52, + "id": "1756896212061", + "position": { + "x": -1371.6520723158733, + "y": 538.9988445953813 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": 538.9988445953813 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "Firecrawl", + "datasource_name": "crawl", + "datasource_parameters": { + "crawl_subpages": { + "type": "variable", + "value": [ + "rag", + "1756907397615", + "firecrawl_subpages" + ] + }, + "exclude_paths": { + "type": "mixed", + "value": "{{#rag.1756907397615.exclude_paths#}}" + }, + "include_paths": { + "type": "mixed", + "value": "{{#rag.1756907397615.include_paths#}}" + }, + "limit": { + "type": "variable", + "value": [ + "rag", + "1756907397615", + "max_pages" + ] + }, + "max_depth": { + "type": "variable", + "value": [ + "rag", + "1756907397615", + "max_depth" + ] + }, + "only_main_content": { + "type": "variable", + "value": [ + "rag", + "1756907397615", + "main_content" + ] + }, + "url": { + "type": "mixed", + "value": "{{#rag.1756907397615.firecrawl_url1#}}" + } + }, + "plugin_id": "langgenius/firecrawl_datasource", + "provider_name": "firecrawl", + "provider_type": "website_crawl", + "selected": false, + "title": "Firecrawl", + "type": "datasource" + }, + "height": 52, + "id": "1756907397615", + "position": { + "x": -1371.6520723158733, + "y": 644.3296146102903 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": 644.3296146102903 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + } + ], + "viewport": { + "x": 1463.3408543698197, + "y": 224.29398382646679, + "zoom": 0.6387381963193622 + } + }, + "icon_info": { + "icon": "52064ff0-26b6-47d0-902f-e331f94d959b", + "icon_background": null, + "icon_type": "image", + "icon_url": "data:image/png;base64,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" + }, + "id": "9f5ea5a7-7796-49f3-9e9a-ae2d8e84cfa3", + "name": "General Mode-ECO", + "icon": { + "icon": "52064ff0-26b6-47d0-902f-e331f94d959b", + "icon_background": null, + "icon_type": "image", + "icon_url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAoKADAAQAAAABAAAAoAAAAACn7BmJAAAT1klEQVR4Ae1dzXPcRBbvlsZ2xo6dcbwXinyMC+IDW5WY08IJh2NyIFRxJLvhHyDxaWv3kuS0e4v5CwjLHqmCHMgxMbVbBZxIOEAVCWXnq7hsMiaJPf4aad9Pmh5rNBqPPmdamtdVdkutVuv1r396/fX0RgpNwspvterurqjatqiatlWxhKgYUhyHeLaQFYrwh5OqE3v+SSkqtrruSS/yoRRijbBa89bRSZN7aVLYq7hu2eKBgfzSWLXpeqkkVmdfmXau4fogA8nc37CyUqs0TLEghfUOEatKhJoXspNU/ZVqOJ8mbXGHCLlq2/ZdKY07ZkMsz85Ot5E6a2T6QsB7j2oL9Aa+QxVdoArhryMYhiEMUnmmaQpJKg1/SEMgcJxzHJumm4ZjFVR+dT4MMWEp8OcNOLdI3algWQ3KQ52GbTl5LcuNGw2L8lEfExBASiHt5YZhfDZ3ZPpOQJZUkzIjIDSdZVgXbCnfI4kXlNQgS6lkOkQD2UZGRlqEU3k47g8CjUZDgIy7uzsUN8TOzm7bg4kcq0Tpq68f+8P1tgspnqROQId4JXGRXrlLalwG0o2NjRLZRh3y4ZyDngiAhNvbWw4ZlZYEEUlLXH/t6PTVtKVOlQn3H/7vnLSNazSuqELQkZGSOHCg7MRpC87lZY/A1tZ2i4x4GoiYtkZMhYCk9aoN0/6UZFyAoEw8oFCcAK24vr7uHTd+ZY7IxTRm0okJuPKodtGy7SvobtG1lstl0npjxUGfa9JCABqxXq8rItJs2VpMOj6MTUBnrGeKyzQXuwQJR0dHxMTERGu22pKaDwqFAMaFICHIiEDtv3Ti2Mxi3ErGIiC6XMuwv6Sx3jxrvbjQ5/u+zc0th4hY+sHSjTEq34/TJUcmYJN8tzHRwDrd1NRka70u35Cy9FERgDZ8/vyF0yUTkVaNEXk6KgkjEdBLPqzhTU4eZPJFbbWC5QcJX7x46awjxiFhaAL6yQfNx+t5BWNTzOqgG4YmxGJ2VBKGIiCTL2bLDNFtcUnYubEaAFpzwlFFt8uaLwAgTnJ6Q3ADHKEluaq1bX9JiqvSC5qeBPz1YQ07G/OYcGDMx91uL0iH9zq4oeYF4MyuaV3uhca+XTBtrV0QwvgUBR86NMUTjl5o8nUHAUxMfv/9uWOBQ13z4onjM0vdoOlKQGfcZ9o/YIdjfHycdze6IcjpgQhgnXBjYwPX1mjb7s1uyzNdu2Da270G8sGKhbfWAjHmxH0QAGewO0ah0thx7AQCcwcS0O16xTmM+7C3y4ERiIOAZ2t24f7D2rmgMgIJSCZVzuAR5FNWyUE3cxojsB8CmDsoBUbfp1wLmhV3EPDXR7XLapsN3S8HRiAJAuiKYZ5Hw7nqrmE5hive8joISJ9QXUAGqE8OjEAaCMAoGYE04kW/FmwjIMZ+0H5gLP44MAJpIODhU4W04AVvmW0EVGO/0VE2KPWCxMfJEfBoQXyk1gotAq48rs3z2K+FCx+kjAC0ICYlFBbwma4qvkVA+jzvAhK561XQcJw2Aq1JrWUtqLJbBJSGfAeJ3P0qaDhOGwF8lotAmtDhGo4dAmJmQiZd80hgDQgUOGSBABwSqG5YzYYdAjbMxgIeyOTLAnYuUyEA8oGECPAPhNghoG1LR/sZhnsRFzgwAlkgAHtBJ9juONAhIDHzFBLhp4UDI5AlAoqAjmc0elCTgKKKhwZ5nkI6B0YgLQSUkqPe2FF6zS7YnYAodqb1MC6HEfAj0JyEILmKfyWajVTJixxbvQCNnISNDUvcvl0X9+7tiKfPGuLp04Yj+fi4IY68WhKnTo2KkyfHxMyMfmN6EBAWVrCahldciVVpadu3MQOenJzMSRMMp5gg2uefvxC/3HPdYvRC4a23DoizZya0IyLM9fEJJ/mOPF2SdqOCoaBHNfaqV9+v443//vtN8csvO+Lxk93WG3/kSEnMHDbpjR8TADvrMEg5bt3eEDdvbpCZe7Bn06C6f/fdprh7d8sh4bvvjgdlGUgalmKcb4jtRlX++uDpJWLitbGxMTLB0kdIhQwA/PzfL3oCj+4Gb3tWRBykHF/fXBdff72uIIkVA5uzZ/UwscO3IvhmBB8sleCNHlvE8M+sW/jii5cCb36YgO7pX58/d7Rj2kAPUg7UP4h8cydonEdjvVOesd7jx7viEf3dvPmScGjXlCBxuSyFDprQ09tWSrBUBfU8iWHaO/M8ACws+bzC4L563RIffJDOeHaQcuClQrfrDePjUpwhbfbu6c7eCkMS/L1Nw5FbNEm5SVpzg7BQAXXBcGXQkxP1mYchjePOMgwE1ImAGLsEvfUKyF4xwEeXmTQMWg4QxjvmA/kuXZwOJJ+/ru+eLotLlypivNxqYnoxbZrEPPdnHeg59bzyOCTQaRsOwCcN6I69b3+c8gYpB7QfXgBvgOaDhgsbkPeMb9z3Cy3dJMUl7PO75VPKjjzrTu+9Ht1y9zkdoAP8pAFv+3fftjdglDIHLcfdH9s1+MyMEUrz+esITTh3on2L9fatuj9bX8/xuy8ItCR4SDsC3kmh61Rohl0vU/m98aDl+PFu+1rfmTMHveJFOj5J4z5vuBdyHdF7T1bH1AO7v8Gmyyy4Riv7aYUnT+KXNWg5MKP1BuxwxA2YKXvD02d7ExNver+OPTYHVYN+xYkWovWZhGAZIa2QpCsftBz+cdrRo/EJ6J/1JsElrbZR5WjXBSvBOB4OBLQjoP9tTdIMRyPMGP3PGbQc/ucn0Vp+bY4FaV2CdgR8NcFYxw/q9OH41Ru0HDM+2ZOsaz7xDWuOHmmfFftx6+d5axKi1mb6+fCgZ83NpQfOqVPxDRQGLceJuXa/PD/6lmWCsOuW5l/PPHmyvexu92WV7uFaxaCtOK0mIW+/VW5bvY8LAtbNsCUVNwxaDv9WGxaQb91q35YLUzdsZ/q7b2zHDTK0EXCQggQ9G+OT839Ovo+bZN0Mcg1aDjzfv4AMTeYfzwVhqNKwlOPfS4a1kH98qfIPIo4/SMpQWqxbJbHagOlREu2nqjZoOc6fn2rrDbC7s7RUC6UJofmWPlnr2EsGNjoF8+PFv16BQMqRoC7CvfEGjVNosgaz8yjhNFmJnDsXf9fA/6xBygET+9KIFD/9tLcrskvLpD/9vC2+IwNdZWgwNeXqEXS1MNy9cWNd/Oe/dfrRaRpgecJ77x0Uf3xjsN2vEqded7dJ5f2HzxwpDx+eVte0ir+lveEg+za/kLAU+fDDKTGf0fhmkHKg601iHQSsdDJIhTzPntUQCe0J6EhJ/0CAH2mf+Blt1alxEMYy2KI6QTPnt/50QEBjZB0GJUeQfV+Yuu5nPxjm/qzy5I6AWQGRp3LRxUIb+s20utUBVtPnz09qNelQsjIBFRI5jEFEmGvBYubxE7Lv23DHeugR8JEWeoTTC7Sc1YceIS58TMC4yPF9qSCgCJj9oCkVcbmQoiLABCxqy+akXkzAnDRUUcVkAha1ZXNSLyZgThqqqGIyAYvasjmpFxMwJw1VVDGZgEVt2ZzUiwmYk4Yqqpjxv/UrKiL71At+WnTwTKqLHPtAFfpSbqxhQtcog4zYe9XBM6kucqQBsdqKywUB8cYHeUhV5lhZekiFZXFUz6RoIJjUwwYviWW3t6F1kcMrU5Lj3BCQPZMKxwSrqAapWo8B2TOpcJx0BpEvzx5SvZpT2y44iRk6XJIl8ZCKsdY//lnr+KCnm2dSL6BBlsvojv/+t8ORDUN1kcNbv7SOVRes5TIMLH6D3vqwlU/qIRXk18EzqS5yhMU9Tj4tCQjgk4a4HlKhdfwm74PwTKqLHEnbodf92hGQPZO6TVZkD6leUmpHQPZM6jbP0HhI9bJRh2P2TOq2QpE9pHp5pp0GVN/8eoWMe4xxVNSgi2dSXeSIil/U/NoRMGoFOH++EdCOgGl6borjIdX//DhaVFHCr82xHhg26CJHWHnj5tOOgOyZ1G3KofGQGpe5Wd3HnkldZIvsIdXLHe00IHsmdZunyB5StSYgxkmD9JCK5+vgmVQXObxkyeJYOw2ISrJnUrep2UNqFpQPWSZ7JhWOdyv2kBqSMFllY8+kxTZI1dYe0E/oYfdMGmRn6Mco6Jw9pAahkrM0LEbDRMxvptWtGll5JtVFjm71jpKuDFJzowGjVC6rvCCADp5JdZEjCc5MwCTo8b2JEVAE1HIZJnHtuIDcIMAEzE1TFVNQJmAx2zU3tWIC5qapiikoE7CY7ZqbWjEBc9NUxRSUCVjMds1NrZiAuWmqYgrKBCxmu+amVlp7x1Io6uIRlOVQLZJerPVeMPY82TPpXmPrgseeRPGP1FactgTUxSMoyxGfZPvdqQhofrz41yvIWC6X98vf12swfbpxY13s7Li/gxvl4bu7Qvz087Zzy9zcaJRbO/KyHB2QpJZQr286ZWk3BoTGCfIN2G+PoCxHalzbtyCtumCMcdgz6V576YLHnkTpHakuWKtlGHR57Jl0r5F1wWNPovSPtCEg3na/yfsweybVBY/0KddeokHuctaQZNvRB/ztRSU708UjKMuRrB3D3O3h2ppBvNOCgLp4BGU5wlAoWZ42AiYrKr27dfEIynKk16ZhStJmDKiLR1CWIwxt0sujDQHTqxKXlCcEtCGgLh5BWY7s6WtZ7oRX0vzDEFKs4pGNhpX9k/d5gi4eQVmOfRoppUtqEmJLEFCToItHUJajv4QAAbVYhtHFIyjL0WcCWrb9Ox5p24PtgnXxCMpyZE9Ay3J/v0UKuapNF4xq6+IRlOXIloTeTTfYA85LKRdKJVOMjIxk++QepY+PG0IHj6AsR4+GSnh5Z2dH7JLhJk1GbshfHzy9ZEt5bWxsTExMjCcsOp3bYQUSZBMYpfSzZybE2bMTUW7pyMtydECSSsLGxobY3NwCARdLDWk7azE0Ckyl8DQKAXnKZUPc/JrMs+rRxqZpegRlOdJozc4yLMttUymNVXnvUW1B2vZt0zTFoUNTnbkHmAKTJGghv5lWN5GK7plUFzy64R82/cWLF/S5BXXBUp6WKyu1asO0VwzDEJXKobBl9DUfgGfPpHuQ64LHnkTRjtbWfhfQguaInHV+Pe/+w2dO/zs9XRE0IYlWGudmBCIioMzxXz92WLrLMLa7Hae2SCKWx9kZgdAI7O421wBtcQc3uQSU7gmmxxwYgSwRUIvQNA15gOc0NaDtnCh2ZikAlz3cCGD9zw22VwPay0hU7HQz8H9GIH0EGo1mFyyNPQKaDXMZj4IG5HFg+qBziXsIYPkFwWyIZcROFzw7Ow2LmGWQj7thwMIhCwQU+cgQ9U6Tc80xID2NyPcNHrq97fpVyUIALnO4Edje3nIAsIXLNZy4kxDnyFhGxAQEChyyQEBpQMsyrqvyWwQ8cXR6mRKdblhlVJk4ZgSSIrC1teXsftA2x+rc7LQzAUGZLQLihPaEbyDe3Kwj4sAIpIaA6lltIa96C20joEGqkRi6Bg3IWtALEx8nQUDxCdrv9WPT171ltREQMxMy0f8EGVgLemHi4yQIrK+vO7cTtz7zl0OkbA9kHVOxDPsH+mSuOj5eFgcOHGjPwGeMQAQEMPZbX9+gr3/F6mvHDs/6b23TgLgILUh2Wos4hhtVXpgGEhziIIBvzZUrXv/YT5XXQUBcoH76K4qcGfHLl676VDdwzAiERQDDuKb181f+sZ8qI5CAuGg25EekNmlCskPjQdehtLqJY0agFwL45mNraxtd7xoZnjo9atA9XQlIXfEq2UxfxU1Qo4N23REkPKfpiYDb9bpLedT1Ls6+QlzqEroSEPlfOz69RIPATzAOhB0/k7ALipzcQgAcAVecuQNxp1vXq24gDbl/aM6Kb9OseB4fLk1NTbLZ/v6QDe1VkO75cyiqBm1qiDuvHT/8Zi8w9tWAuBmzYsOS71OBqygYD+CZcS9Yh+96G/loycUYle+HQaGnBlSF4Os5Wh+EJqyyJlSocAwEOsg3Ik/vN+7zohaagLjJT8KDBw8K0+ypRL3P4+OCIYAx38uXL91uF5ovAvkARSQC4gYvCfEt8eTkJJMQwAxhUBMOrPURkSKTD5BFJiBuapLwS0xM8B1xuXyAt+wAzBAFrPPV63Wn+8WEA2O+sN2uF6ZYBFQF3H/wdImmxBdxPjY2SiQsszZU4BQ0xngPxgXb281PeGmpxbSMK5isxqlyIgLigfcf1i5IYV8j1woVdMnQhvC0xaF4CLRpPdrhIOuWqyeOzywlqWliAuLh6JIbprhG86FzOAcRJyYmyN+gdr8GC/E4REQA9nzY1/XYiC7T9tpHcbpc/6NTIaAq1NGGtn0ZSzVIAwFHR0dZIyqAchb7iUdkWcXWWtNYJZXapEpAJdG9B0+v0O8//EURERrRJeMYa0UFkoYxxnf4LHdnZ9sxJMA5ApHEMVQuWcZS3LFet+pmQkD1ML9GVOkgIxazS6USddeITXWJ4z4hAHLhD9ZO2OHCX4BjgmVpyxuGJa6nTTxVzUwJqB6y8rg2T2tGNFmR72DpRqV7Y2hJLGpjWQfHiNUfSKqCe71dbJVP5RmGWBHIX1eszSHgVw+UBsM6ncqvSNa00/PfjvNlyvsNNcJy80vJoDyppbW3ZGrFdi+IJiwVmrAsEEBYQzxFa0jVbqTsXgpfSQUBuOWDZzSbnFNJYxnuMrLSdN3k7TsBuwmy8lutSo6TqkTICkhpCatCv6Z9HPlp4FulyAm4jiUfdY6YlGVHmvd6EY+p4daoB13rqFvzp9cofY2Wx5zr9NNsDwxhrDXop7EIq1Ua+aymMYPteHaMhP8DKleEJHlBQFwAAAAASUVORK5CYII=" + }, + "language": "zh-Hans", + "position": 1 + }, + "9553b1e0-0c26-445b-9e18-063ad7eca0b4": { + "chunk_structure": "hierarchical_model", + "description": "This template uses an advanced chunking strategy that organizes document text into a hierarchical structure of larger \"parent\" chunks and smaller \"child\" chunks to balance retrieval precision and contextual richness.", + "export_data": "dependencies:\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/notion_datasource:0.1.12@2855c4a7cffd3311118ebe70f095e546f99935e47f12c841123146f728534f55\n version: null\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/dify_extractor:0.0.5@ba7e2fd9165eda73bfcc68e31a108855197e88706e5556c058e0777ab08409b3\n version: null\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/jina:0.0.8@d3a6766fbb80890d73fea7ea04803f3e1702c6e6bd621aafb492b86222a193dd\n version: null\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/parentchild_chunker:0.0.7@ee9c253e7942436b4de0318200af97d98d094262f3c1a56edbe29dcb01fbc158\n version: null\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/google_drive:0.1.6@4bc0cf8f8979ebd7321b91506b4bc8f090b05b769b5d214f2da4ce4c04ce30bd\n version: null\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/jina_datasource:0.0.5@75942f5bbde870ad28e0345ff5ebf54ebd3aec63f0e66344ef76b88cf06b85c3\n version: null\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/firecrawl_datasource:0.2.4@37b490ebc52ac30d1c6cbfa538edcddddcfed7d5f5de58982edbd4e2094eb6e2\n version: null\nkind: rag_pipeline\nrag_pipeline:\n description: ''\n icon: 6509176c-def5-421c-b966-5122ad6bf658\n icon_background: '#FFEAD5'\n icon_type: image\n icon_url: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAoKADAAQAAAABAAAAoAAAAACn7BmJAAAYkklEQVR4Ae2dz28cx5XHq2f4m5JIyo4R2+t46B+H1S5gGUiwa1/EAFmvkUtsIHGOq6y9Z1vJHyDpD0iknG2vneMmBmxfFo5twPTFzmIDRAYS7cFKSMU/FCS2RVKiSIpk975PNWtYU9M9nB/dM8PueoLY3TXVVV2vv/N+1auaQA0JLV27XpNHqe3K/yAIZ1WkZitK3c/jhUEwG8g150I1/df+E8hn+5/bnxT3PFArMuaVhgFyTfkeBSpa5jRU6irlUVhZrsafL8/fPac/4/NBUtDvzpeWrs/ujquFqgpPhZWgJsA6Kc9Q6/dz+P6EA5G6FFXUsoqij6Kocqm6pRbn5+fqAO4Hj/oCQJFuCzKYU5GKOPK/iSqViqoEgaqOVFUgR/5TBgVy5Bqq7pXpi70/pr5dVvTzKBJuyn+buA6tsnB3V+oIzqJQ1w1DOYaR2pUj54kkoBTJuahGKr+Yv2vuUmKdDAtzAyCSLpwMTwdR8D153gXzzIBlpFrVQKvKcXR0tA44U8cf+8OBXQEoYNzZ3la7O7tqe2fH7XhZoHr+obvvfNX9IKvrzAEI8NSEej4KoheMXQboxsfH1OjYmAafkWZZDcK3kx0HAOHtrS21vb1jS8ll0Umvit14Prue4pYyBeCVz794qhJULkjTNZofHRlRE1OT+si1p8PFga2t2zEY9yVj5hIxEwDiwYpF8oqwdwEWe+DBheIQUnH95npdIkaBeqMSBWey8KR7BuDVv1x/Xkzdc6hbVOvk5KSamBgvDvf9SOocQCJubGzEQJRwThiFZ3q1D7sGoLb1JtVZ8bxe4AnHxkbV9PR03VutP7U/KRQH8J4BIWCExNa/+ODX7zjT7SC7AqBWuVH0ugQ3T3qp1y3rD/d9m5tbGog6FEToJgie7kYldwzAPXvvPWFfjTjdsWNH6/G6w81S//SdcgBpuLZ2w9iGeMrf7hSEHQHQBh8xvKNHj3jwdfrWClYfEN64cVMRUxTqGIRtA9AFH5LPx/MKhqYuh4MaRhJ2A8K2AOjB1+WbKdFt3YIwnmw9gFHS+OtSpYba9ZLvAGaV9GO0IdgAI2AFzOhIyQH8OBCAS3+5fkGJt4vDgc3n1e4BHC3xx2Cj7hcIZiQX4OxB7Gipgq9c++K05Ki8QsMzM8e8w3EQN/3nmgM4JqurazoDRyThmQfvueNiGmtSAajtviD6HTMcU1NTfnYjjYO+PJEDxAlv3boluXRqRTKiHk0Lz6Sr4CC6APjIYvFTa4k89oUtOABmmB0DQ3t5Aom1EwGI6hXP+insPuZ2PXkOdMMBa2p24crn159KaiMRgGL3aeMR8Jms5KSbfZnnQCsO4DsYAVYRjZrkFTcBUGw/wFcDeKhfT54DvXAAVUx6nlAtnAh14ordXhMARV+fpsL0kWm7nj/3HOiaAyQlQyIRn3elYAMAsf2kXg3E7qGW+zx5DvTEgTqexCEJx8PTdmMNADS239i4Tyi1meTPe+eAJQVZpFanOgCXPr1+Ukq97VdnjT/JkgNIQZwSoQXxMxZM23UAhpVYNI6OaoPRfO6PngOZccA4tbLUc8E0WgegJBOeotCrX8Maf8yaAyzLhQzWONcA1J6JTB5T4J0PuOApDw6wIUFdDbN+XEgDcHd8d4ELDz644CkvDgA+QKhpSi1w1ACUD7T0q8i+LJ48B/LkAHv/QOFubAdqAMraukcoHB2RyWNPngM5cmAvYRU7sEY32uUV51hfVKsxHvnA0z4H1rYj9dZnW+ry6q7683qoLq/sqFUpo9zQfVMV9XfTVfWPs1V1YmZEPXbXqKLMUyMH2IxKU6C00ItjLnsOiEFn4y3lvAJcL368qT7827b+fxAXPrkVKv5T39A/CBife2jSg9EwRI57TgglNf4EewuOlkg+mJ2doazUZID30scbDRKuV6Y8UxtXPz4x5aWiMHJlZVWvJRY1PI8ErMHcpI0fKS8T/fTyhsoaeIZ/v1zeUvwHhD85Ue4cS1sKVnajXR2PCSpiCZaUUJ1PvLuifnb5VqrUe/xro+o/Hp5Q//n4UYU0S6L7pqoaXNRNI/r45/++rtV1Wp2il4/secKyPWZtpFoJZAmd6GJRwWUkpNLZj9YTgXdsNNCge+7hScU59FMBEPe49OQ9Y+rcyem6itX24F+3E9vWgH9nRV381hH1r3Jf2chIQFkrMjsiWwbPwlr2Zy4bAaafidp1CbChJgGeIUDz7Ac31B/EA3bpJ6JWf5ygVl+6spkIbO7H1vx3aa+MKtkAUGIxsyMCuxoMqRdyUQJKAx9qFlAYiQcrfv35bXX20nqT2kTlPvfweANQW9WnTTt0Q11UMlQmu9As85D0v/vrqS9lAiCASpJ85x+ZagJTGlAB368WjtVVrkaR/Dmo/q8/EzCLyrcJEBIzTLMt7bpFOxfXI7ifQVXMHF3RRuiMB1X6wv/ebChFMr126lgD+Kh39qNkFY2954Kv3frPiYR9+zuzDRKWhwGUtFEGMsJOFq3P1SVgGQbOGH+wuNqkBl87NaMIGhsCCNRLAkSSvddp/WNjstOEo45Rzc9+sKbBaZ6jqMe6wytsKBUAUY8uqFC7Nvio85LMgLi2Gir35cePSN1GlmVVH7D9YWVXmwZJDk1RwViREEycl1VwLxjguXYfNpft6Rr7LQl8qNwk8NFmr/VtcL2oZ2CKrYqtSY+aJOrHADR62WZGkc6Nt2nGhETD24UAZ6sQC3ab7RVnWR+v+78krmhAzPGlj5kx2Q8BmWcu4rEU0WcA4waPecF4nnyGvdcqvueCL8v65x6ZlhBM/EUwACuDFDRjbTRoTGnBjh/KjIRNSD/Ub1b2W6/2IRKWZymjFCyFBHz5SuNsxzO1sXqIxbx0A1ATYrHtPaSkCcnkVd/uj2f5wErrMs9WxGNsAzIXLP+KSIDn9+Jd2kTWSxJlEWIxKp2jS520T17h2nYotmfxZETd3xD/o8L+bTCqqNkwrvp1QcE1KpRwjGv4M2OSFA/Mu755xrdk1qSIVAegYK/wNuDl1ebkAfulAiZ3VoPPTUjGrst53vXt/lgCUHQqPABd9Wu/UFRiUoiFQDSJqS7lXf8xySO0U/pZf1J0KjwAP11PliKd2GOAoB/1fyCeOcmqhlj8VHQqPABdZwAVmueUWi/tux42K++KToUHoPsCh8nec+1JO+DNc7uAdMdShOvSAdBeq4t0HNQUXJo9WQRQdTKGwgMQqWJLEhNbyyrLGSnWSVb0QfU7eXlFqFt4ALp5d6syK/fix8mJpq5KNC94UCEZW1qbZynasfAAZIrrk1v7Ad0zkg1thzrMC3VXtVGOik4LyeRdn/7vk60+ik6FB+B9041TWUng60eIxZ1lAdxJsyw24OxEWbu8SOeFB+CJmXQpgspNCsm0sg/zrO8Ci02Oik6FH+GT946rM79tXIXGSx02ey8JaOywVXQqPADxgt0pLnYjYFcCO+426JAMz2Iv18R29U5IQb5+j39tpMHxwA50wZdmj/XLPrSn4GD7cw9NFIT7rYdReAmoX6ZsscFefyYeyJFr1mMMQ1Y0ywWQwDaVQf0y3lIAEGkXg20/w4VFSp/qMMt+mQFA3iEWu32A5y6YYrlAGdRvaQDIQFl+6UrBtJSrTkImvapowOdKP7Naz3whinxsDJIVeKRGCqYNEa+431nRfCHc1XoAuizSj3dRChVsQIdkeevz7aYlmIMIybALwjlnkyKew5W+5tmLeiyNBDQv8GXZ4dT2gClflcU/a7f3nQBUolkFZ+4zR+w3N6Wr0/p44d9/f9U0qY88E+2WjUolAXm5qLfzshj8zG/3d8jCK37i3VXFIvEn7x1LnSLr1d6jf9SuK/kop98yqV7GDAV/uvaVTrs9fnwuLinJXwDo2l8MHUlkwjWGFajGpCm4TkI4tGk2QTftukdMhLJsVPnVV/HSg9JJQF46KjNtuWYS+FyVSxudpGgh9fB23bZpxybqHOQs2fWLcF46AAK+tFkP94UCBpJNbeL+drKoARvAS/vZBwM06tjARD2Tw1iW3VJLpYLTwEeQ+q3PtkUyJq+gA4DMJzOllzRrAZgADD/PgIPBUtCktC8DZOZ5cYaw+WKHZM18VD9e+OaRQoPQqOBDA0CkBL/X9uEXOzqM8omsmTWSAwCQ98eLfezOUW3QU2YTdfE8CX/YZDsWqMC0bTvse7o9N1LPDTQDatspMu3bIOx1/KbNYTkeGgAitV6WReL2HnrtMBGJxIs2nuX3319rkkrU4SXbRH8AMclBset1cm6AZ//eiHt/GggZww0JE/U6fre/QV8PPQD5xh/kNbbDRHY+oC0XUEjLt7+T/tt4ABFH5WX5rY/fd7lAHJX8mKjtVsCzx5AGQrtOp+eMH8962DY5GmoAptlqnTI/rT7gY1d8V02n1TdgZJ8ZVPgnstsCZYZoB8eBdjEFyMImEbbd9k07HPMAIVrgVwszdW1g9zeocwPAofOCecHsFm+/YMMko8pwCPhtXqNekXDscEoq/UHORBzTa54NMX0kHennPlHXSu17xPe+9mW9Kv3/3/eO1697OQHEjJM2Xep2/OYLjeND+8NEQ+WEGEa54AM0F741rT3RdpiHFGHz8CSvFskHgHslG4C09dn37+i1Sf2lSwoRZTX+YZKERgIOzVww3/gk5hMieftfZjoCDc4F93CvSyzLZHH6sFE/xm++4MM0/qEBIA6HK/kIkTA/240txT3xBuCNu83TR56hlm6BXdbxDwUAAYWbHIr0yiI1iTCGKwlZbO6CvVvgZHFfmcc/FAAk7mYTNo8brLU/7/Q8jgc2rg8mtjgsVObxDxyA2D5ujA7J143aTQMUbeHE2BQHdgdvC5Z9/AMHoLsRN9IPJyJrwvO1Qc2Ld/vOus922nOfoWzjHzgAP/yi8Udknry39xBJ2ot3bUHmlQdNZR//wAHo7oPMrgV5kRv/cxMT8uq3VbtlH//AAejuBJ/njlDMntjElNqgqezjHzgAscVsynPS3Ezdmf7cvk15P4/uM5Rt/AMHYD9ftu9r+DgwcADaninsyTNA3CxtGpNWB/F6yj7+gQPwG84Opmk/LJMFONzfBB6GLXDLPv6BA/CEkx704d/yC42QrmVTng6P3U+r87KPf+AAfOzOxvw0fi08L3KDvqwfaZdQ379c3tRrN554d6XpNsrMWmNX1TdVtgoOy/itR870dOAAdDOHeXmtVpR1O3qm+1z7sp2gN/ewVPKf5Dfc2OqXdpLih5TxGSD8+ze/0ke3v6RnH/bxJz1zlmUDByBG+A+dqbesc/YAtTvhz3Rfq5AH97A/DDuXumt323kBgJF72Xa3Vf7dsI6/nTFmUWfgAGQQz8refTYhObLM2UvKtWuVbUP/T7yz0pQiZj9ju+ekfj3xzmqT9LXvH7bx28+W93mjAZZ3byntEyBmnhZJY4gXh4Tqda+UeP+WRruSvtygtOk3jzUpAJps77Q1GcM0fsOHfh2HZk0IKi+WFI3TY90uK6Q9JJ+b6Eq2Cen6bvwNhhugcLSJe7JYkwLQ0lanDcP47THnfW7WhAwNABlwDABWxDWCkBeHymw3TQsnBjsyCUhJGw3RdwyAlaZ7kJb0nQRY7ksj2sPutKU6dRlL/AVotn4GOf60ceRVPpQAZLCxCrzRBEI+4+Wxjx4ZM2b5IuW8OALYH0gMMW0zIKRYrAIbExK4H8LhcKWlvW1HXKvzv4DQtWeR6uxRmESDGn/Ss+RZNrQAZNBpkqBbhgC+NMln+nN/pwPJx6KmLIgwjisJf/PduVQ7tN/jz2KMnbZhANisBzptKYf6Rk0Bgl6JNlB5tJlGbogGwLbyktPaSSunLdq0qdWalH6P336ufp8PlQ2YNHikAQAhrtYumdga4Y1WwKM9bDUCxzbZu1LZ5b2cu9uw8Yz/893ZlrFI+st7/L2MqZd7jQQcegCaQQIUptJIYb8ssw5/FpuPMoiX+Q1JNj0xW5Xt2UY62pfFzF6YfpBUvxFg5EEA3Twz7V/45rQ4Vu1J+bzGn8c422nTAHAo4oDtPDAgwwtu1xNup03q9HtNhu2QsCblmVp7T5rX+NvrPb9a6YZRfn0OVctlX5Mx6JdRUYHSqR1R2JgaP+gH61f/ZV+T0S8+2/1E0R7WBHsVFe0BUE7KSLZNxvhbJSj0yh/XIXL77rX9w3J/HYCCvdKr4MPy0or6nKUHIMa9TYQ98iJX4rl959XvMLdbegCWfU3GoMFZegCWfU3GIAAY2k6IKKBlHmI3zE/1DGKQ7fZZ9jUZ7fIpy3reCbG4WfY1GRYrBnJakfBfqeOAOALDuCZlIGgYQKeVIIj0LydHUTlVMDwv85qMAWBOhbtxwnGgguXSOyG8AALEbuoXa1LsedtuX1Sna1K67ecw3Wd8EJ65IvMfy5yEJXVCGDuUlLNHGthByyrju5v/EvMjy5rfK7Ep61xDu+3Dcm60bajCq5XK3lxw3TU+LKPI+DmxBeOs6cbEUbOsspN8RHL/kpZ1Aj76KHsA2vaCgyvXvjhdUZVXxsfH1PR0NinoGWOjr82VZU1GX5nqdHbzxk11e3tbBZXg6WDp2vWFSEXvVatVNTNzzKlazssyrMkY5Ju9sXZDbe/sSCJW8G2ckGUepi4WuSg5lWlNxiBetTXpsaxn4v907SudizU3O4tYHMQzDW2fRV2TMUiGm3T8B+4+HhgALskD1WZnZ1Sl4iMzSS8HrzaPNSlJfRW5bEdigGura0r076UHvn78Ub0mROIylwSKtW0xDMfHs/+RmCIwFM81jzUpReBNJ2MwQWgVqqvctyfuIn0BOj15DuTJgR1xPqAoiC5x1AAUL3iRi3DHAxA+eMqPA7t7GBNTbx+A1a3qIl0iAcu6OCk/lvuWbQ4QftF0Sy1y1BJwfn5uRbyRRUIxO6GXgppB/k/mHKiDTxwQMEcHdZc3VNH7FNy+3biTPGWePAey4MDtzXh7FdGyGmu0WQegTMctUnB7ywMQPnjKngNGAlZGKq+a1usAnL97btGoYVPRVPJHz4FeObC1tWUyrpbn75rTDght1gGoOwiiNzlu3mpMIdKf+T+eAz1wwGhWmf89bzfTCMANEY2SnoUE9FLQZpM/74UDFp6WRdO+arfVAEA8E/GEf04FLwVtNvnzXjiwfnNd3y7x5l+47YjZ10hLS9dno4nod1Jam5qaVBMT7e1f19iKv/IciDmA7be+fouLZUk+mHf50iAB+VDHBKPgDOcbG5s+MA0jPHXFAdKuwBDk2n6mwSYA8sH8PXNviGjUgemb67H4NDf4o+dAuxzAjGOtURSoN1zbz7SRCMD4w+BH2iGRDJnNzf1fMDI3+qPnQCsObErQeYtJDfYA3NOoSfVTASiIXQ7C2GVGjFpZrEnt+DLPgToHYtUbh/ICAR9Yqn/onKQCkHqiii/iFTNHTB6/B6HDPX/ZxAEwAlbADNhJU73mxiYv2HxgjtorHo/eE1F6koVLx44e9Wn7hjn+2MABQLeGoCKvVJKcH7jn+KMNFRIuWkpA6muvOAieltNlGl67Iegu6X7SCfzzRXscaACfYCWIMXMgfw6UgKYFWb5ZY/mmXNe8JDRc8Uc40AQ+WW7Zyu6zudY2ALnJBeGRo0dU1S9isvlZunNsPhaaa7WL5OsAfDCrIwBygw1CVtAdPXbUgxDGlJCMw7G3r1DH4INlHQOQmzQIo+h1ufuk6Ho1OTnhp+xgTImION/GxoZWvzgc2Hztql2bTV0B0DTwx8+/vCgdP8/1+NiYmpC5Y6+SDXeKecTeI7mAvV0guf55ZatyzqTYdzrqngBIZyINT8sSuwvyLZhFJSMN/driTl/D4ajfIPVkhkOiIecfvOeOi708fc8ApHNUsqjjC/JteIprgDh9ZFqNjhya30LksT2lcIB8PuZ1rRzRRXE2ftSNynW7yASAplEtDVV0Vq5rlAHAMdn2zUtEuHH4KAF4y3pqTZJVshpNpgA0D/XHa1+ek2/Iv8l1jTIkogbjxLiXijBkSAn7jrXh25JEsCWL07jWhLrF1tusXOzW1ksbci4ANJ25EtGUA8bqSFWNyLEi03sj8t9TfzkAuPjPfkDE8NixQG9MYEAXP86iOJlvqg31atbAM6PNFYCmk6W/Xj8Z7oSnRSqeUhK6MeX2ESmJB01Yp1KNj5zH1/sA1ddSbpOpZ5cV/dwAyB2nSRiJyMPbA5POydsD3I4AjfIWe4IvCjTfZ5mu2HiLbvtZXze+yaxbT2iP5AY1rhbCIDwpvxHxiPw6BA5MIigTbvdF2XJA5mzVpTCMrup14VtqMS9Jl/bYfQdg2oNoTxqbUcI5sli0FkbhrGRK3B/XD2rmPvnyyi6a8t8mrikvE4ldJmNecYcsL3RZl+nPI/25/ALM1UpQWdmV+qJL+JzVaXE9XXlwf/4f1AC7LPmFaqYAAAAASUVORK5CYII=\n name: Parent-child-HQ\nversion: 0.1.0\nworkflow:\n conversation_variables: []\n environment_variables: []\n features: {}\n graph:\n edges:\n - data:\n isInLoop: false\n sourceType: tool\n targetType: variable-aggregator\n id: 1750836391776-source-1753346901505-target\n selected: false\n source: '1750836391776'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: document-extractor\n targetType: variable-aggregator\n id: 1753349228522-source-1753346901505-target\n selected: false\n source: '1753349228522'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1754023419266-source-1753346901505-target\n selected: false\n source: '1754023419266'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1756442998557-source-1756442986174-target\n selected: false\n source: '1756442998557'\n sourceHandle: source\n target: '1756442986174'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInIteration: false\n isInLoop: false\n sourceType: variable-aggregator\n targetType: if-else\n id: 1756442986174-source-1756443014860-target\n selected: false\n source: '1756442986174'\n sourceHandle: source\n target: '1756443014860'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1750836380067-source-1756442986174-target\n selected: false\n source: '1750836380067'\n sourceHandle: source\n target: '1756442986174'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: if-else\n targetType: tool\n id: 1756443014860-true-1750836391776-target\n selected: false\n source: '1756443014860'\n sourceHandle: 'true'\n target: '1750836391776'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: if-else\n targetType: document-extractor\n id: 1756443014860-false-1753349228522-target\n selected: false\n source: '1756443014860'\n sourceHandle: 'false'\n target: '1753349228522'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1756896212061-source-1753346901505-target\n source: '1756896212061'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1756907397615-source-1753346901505-target\n source: '1756907397615'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInIteration: false\n isInLoop: false\n sourceType: variable-aggregator\n targetType: tool\n id: 1753346901505-source-1756972161593-target\n source: '1753346901505'\n sourceHandle: source\n target: '1756972161593'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: tool\n targetType: knowledge-index\n id: 1756972161593-source-1750836372241-target\n source: '1756972161593'\n sourceHandle: source\n target: '1750836372241'\n targetHandle: target\n type: custom\n zIndex: 0\n nodes:\n - data:\n chunk_structure: hierarchical_model\n embedding_model: jina-embeddings-v2-base-en\n embedding_model_provider: langgenius/jina/jina\n index_chunk_variable_selector:\n - '1756972161593'\n - result\n indexing_technique: high_quality\n keyword_number: 10\n retrieval_model:\n reranking_enable: true\n reranking_mode: reranking_model\n reranking_model:\n reranking_model_name: jina-reranker-v1-base-en\n reranking_provider_name: langgenius/jina/jina\n score_threshold: 0\n score_threshold_enabled: false\n search_method: hybrid_search\n top_k: 3\n weights: null\n selected: false\n title: Knowledge Base\n type: knowledge-index\n height: 114\n id: '1750836372241'\n position:\n x: 479.7628208876065\n y: 326\n positionAbsolute:\n x: 479.7628208876065\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: File\n datasource_name: upload-file\n datasource_parameters: {}\n fileExtensions:\n - txt\n - markdown\n - mdx\n - pdf\n - html\n - xlsx\n - xls\n - vtt\n - properties\n - doc\n - docx\n - csv\n - eml\n - msg\n - pptx\n - xml\n - epub\n - ppt\n - md\n plugin_id: langgenius/file\n provider_name: file\n provider_type: local_file\n selected: false\n title: File\n type: datasource\n height: 52\n id: '1750836380067'\n position:\n x: -1371.6520723158733\n y: 224.87938381325645\n positionAbsolute:\n x: -1371.6520723158733\n y: 224.87938381325645\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n is_team_authorization: true\n output_schema:\n properties:\n documents:\n description: the documents extracted from the file\n items:\n type: object\n type: array\n images:\n description: The images extracted from the file\n items:\n type: object\n type: array\n type: object\n paramSchemas:\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg,\n jpeg)\n ja_JP: the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg,\n jpeg)\n pt_BR: o arquivo a ser analisado (suporta pdf, ppt, pptx, doc, docx, png,\n jpg, jpeg)\n zh_Hans: 用于解析的文件(支持 pdf, ppt, pptx, doc, docx, png, jpg, jpeg)\n label:\n en_US: file\n ja_JP: file\n pt_BR: file\n zh_Hans: file\n llm_description: the file to be parsed (support pdf, ppt, pptx, doc, docx,\n png, jpg, jpeg)\n max: null\n min: null\n name: file\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: file\n params:\n file: ''\n provider_id: langgenius/dify_extractor/dify_extractor\n provider_name: langgenius/dify_extractor/dify_extractor\n provider_type: builtin\n selected: false\n title: Dify Extractor\n tool_configurations: {}\n tool_description: Dify Extractor\n tool_label: Dify Extractor\n tool_name: dify_extractor\n tool_node_version: '2'\n tool_parameters:\n file:\n type: variable\n value:\n - '1756442986174'\n - output\n type: tool\n height: 52\n id: '1750836391776'\n position:\n x: -417.5334221022782\n y: 268.1692071834485\n positionAbsolute:\n x: -417.5334221022782\n y: 268.1692071834485\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n author: TenTen\n desc: ''\n height: 252\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Knowledge\n Pipeline\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\n starts with Data Source as the starting node and ends with the knowledge\n base node. The general steps are: import documents from the data source\n → use extractor to extract document content → split and clean content into\n structured chunks → store in the knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n user input variables required by the Knowledge Pipeline node must be predefined\n and managed via the Input Field section located in the top-right corner\n of the orchestration canvas. It determines what input fields the end users\n will see and need to fill in when importing files to the knowledge base\n through this pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Unique\n Inputs: Input fields defined here are only available to the selected data\n source and its downstream nodes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Global\n Inputs: These input fields are shared across all subsequent nodes after\n the data source and are typically set during the Process Documents step.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For\n more information, see https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 1124\n height: 252\n id: '1751252161631'\n position:\n x: -1371.6520723158733\n y: -123.758428116601\n positionAbsolute:\n x: -1371.6520723158733\n y: -123.758428116601\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 1124\n - data:\n author: TenTen\n desc: ''\n height: 388\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Currently\n we support 4 types of \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Data\n Sources\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\":\n File Upload, Online Drive, Online Doc, and Web Crawler. Different types\n of Data Sources have different input and output types. The output of File\n Upload and Online Drive are files, while the output of Online Doc and WebCrawler\n are pages. You can find more Data Sources on our Marketplace.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n Knowledge Pipeline can have multiple data sources. Each data source can\n be selected more than once with different settings. Each added data source\n is a tab on the add file interface. However, each time the user can only\n select one data source to import the file and trigger its subsequent processing.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 285\n height: 388\n id: '1751252440357'\n position:\n x: -1723.9942193415582\n y: 224.87938381325645\n positionAbsolute:\n x: -1723.9942193415582\n y: 224.87938381325645\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 285\n - data:\n author: TenTen\n desc: ''\n height: 430\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n document extractor in Retrieval-Augmented Generation (RAG) is a tool or\n component that automatically identifies, extracts, and structures text and\n data from various types of documents—such as PDFs, images, scanned files,\n handwritten notes, and more—into a format that can be effectively used by\n language models within RAG Pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Dify\n Extractor\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" is\n a built-in document parser developed by Dify. It supports a wide range of\n common file formats and offers specialized handling for certain formats,\n such as \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":16,\"mode\":\"normal\",\"style\":\"\",\"text\":\".docx\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\".\n In addition to text extraction, it can extract images embedded within documents,\n store them, and return their accessible URLs.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 430\n id: '1751253091602'\n position:\n x: -417.5334221022782\n y: 547.4103414077279\n positionAbsolute:\n x: -417.5334221022782\n y: 547.4103414077279\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n author: TenTen\n desc: ''\n height: 638\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Parent-Child\n Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\n addresses the dilemma of context and precision by leveraging a two-tier\n hierarchical approach that effectively balances the trade-off between accurate\n matching and comprehensive contextual information in RAG systems. \",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Here\n is the essential mechanism of this structured, two-level information access:\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"-\n Query Matching with Child Chunks: Small, focused pieces of information,\n often as concise as a single sentence within a paragraph, are used to match\n the user''s query. These child chunks enable precise and relevant initial\n retrieval.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"-\n Contextual Enrichment with Parent Chunks: Larger, encompassing sections—such\n as a paragraph, a section, or even an entire document—that include the matched\n child chunks are then retrieved. These parent chunks provide comprehensive\n context for the Language Model (LLM). length, and overlap—to fit different\n document formats or scenarios. Preprocessing options are also available\n to clean up the text by removing excess spaces, URLs, and emails.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 638\n id: '1751253953926'\n position:\n x: 184.46657789772178\n y: 407.42301051148354\n positionAbsolute:\n x: 184.46657789772178\n y: 407.42301051148354\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n author: TenTen\n desc: ''\n height: 410\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n knowledge base provides two indexing methods: \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Economical\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\",\n each with different retrieval strategies. High-Quality mode uses embeddings\n for vectorization and supports vector, full-text, and hybrid retrieval,\n offering more accurate results but higher resource usage. Economical mode\n uses keyword-based inverted indexing with no token consumption but lower\n accuracy; upgrading to High-Quality is possible, but downgrading requires\n creating a new knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"*\n Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A\n Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" only\n support the \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" indexing\n method.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 410\n id: '1751254117904'\n position:\n x: 479.7628208876065\n y: 472.46585541244207\n positionAbsolute:\n x: 479.7628208876065\n y: 472.46585541244207\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n output_type: string\n selected: false\n title: Variable Aggregator\n type: variable-aggregator\n variables:\n - - '1750836391776'\n - text\n - - '1753349228522'\n - text\n - - '1754023419266'\n - content\n - - '1756896212061'\n - content\n - - '1756907397615'\n - content\n height: 213\n id: '1753346901505'\n position:\n x: -117.24452412456148\n y: 326\n positionAbsolute:\n x: -117.24452412456148\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n is_array_file: false\n selected: false\n title: Doc Extractor\n type: document-extractor\n variable_selector:\n - '1756442986174'\n - output\n height: 92\n id: '1753349228522'\n position:\n x: -417.5334221022782\n y: 417.25474169825833\n positionAbsolute:\n x: -417.5334221022782\n y: 417.25474169825833\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: Notion\n datasource_name: notion_datasource\n datasource_parameters: {}\n plugin_id: langgenius/notion_datasource\n provider_name: notion_datasource\n provider_type: online_document\n selected: false\n title: Notion\n type: datasource\n height: 52\n id: '1754023419266'\n position:\n x: -1369.6904698303242\n y: 440.01452302398053\n positionAbsolute:\n x: -1369.6904698303242\n y: 440.01452302398053\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n output_type: file\n selected: false\n title: Variable Aggregator\n type: variable-aggregator\n variables:\n - - '1750836380067'\n - file\n - - '1756442998557'\n - file\n height: 135\n id: '1756442986174'\n position:\n x: -1054.415447856335\n y: 236.10252072775984\n positionAbsolute:\n x: -1054.415447856335\n y: 236.10252072775984\n selected: true\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: Google Drive\n datasource_name: google_drive\n datasource_parameters: {}\n plugin_id: langgenius/google_drive\n provider_name: google_drive\n provider_type: online_drive\n selected: false\n title: Google Drive\n type: datasource\n height: 52\n id: '1756442998557'\n position:\n x: -1371.6520723158733\n y: 326\n positionAbsolute:\n x: -1371.6520723158733\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n cases:\n - case_id: 'true'\n conditions:\n - comparison_operator: is\n id: 1581dd11-7898-41f4-962f-937283ba7e01\n value: .xlsx\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 92abb46d-d7e4-46e7-a5e1-8a29bb45d528\n value: .xls\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 1dde5ae7-754d-4e83-96b2-fe1f02995d8b\n value: .md\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 7e1a80e5-c32a-46a4-8f92-8912c64972aa\n value: .markdown\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 53abfe95-c7d0-4f63-ad37-17d425d25106\n value: .mdx\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 436877b8-8c0a-4cc6-9565-92754db08571\n value: .html\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 5e3e375e-750b-4204-8ac3-9a1174a5ab7c\n value: .htm\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 1a84a784-a797-4f96-98a0-33a9b48ceb2b\n value: .docx\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 62d11445-876a-493f-85d3-8fc020146bdd\n value: .csv\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 02c4bce8-7668-4ccd-b750-4281f314b231\n value: .txt\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n id: 'true'\n logical_operator: or\n selected: false\n title: IF/ELSE\n type: if-else\n height: 358\n id: '1756443014860'\n position:\n x: -733.5977815139424\n y: 236.10252072775984\n positionAbsolute:\n x: -733.5977815139424\n y: 236.10252072775984\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: Jina Reader\n datasource_name: jina_reader\n datasource_parameters:\n crawl_sub_pages:\n type: variable\n value:\n - rag\n - '1756896212061'\n - jina_subpages\n limit:\n type: variable\n value:\n - rag\n - '1756896212061'\n - jina_limit\n url:\n type: mixed\n value: '{{#rag.1756896212061.jina_url#}}'\n use_sitemap:\n type: variable\n value:\n - rag\n - '1756896212061'\n - jian_sitemap\n plugin_id: langgenius/jina_datasource\n provider_name: jinareader\n provider_type: website_crawl\n selected: false\n title: Jina Reader\n type: datasource\n height: 52\n id: '1756896212061'\n position:\n x: -1371.6520723158733\n y: 538.9988445953813\n positionAbsolute:\n x: -1371.6520723158733\n y: 538.9988445953813\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: Firecrawl\n datasource_name: crawl\n datasource_parameters:\n crawl_subpages:\n type: variable\n value:\n - rag\n - '1756907397615'\n - firecrawl_subpages\n exclude_paths:\n type: mixed\n value: '{{#rag.1756907397615.exclude_paths#}}'\n include_paths:\n type: mixed\n value: '{{#rag.1756907397615.include_paths#}}'\n limit:\n type: variable\n value:\n - rag\n - '1756907397615'\n - max_pages\n max_depth:\n type: variable\n value:\n - rag\n - '1756907397615'\n - max_depth\n only_main_content:\n type: variable\n value:\n - rag\n - '1756907397615'\n - main_content\n url:\n type: mixed\n value: '{{#rag.1756907397615.firecrawl_url1#}}'\n plugin_id: langgenius/firecrawl_datasource\n provider_name: firecrawl\n provider_type: website_crawl\n selected: false\n title: Firecrawl\n type: datasource\n height: 52\n id: '1756907397615'\n position:\n x: -1371.6520723158733\n y: 644.3296146102903\n positionAbsolute:\n x: -1371.6520723158733\n y: 644.3296146102903\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n is_team_authorization: true\n paramSchemas:\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: The text you want to chunk.\n ja_JP: The text you want to chunk.\n pt_BR: Conteúdo de Entrada\n zh_Hans: 输入文本\n label:\n en_US: Input Content\n ja_JP: Input Content\n pt_BR: Conteúdo de Entrada\n zh_Hans: 输入文本\n llm_description: The text you want to chunk.\n max: null\n min: null\n name: input_text\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: paragraph\n form: llm\n human_description:\n en_US: Split text into paragraphs based on separator and maximum chunk\n length, using split text as parent block or entire document as parent\n block and directly retrieve.\n ja_JP: Split text into paragraphs based on separator and maximum chunk\n length, using split text as parent block or entire document as parent\n block and directly retrieve.\n pt_BR: Dividir texto em parágrafos com base no separador e no comprimento\n máximo do bloco, usando o texto dividido como bloco pai ou documento\n completo como bloco pai e diretamente recuperá-lo.\n zh_Hans: 根据分隔符和最大块长度将文本拆分为段落,使用拆分文本作为检索的父块或整个文档用作父块并直接检索。\n label:\n en_US: Parent Mode\n ja_JP: Parent Mode\n pt_BR: Modo Pai\n zh_Hans: 父块模式\n llm_description: Split text into paragraphs based on separator and maximum\n chunk length, using split text as parent block or entire document as parent\n block and directly retrieve.\n max: null\n min: null\n name: parent_mode\n options:\n - icon: ''\n label:\n en_US: paragraph\n ja_JP: paragraph\n pt_BR: paragraph\n zh_Hans: paragraph\n value: paragraph\n - icon: ''\n label:\n en_US: full_doc\n ja_JP: full_doc\n pt_BR: full_doc\n zh_Hans: full_doc\n value: full_doc\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: select\n - auto_generate: null\n default: '\n\n\n '\n form: llm\n human_description:\n en_US: Separator used for chunking\n ja_JP: Separator used for chunking\n pt_BR: Separador usado para divisão\n zh_Hans: 用于分块的分隔符\n label:\n en_US: Parent Delimiter\n ja_JP: Parent Delimiter\n pt_BR: Separador de Pai\n zh_Hans: 父块分隔符\n llm_description: The separator used to split chunks\n max: null\n min: null\n name: separator\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: 1024\n form: llm\n human_description:\n en_US: Maximum length for chunking\n ja_JP: Maximum length for chunking\n pt_BR: Comprimento máximo para divisão\n zh_Hans: 用于分块的最大长度\n label:\n en_US: Maximum Parent Chunk Length\n ja_JP: Maximum Parent Chunk Length\n pt_BR: Comprimento Máximo do Bloco Pai\n zh_Hans: 最大父块长度\n llm_description: Maximum length allowed per chunk\n max: null\n min: null\n name: max_length\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: number\n - auto_generate: null\n default: '. '\n form: llm\n human_description:\n en_US: Separator used for subchunking\n ja_JP: Separator used for subchunking\n pt_BR: Separador usado para subdivisão\n zh_Hans: 用于子分块的分隔符\n label:\n en_US: Child Delimiter\n ja_JP: Child Delimiter\n pt_BR: Separador de Subdivisão\n zh_Hans: 子分块分隔符\n llm_description: The separator used to split subchunks\n max: null\n min: null\n name: subchunk_separator\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: 512\n form: llm\n human_description:\n en_US: Maximum length for subchunking\n ja_JP: Maximum length for subchunking\n pt_BR: Comprimento máximo para subdivisão\n zh_Hans: 用于子分块的最大长度\n label:\n en_US: Maximum Child Chunk Length\n ja_JP: Maximum Child Chunk Length\n pt_BR: Comprimento Máximo de Subdivisão\n zh_Hans: 子分块最大长度\n llm_description: Maximum length allowed per subchunk\n max: null\n min: null\n name: subchunk_max_length\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: number\n - auto_generate: null\n default: 0\n form: llm\n human_description:\n en_US: Whether to remove consecutive spaces, newlines and tabs\n ja_JP: Whether to remove consecutive spaces, newlines and tabs\n pt_BR: Se deve remover espaços extras no texto\n zh_Hans: 是否移除文本中的连续空格、换行符和制表符\n label:\n en_US: Replace consecutive spaces, newlines and tabs\n ja_JP: Replace consecutive spaces, newlines and tabs\n pt_BR: Substituir espaços consecutivos, novas linhas e guias\n zh_Hans: 替换连续空格、换行符和制表符\n llm_description: Whether to remove consecutive spaces, newlines and tabs\n max: null\n min: null\n name: remove_extra_spaces\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n - auto_generate: null\n default: 0\n form: llm\n human_description:\n en_US: Whether to remove URLs and emails in the text\n ja_JP: Whether to remove URLs and emails in the text\n pt_BR: Se deve remover URLs e e-mails no texto\n zh_Hans: 是否移除文本中的URL和电子邮件地址\n label:\n en_US: Delete all URLs and email addresses\n ja_JP: Delete all URLs and email addresses\n pt_BR: Remover todas as URLs e e-mails\n zh_Hans: 删除所有URL和电子邮件地址\n llm_description: Whether to remove URLs and emails in the text\n max: null\n min: null\n name: remove_urls_emails\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n params:\n input_text: ''\n max_length: ''\n parent_mode: ''\n remove_extra_spaces: ''\n remove_urls_emails: ''\n separator: ''\n subchunk_max_length: ''\n subchunk_separator: ''\n provider_id: langgenius/parentchild_chunker/parentchild_chunker\n provider_name: langgenius/parentchild_chunker/parentchild_chunker\n provider_type: builtin\n selected: false\n title: Parent-child Chunker\n tool_configurations: {}\n tool_description: Process documents into parent-child chunk structures\n tool_label: Parent-child Chunker\n tool_name: parentchild_chunker\n tool_node_version: '2'\n tool_parameters:\n input_text:\n type: mixed\n value: '{{#1753346901505.output#}}'\n max_length:\n type: variable\n value:\n - rag\n - shared\n - parent_length\n parent_mode:\n type: variable\n value:\n - rag\n - shared\n - parent_mode\n remove_extra_spaces:\n type: variable\n value:\n - rag\n - shared\n - clean_1\n remove_urls_emails:\n type: variable\n value:\n - rag\n - shared\n - clean_2\n separator:\n type: mixed\n value: '{{#rag.shared.parent_dilmiter#}}'\n subchunk_max_length:\n type: variable\n value:\n - rag\n - shared\n - child_length\n subchunk_separator:\n type: mixed\n value: '{{#rag.shared.child_delimiter#}}'\n type: tool\n height: 52\n id: '1756972161593'\n position:\n x: 184.46657789772178\n y: 326\n positionAbsolute:\n x: 184.46657789772178\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n viewport:\n x: 947.2141381290828\n y: 179.30600859363653\n zoom: 0.47414481289660987\n rag_pipeline_variables:\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1753688365254'\n default_value: null\n label: URL\n max_length: 256\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: text-input\n unit: null\n variable: jina_reader_url\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1753688365254'\n default_value: 10\n label: Limit\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: number\n unit: pages\n variable: jina_reader_imit\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1753688365254'\n default_value: true\n label: Crawl sub-pages\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: checkbox\n unit: null\n variable: Crawl_sub_pages_2\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1753688365254'\n default_value: true\n label: Use sitemap\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: Use_sitemap\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756896212061'\n default_value: null\n label: URL\n max_length: 256\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: text-input\n unit: null\n variable: jina_url\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756896212061'\n default_value: 10\n label: Limit\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: number\n unit: pages\n variable: jina_limit\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756896212061'\n default_value: true\n label: Use sitemap\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: Follow the sitemap to crawl the site. If not, Jina Reader will crawl\n iteratively based on page relevance, yielding fewer but higher-quality pages.\n type: checkbox\n unit: null\n variable: jian_sitemap\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756896212061'\n default_value: true\n label: Crawl subpages\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: jina_subpages\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: null\n label: URL\n max_length: 256\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: text-input\n unit: null\n variable: firecrawl_url1\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: true\n label: firecrawl_subpages\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: firecrawl_subpages\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: null\n label: Exclude paths\n max_length: 256\n options: []\n placeholder: blog/*,/about/*\n required: false\n tooltips: null\n type: text-input\n unit: null\n variable: exclude_paths\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: null\n label: include_paths\n max_length: 256\n options: []\n placeholder: articles/*\n required: false\n tooltips: null\n type: text-input\n unit: null\n variable: include_paths\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: 0\n label: Max depth\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: Maximum depth to crawl relative to the entered URL. Depth 0 just scrapes\n the page of the entered url, depth 1 scrapes the url and everything after enteredURL\n + one /, and so on.\n type: number\n unit: null\n variable: max_depth\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: 10\n label: Limit\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: number\n unit: null\n variable: max_pages\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: true\n label: Extract only main content (no headers, navs, footers, etc.)\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: main_content\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: paragraph\n label: Parent Mode\n max_length: 48\n options:\n - paragraph\n - full_doc\n placeholder: null\n required: true\n tooltips: 'Parent Mode provides two options: paragraph mode splits text into paragraphs\n as parent chunks for retrieval, while full_doc mode uses the entire document\n as a single parent chunk (text beyond 10,000 tokens will be truncated).'\n type: select\n unit: null\n variable: parent_mode\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: \\n\\n\n label: Parent Delimiter\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: A delimiter is the character used to separate text. \\n\\n is recommended\n for splitting the original document into large parent chunks. You can also use\n special delimiters defined by yourself.\n type: text-input\n unit: null\n variable: parent_dilmiter\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: 1024\n label: Maximum Parent Length\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: number\n unit: tokens\n variable: parent_length\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: \\n\n label: Child Delimiter\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: A delimiter is the character used to separate text. \\n is recommended\n for splitting parent chunks into small child chunks. You can also use special\n delimiters defined by yourself.\n type: text-input\n unit: null\n variable: child_delimiter\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: 256\n label: Maximum Child Length\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: number\n unit: tokens\n variable: child_length\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: true\n label: Replace consecutive spaces, newlines and tabs.\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: clean_1\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: null\n label: Delete all URLs and email addresses.\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: clean_2\n", + "graph": { + "edges": [ + { + "data": { + "isInLoop": false, + "sourceType": "tool", + "targetType": "variable-aggregator" + }, + "id": "1750836391776-source-1753346901505-target", + "selected": false, + "source": "1750836391776", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "document-extractor", + "targetType": "variable-aggregator" + }, + "id": "1753349228522-source-1753346901505-target", + "selected": false, + "source": "1753349228522", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1754023419266-source-1753346901505-target", + "selected": false, + "source": "1754023419266", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1756442998557-source-1756442986174-target", + "selected": false, + "source": "1756442998557", + "sourceHandle": "source", + "target": "1756442986174", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInIteration": false, + "isInLoop": false, + "sourceType": "variable-aggregator", + "targetType": "if-else" + }, + "id": "1756442986174-source-1756443014860-target", + "selected": false, + "source": "1756442986174", + "sourceHandle": "source", + "target": "1756443014860", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1750836380067-source-1756442986174-target", + "selected": false, + "source": "1750836380067", + "sourceHandle": "source", + "target": "1756442986174", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "if-else", + "targetType": "tool" + }, + "id": "1756443014860-true-1750836391776-target", + "selected": false, + "source": "1756443014860", + "sourceHandle": "true", + "target": "1750836391776", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "if-else", + "targetType": "document-extractor" + }, + "id": "1756443014860-false-1753349228522-target", + "selected": false, + "source": "1756443014860", + "sourceHandle": "false", + "target": "1753349228522", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1756896212061-source-1753346901505-target", + "source": "1756896212061", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1756907397615-source-1753346901505-target", + "source": "1756907397615", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInIteration": false, + "isInLoop": false, + "sourceType": "variable-aggregator", + "targetType": "tool" + }, + "id": "1753346901505-source-1756972161593-target", + "source": "1753346901505", + "sourceHandle": "source", + "target": "1756972161593", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "tool", + "targetType": "knowledge-index" + }, + "id": "1756972161593-source-1750836372241-target", + "source": "1756972161593", + "sourceHandle": "source", + "target": "1750836372241", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + } + ], + "nodes": [ + { + "data": { + "chunk_structure": "hierarchical_model", + "embedding_model": "jina-embeddings-v2-base-en", + "embedding_model_provider": "langgenius/jina/jina", + "index_chunk_variable_selector": [ + "1756972161593", + "result" + ], + "indexing_technique": "high_quality", + "keyword_number": 10, + "retrieval_model": { + "reranking_enable": true, + "reranking_mode": "reranking_model", + "reranking_model": { + "reranking_model_name": "jina-reranker-v1-base-en", + "reranking_provider_name": "langgenius/jina/jina" + }, + "score_threshold": 0, + "score_threshold_enabled": false, + "search_method": "hybrid_search", + "top_k": 3, + "weights": null + }, + "selected": false, + "title": "Knowledge Base", + "type": "knowledge-index" + }, + "height": 114, + "id": "1750836372241", + "position": { + "x": 479.7628208876065, + "y": 326 + }, + "positionAbsolute": { + "x": 479.7628208876065, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "File", + "datasource_name": "upload-file", + "datasource_parameters": {}, + "fileExtensions": [ + "txt", + "markdown", + "mdx", + "pdf", + "html", + "xlsx", + "xls", + "vtt", + "properties", + "doc", + "docx", + "csv", + "eml", + "msg", + "pptx", + "xml", + "epub", + "ppt", + "md" + ], + "plugin_id": "langgenius/file", + "provider_name": "file", + "provider_type": "local_file", + "selected": false, + "title": "File", + "type": "datasource" + }, + "height": 52, + "id": "1750836380067", + "position": { + "x": -1371.6520723158733, + "y": 224.87938381325645 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": 224.87938381325645 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "is_team_authorization": true, + "output_schema": { + "properties": { + "documents": { + "description": "the documents extracted from the file", + "items": { + "type": "object" + }, + "type": "array" + }, + "images": { + "description": "The images extracted from the file", + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "paramSchemas": [ + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "ja_JP": "the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "pt_BR": "o arquivo a ser analisado (suporta pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "zh_Hans": "用于解析的文件(支持 pdf, ppt, pptx, doc, docx, png, jpg, jpeg)" + }, + "label": { + "en_US": "file", + "ja_JP": "file", + "pt_BR": "file", + "zh_Hans": "file" + }, + "llm_description": "the file to be parsed (support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "max": null, + "min": null, + "name": "file", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "file" + } + ], + "params": { + "file": "" + }, + "provider_id": "langgenius/dify_extractor/dify_extractor", + "provider_name": "langgenius/dify_extractor/dify_extractor", + "provider_type": "builtin", + "selected": false, + "title": "Dify Extractor", + "tool_configurations": {}, + "tool_description": "Dify Extractor", + "tool_label": "Dify Extractor", + "tool_name": "dify_extractor", + "tool_node_version": "2", + "tool_parameters": { + "file": { + "type": "variable", + "value": [ + "1756442986174", + "output" + ] + } + }, + "type": "tool" + }, + "height": 52, + "id": "1750836391776", + "position": { + "x": -417.5334221022782, + "y": 268.1692071834485 + }, + "positionAbsolute": { + "x": -417.5334221022782, + "y": 268.1692071834485 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 252, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Knowledge Pipeline\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" starts with Data Source as the starting node and ends with the knowledge base node. The general steps are: import documents from the data source → use extractor to extract document content → split and clean content into structured chunks → store in the knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The user input variables required by the Knowledge Pipeline node must be predefined and managed via the Input Field section located in the top-right corner of the orchestration canvas. It determines what input fields the end users will see and need to fill in when importing files to the knowledge base through this pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Unique Inputs: Input fields defined here are only available to the selected data source and its downstream nodes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Global Inputs: These input fields are shared across all subsequent nodes after the data source and are typically set during the Process Documents step.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For more information, see https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 1124 + }, + "height": 252, + "id": "1751252161631", + "position": { + "x": -1371.6520723158733, + "y": -123.758428116601 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": -123.758428116601 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 1124 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 388, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Currently we support 4 types of \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Data Sources\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\": File Upload, Online Drive, Online Doc, and Web Crawler. Different types of Data Sources have different input and output types. The output of File Upload and Online Drive are files, while the output of Online Doc and WebCrawler are pages. You can find more Data Sources on our Marketplace.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A Knowledge Pipeline can have multiple data sources. Each data source can be selected more than once with different settings. Each added data source is a tab on the add file interface. However, each time the user can only select one data source to import the file and trigger its subsequent processing.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 285 + }, + "height": 388, + "id": "1751252440357", + "position": { + "x": -1723.9942193415582, + "y": 224.87938381325645 + }, + "positionAbsolute": { + "x": -1723.9942193415582, + "y": 224.87938381325645 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 285 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 430, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A document extractor in Retrieval-Augmented Generation (RAG) is a tool or component that automatically identifies, extracts, and structures text and data from various types of documents—such as PDFs, images, scanned files, handwritten notes, and more—into a format that can be effectively used by language models within RAG Pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Dify Extractor\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" is a built-in document parser developed by Dify. It supports a wide range of common file formats and offers specialized handling for certain formats, such as \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":16,\"mode\":\"normal\",\"style\":\"\",\"text\":\".docx\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\". In addition to text extraction, it can extract images embedded within documents, store them, and return their accessible URLs.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 430, + "id": "1751253091602", + "position": { + "x": -417.5334221022782, + "y": 547.4103414077279 + }, + "positionAbsolute": { + "x": -417.5334221022782, + "y": 547.4103414077279 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 638, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" addresses the dilemma of context and precision by leveraging a two-tier hierarchical approach that effectively balances the trade-off between accurate matching and comprehensive contextual information in RAG systems. \",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Here is the essential mechanism of this structured, two-level information access:\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"- Query Matching with Child Chunks: Small, focused pieces of information, often as concise as a single sentence within a paragraph, are used to match the user's query. These child chunks enable precise and relevant initial retrieval.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"- Contextual Enrichment with Parent Chunks: Larger, encompassing sections—such as a paragraph, a section, or even an entire document—that include the matched child chunks are then retrieved. These parent chunks provide comprehensive context for the Language Model (LLM). length, and overlap—to fit different document formats or scenarios. Preprocessing options are also available to clean up the text by removing excess spaces, URLs, and emails.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 638, + "id": "1751253953926", + "position": { + "x": 184.46657789772178, + "y": 407.42301051148354 + }, + "positionAbsolute": { + "x": 184.46657789772178, + "y": 407.42301051148354 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 410, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The knowledge base provides two indexing methods: \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Economical\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", each with different retrieval strategies. High-Quality mode uses embeddings for vectorization and supports vector, full-text, and hybrid retrieval, offering more accurate results but higher resource usage. Economical mode uses keyword-based inverted indexing with no token consumption but lower accuracy; upgrading to High-Quality is possible, but downgrading requires creating a new knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"* Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" only support the \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" indexing method.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 410, + "id": "1751254117904", + "position": { + "x": 479.7628208876065, + "y": 472.46585541244207 + }, + "positionAbsolute": { + "x": 479.7628208876065, + "y": 472.46585541244207 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "output_type": "string", + "selected": false, + "title": "Variable Aggregator", + "type": "variable-aggregator", + "variables": [ + [ + "1750836391776", + "text" + ], + [ + "1753349228522", + "text" + ], + [ + "1754023419266", + "content" + ], + [ + "1756896212061", + "content" + ], + [ + "1756907397615", + "content" + ] + ] + }, + "height": 213, + "id": "1753346901505", + "position": { + "x": -117.24452412456148, + "y": 326 + }, + "positionAbsolute": { + "x": -117.24452412456148, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "is_array_file": false, + "selected": false, + "title": "Doc Extractor", + "type": "document-extractor", + "variable_selector": [ + "1756442986174", + "output" + ] + }, + "height": 92, + "id": "1753349228522", + "position": { + "x": -417.5334221022782, + "y": 417.25474169825833 + }, + "positionAbsolute": { + "x": -417.5334221022782, + "y": 417.25474169825833 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "Notion", + "datasource_name": "notion_datasource", + "datasource_parameters": {}, + "plugin_id": "langgenius/notion_datasource", + "provider_name": "notion_datasource", + "provider_type": "online_document", + "selected": false, + "title": "Notion", + "type": "datasource" + }, + "height": 52, + "id": "1754023419266", + "position": { + "x": -1369.6904698303242, + "y": 440.01452302398053 + }, + "positionAbsolute": { + "x": -1369.6904698303242, + "y": 440.01452302398053 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "output_type": "file", + "selected": false, + "title": "Variable Aggregator", + "type": "variable-aggregator", + "variables": [ + [ + "1750836380067", + "file" + ], + [ + "1756442998557", + "file" + ] + ] + }, + "height": 135, + "id": "1756442986174", + "position": { + "x": -1054.415447856335, + "y": 236.10252072775984 + }, + "positionAbsolute": { + "x": -1054.415447856335, + "y": 236.10252072775984 + }, + "selected": true, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "Google Drive", + "datasource_name": "google_drive", + "datasource_parameters": {}, + "plugin_id": "langgenius/google_drive", + "provider_name": "google_drive", + "provider_type": "online_drive", + "selected": false, + "title": "Google Drive", + "type": "datasource" + }, + "height": 52, + "id": "1756442998557", + "position": { + "x": -1371.6520723158733, + "y": 326 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "cases": [ + { + "case_id": "true", + "conditions": [ + { + "comparison_operator": "is", + "id": "1581dd11-7898-41f4-962f-937283ba7e01", + "value": ".xlsx", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "92abb46d-d7e4-46e7-a5e1-8a29bb45d528", + "value": ".xls", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "1dde5ae7-754d-4e83-96b2-fe1f02995d8b", + "value": ".md", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "7e1a80e5-c32a-46a4-8f92-8912c64972aa", + "value": ".markdown", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "53abfe95-c7d0-4f63-ad37-17d425d25106", + "value": ".mdx", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "436877b8-8c0a-4cc6-9565-92754db08571", + "value": ".html", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "5e3e375e-750b-4204-8ac3-9a1174a5ab7c", + "value": ".htm", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "1a84a784-a797-4f96-98a0-33a9b48ceb2b", + "value": ".docx", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "62d11445-876a-493f-85d3-8fc020146bdd", + "value": ".csv", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "02c4bce8-7668-4ccd-b750-4281f314b231", + "value": ".txt", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + } + ], + "id": "true", + "logical_operator": "or" + } + ], + "selected": false, + "title": "IF/ELSE", + "type": "if-else" + }, + "height": 358, + "id": "1756443014860", + "position": { + "x": -733.5977815139424, + "y": 236.10252072775984 + }, + "positionAbsolute": { + "x": -733.5977815139424, + "y": 236.10252072775984 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "Jina Reader", + "datasource_name": "jina_reader", + "datasource_parameters": { + "crawl_sub_pages": { + "type": "variable", + "value": [ + "rag", + "1756896212061", + "jina_subpages" + ] + }, + "limit": { + "type": "variable", + "value": [ + "rag", + "1756896212061", + "jina_limit" + ] + }, + "url": { + "type": "mixed", + "value": "{{#rag.1756896212061.jina_url#}}" + }, + "use_sitemap": { + "type": "variable", + "value": [ + "rag", + "1756896212061", + "jian_sitemap" + ] + } + }, + "plugin_id": "langgenius/jina_datasource", + "provider_name": "jinareader", + "provider_type": "website_crawl", + "selected": false, + "title": "Jina Reader", + "type": "datasource" + }, + "height": 52, + "id": "1756896212061", + "position": { + "x": -1371.6520723158733, + "y": 538.9988445953813 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": 538.9988445953813 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "Firecrawl", + "datasource_name": "crawl", + "datasource_parameters": { + "crawl_subpages": { + "type": "variable", + "value": [ + "rag", + "1756907397615", + "firecrawl_subpages" + ] + }, + "exclude_paths": { + "type": "mixed", + "value": "{{#rag.1756907397615.exclude_paths#}}" + }, + "include_paths": { + "type": "mixed", + "value": "{{#rag.1756907397615.include_paths#}}" + }, + "limit": { + "type": "variable", + "value": [ + "rag", + "1756907397615", + "max_pages" + ] + }, + "max_depth": { + "type": "variable", + "value": [ + "rag", + "1756907397615", + "max_depth" + ] + }, + "only_main_content": { + "type": "variable", + "value": [ + "rag", + "1756907397615", + "main_content" + ] + }, + "url": { + "type": "mixed", + "value": "{{#rag.1756907397615.firecrawl_url1#}}" + } + }, + "plugin_id": "langgenius/firecrawl_datasource", + "provider_name": "firecrawl", + "provider_type": "website_crawl", + "selected": false, + "title": "Firecrawl", + "type": "datasource" + }, + "height": 52, + "id": "1756907397615", + "position": { + "x": -1371.6520723158733, + "y": 644.3296146102903 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": 644.3296146102903 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "is_team_authorization": true, + "paramSchemas": [ + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "The text you want to chunk.", + "ja_JP": "The text you want to chunk.", + "pt_BR": "Conteúdo de Entrada", + "zh_Hans": "输入文本" + }, + "label": { + "en_US": "Input Content", + "ja_JP": "Input Content", + "pt_BR": "Conteúdo de Entrada", + "zh_Hans": "输入文本" + }, + "llm_description": "The text you want to chunk.", + "max": null, + "min": null, + "name": "input_text", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": "paragraph", + "form": "llm", + "human_description": { + "en_US": "Split text into paragraphs based on separator and maximum chunk length, using split text as parent block or entire document as parent block and directly retrieve.", + "ja_JP": "Split text into paragraphs based on separator and maximum chunk length, using split text as parent block or entire document as parent block and directly retrieve.", + "pt_BR": "Dividir texto em parágrafos com base no separador e no comprimento máximo do bloco, usando o texto dividido como bloco pai ou documento completo como bloco pai e diretamente recuperá-lo.", + "zh_Hans": "根据分隔符和最大块长度将文本拆分为段落,使用拆分文本作为检索的父块或整个文档用作父块并直接检索。" + }, + "label": { + "en_US": "Parent Mode", + "ja_JP": "Parent Mode", + "pt_BR": "Modo Pai", + "zh_Hans": "父块模式" + }, + "llm_description": "Split text into paragraphs based on separator and maximum chunk length, using split text as parent block or entire document as parent block and directly retrieve.", + "max": null, + "min": null, + "name": "parent_mode", + "options": [ + { + "icon": "", + "label": { + "en_US": "paragraph", + "ja_JP": "paragraph", + "pt_BR": "paragraph", + "zh_Hans": "paragraph" + }, + "value": "paragraph" + }, + { + "icon": "", + "label": { + "en_US": "full_doc", + "ja_JP": "full_doc", + "pt_BR": "full_doc", + "zh_Hans": "full_doc" + }, + "value": "full_doc" + } + ], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "select" + }, + { + "auto_generate": null, + "default": "\n\n", + "form": "llm", + "human_description": { + "en_US": "Separator used for chunking", + "ja_JP": "Separator used for chunking", + "pt_BR": "Separador usado para divisão", + "zh_Hans": "用于分块的分隔符" + }, + "label": { + "en_US": "Parent Delimiter", + "ja_JP": "Parent Delimiter", + "pt_BR": "Separador de Pai", + "zh_Hans": "父块分隔符" + }, + "llm_description": "The separator used to split chunks", + "max": null, + "min": null, + "name": "separator", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": 1024, + "form": "llm", + "human_description": { + "en_US": "Maximum length for chunking", + "ja_JP": "Maximum length for chunking", + "pt_BR": "Comprimento máximo para divisão", + "zh_Hans": "用于分块的最大长度" + }, + "label": { + "en_US": "Maximum Parent Chunk Length", + "ja_JP": "Maximum Parent Chunk Length", + "pt_BR": "Comprimento Máximo do Bloco Pai", + "zh_Hans": "最大父块长度" + }, + "llm_description": "Maximum length allowed per chunk", + "max": null, + "min": null, + "name": "max_length", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "number" + }, + { + "auto_generate": null, + "default": ". ", + "form": "llm", + "human_description": { + "en_US": "Separator used for subchunking", + "ja_JP": "Separator used for subchunking", + "pt_BR": "Separador usado para subdivisão", + "zh_Hans": "用于子分块的分隔符" + }, + "label": { + "en_US": "Child Delimiter", + "ja_JP": "Child Delimiter", + "pt_BR": "Separador de Subdivisão", + "zh_Hans": "子分块分隔符" + }, + "llm_description": "The separator used to split subchunks", + "max": null, + "min": null, + "name": "subchunk_separator", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": 512, + "form": "llm", + "human_description": { + "en_US": "Maximum length for subchunking", + "ja_JP": "Maximum length for subchunking", + "pt_BR": "Comprimento máximo para subdivisão", + "zh_Hans": "用于子分块的最大长度" + }, + "label": { + "en_US": "Maximum Child Chunk Length", + "ja_JP": "Maximum Child Chunk Length", + "pt_BR": "Comprimento Máximo de Subdivisão", + "zh_Hans": "子分块最大长度" + }, + "llm_description": "Maximum length allowed per subchunk", + "max": null, + "min": null, + "name": "subchunk_max_length", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "number" + }, + { + "auto_generate": null, + "default": 0, + "form": "llm", + "human_description": { + "en_US": "Whether to remove consecutive spaces, newlines and tabs", + "ja_JP": "Whether to remove consecutive spaces, newlines and tabs", + "pt_BR": "Se deve remover espaços extras no texto", + "zh_Hans": "是否移除文本中的连续空格、换行符和制表符" + }, + "label": { + "en_US": "Replace consecutive spaces, newlines and tabs", + "ja_JP": "Replace consecutive spaces, newlines and tabs", + "pt_BR": "Substituir espaços consecutivos, novas linhas e guias", + "zh_Hans": "替换连续空格、换行符和制表符" + }, + "llm_description": "Whether to remove consecutive spaces, newlines and tabs", + "max": null, + "min": null, + "name": "remove_extra_spaces", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + }, + { + "auto_generate": null, + "default": 0, + "form": "llm", + "human_description": { + "en_US": "Whether to remove URLs and emails in the text", + "ja_JP": "Whether to remove URLs and emails in the text", + "pt_BR": "Se deve remover URLs e e-mails no texto", + "zh_Hans": "是否移除文本中的URL和电子邮件地址" + }, + "label": { + "en_US": "Delete all URLs and email addresses", + "ja_JP": "Delete all URLs and email addresses", + "pt_BR": "Remover todas as URLs e e-mails", + "zh_Hans": "删除所有URL和电子邮件地址" + }, + "llm_description": "Whether to remove URLs and emails in the text", + "max": null, + "min": null, + "name": "remove_urls_emails", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + } + ], + "params": { + "input_text": "", + "max_length": "", + "parent_mode": "", + "remove_extra_spaces": "", + "remove_urls_emails": "", + "separator": "", + "subchunk_max_length": "", + "subchunk_separator": "" + }, + "provider_id": "langgenius/parentchild_chunker/parentchild_chunker", + "provider_name": "langgenius/parentchild_chunker/parentchild_chunker", + "provider_type": "builtin", + "selected": false, + "title": "Parent-child Chunker", + "tool_configurations": {}, + "tool_description": "Process documents into parent-child chunk structures", + "tool_label": "Parent-child Chunker", + "tool_name": "parentchild_chunker", + "tool_node_version": "2", + "tool_parameters": { + "input_text": { + "type": "mixed", + "value": "{{#1753346901505.output#}}" + }, + "max_length": { + "type": "variable", + "value": [ + "rag", + "shared", + "parent_length" + ] + }, + "parent_mode": { + "type": "variable", + "value": [ + "rag", + "shared", + "parent_mode" + ] + }, + "remove_extra_spaces": { + "type": "variable", + "value": [ + "rag", + "shared", + "clean_1" + ] + }, + "remove_urls_emails": { + "type": "variable", + "value": [ + "rag", + "shared", + "clean_2" + ] + }, + "separator": { + "type": "mixed", + "value": "{{#rag.shared.parent_dilmiter#}}" + }, + "subchunk_max_length": { + "type": "variable", + "value": [ + "rag", + "shared", + "child_length" + ] + }, + "subchunk_separator": { + "type": "mixed", + "value": "{{#rag.shared.child_delimiter#}}" + } + }, + "type": "tool" + }, + "height": 52, + "id": "1756972161593", + "position": { + "x": 184.46657789772178, + "y": 326 + }, + "positionAbsolute": { + "x": 184.46657789772178, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + } + ], + "viewport": { + "x": 947.2141381290828, + "y": 179.30600859363653, + "zoom": 0.47414481289660987 + } + }, + "icon_info": { + "icon": "ab8da246-37ba-4bbb-9b24-e7bda0778005", + "icon_background": null, + "icon_type": "image", + "icon_url": "data:image/png;base64,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" + }, + "id": "9553b1e0-0c26-445b-9e18-063ad7eca0b4", + "name": "Parent-child-HQ", + "icon": { + "icon": "ab8da246-37ba-4bbb-9b24-e7bda0778005", + "icon_background": null, + "icon_type": "image", + "icon_url": "data:image/png;base64,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" + }, + "language": "zh-Hans", + "position": 2 + }, + "9ef3e66a-11c7-4227-897c-3b0f9a42da1a": { + "chunk_structure": "qa_model", + "description": "This template generates structured Q&A pairs by extracting selected columns from a table. These pairs are indexed by questions, enabling efficient retrieval of relevant answers based on query similarity.", + "export_data": "dependencies:\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/qa_chunk:0.0.8@1fed9644646bdd48792cdf5a1d559a3df336bd3a8edb0807227499fb56dce3af\n version: null\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/jina:0.0.8@d3a6766fbb80890d73fea7ea04803f3e1702c6e6bd621aafb492b86222a193dd\n version: null\nkind: rag_pipeline\nrag_pipeline:\n description: ''\n icon: 769900fc-8a31-4584-94f6-f227357c00c8\n icon_background: null\n icon_type: image\n icon_url: data:image/png;base64,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\n name: Simple Q&A\nversion: 0.1.0\nworkflow:\n conversation_variables: []\n environment_variables: []\n features: {}\n graph:\n edges:\n - data:\n isInIteration: false\n isInLoop: false\n sourceType: datasource\n targetType: tool\n id: 1750836380067-source-1753253430271-target\n source: '1750836380067'\n sourceHandle: source\n target: '1753253430271'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: tool\n targetType: knowledge-index\n id: 1753253430271-source-1750836372241-target\n source: '1753253430271'\n sourceHandle: source\n target: '1750836372241'\n targetHandle: target\n type: custom\n zIndex: 0\n nodes:\n - data:\n chunk_structure: qa_model\n embedding_model: jina-embeddings-v2-base-en\n embedding_model_provider: langgenius/jina/jina\n index_chunk_variable_selector:\n - '1753253430271'\n - result\n indexing_technique: high_quality\n keyword_number: 10\n retrieval_model:\n reranking_enable: false\n reranking_mode: reranking_model\n reranking_model:\n reranking_model_name: null\n reranking_provider_name: null\n score_threshold: 0\n score_threshold_enabled: false\n search_method: semantic_search\n top_k: 3\n weights: null\n selected: true\n title: Knowledge Base\n type: knowledge-index\n height: 114\n id: '1750836372241'\n position:\n x: 160\n y: 326\n positionAbsolute:\n x: 160\n y: 326\n selected: true\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: File\n datasource_name: upload-file\n datasource_parameters: {}\n fileExtensions:\n - csv\n plugin_id: langgenius/file\n provider_name: file\n provider_type: local_file\n selected: false\n title: File\n type: datasource\n height: 52\n id: '1750836380067'\n position:\n x: -714.4192784522008\n y: 326\n positionAbsolute:\n x: -714.4192784522008\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n author: TenTen\n desc: ''\n height: 249\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Knowledge\n Pipeline\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\n starts with Data Source as the starting node and ends with the knowledge\n base node. The general steps are: import documents from the data source\n → use extractor to extract document content → split and clean content into\n structured chunks → store in the knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n user input variables required by the Knowledge Pipeline node must be predefined\n and managed via the Input Field section located in the top-right corner\n of the orchestration canvas. It determines what input fields the end users\n will see and need to fill in when importing files to the knowledge base\n through this pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Unique\n Inputs: Input fields defined here are only available to the selected data\n source and its downstream nodes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Global\n Inputs: These input fields are shared across all subsequent nodes after\n the data source and are typically set during the Process Documents step.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For\n more information, see \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer\",\"target\":null,\"title\":null,\"url\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\".\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 1115\n height: 249\n id: '1751252161631'\n position:\n x: -714.4192784522008\n y: -19.94142868660783\n positionAbsolute:\n x: -714.4192784522008\n y: -19.94142868660783\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 1115\n - data:\n author: TenTen\n desc: ''\n height: 281\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Currently\n we support 4 types of \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Data\n Sources\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\":\n File Upload, Online Drive, Online Doc, and Web Crawler. Different types\n of Data Sources have different input and output types. The output of File\n Upload and Online Drive are files, while the output of Online Doc and WebCrawler\n are pages. You can find more Data Sources on our Marketplace.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n Knowledge Pipeline can have multiple data sources. Each data source can\n be selected more than once with different settings. Each added data source\n is a tab on the add file interface. However, each time the user can only\n select one data source to import the file and trigger its subsequent processing.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 415\n height: 281\n id: '1751252440357'\n position:\n x: -1206.996048993409\n y: 311.5998178583933\n positionAbsolute:\n x: -1206.996048993409\n y: 311.5998178583933\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 415\n - data:\n author: TenTen\n desc: ''\n height: 403\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n knowledge base provides two indexing methods: \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Economical\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\",\n each with different retrieval strategies. High-Quality mode uses embeddings\n for vectorization and supports vector, full-text, and hybrid retrieval,\n offering more accurate results but higher resource usage. Economical mode\n uses keyword-based inverted indexing with no token consumption but lower\n accuracy; upgrading to High-Quality is possible, but downgrading requires\n creating a new knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"*\n Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A\n Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" only\n support the \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" indexing\n method.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 403\n id: '1751254117904'\n position:\n x: 160\n y: 471.1516409864865\n positionAbsolute:\n x: 160\n y: 471.1516409864865\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n author: TenTen\n desc: ''\n height: 341\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A\n Processor\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" extracts\n specified columns from tables to generate structured Q&A pairs. Users can\n independently designate which columns to use for questions and which for\n answers.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"These\n pairs are indexed by the question field, so user queries are matched directly\n against the questions to retrieve the corresponding answers. This \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q-to-Q\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" matching\n strategy improves clarity and precision, especially in scenarios involving\n high-frequency or highly similar user questions.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 341\n id: '1751356019653'\n position:\n x: -282.74494795239\n y: 411.6979750489463\n positionAbsolute:\n x: -282.74494795239\n y: 411.6979750489463\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n is_team_authorization: true\n output_schema:\n properties:\n result:\n description: The result of the general chunk tool.\n properties:\n qa_chunks:\n items:\n description: The QA chunk.\n properties:\n answer:\n description: The answer of the QA chunk.\n type: string\n question:\n description: The question of the QA chunk.\n type: string\n type: object\n type: array\n type: object\n type: object\n paramSchemas:\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: The file you want to extract QA from.\n ja_JP: The file you want to extract QA from.\n pt_BR: The file you want to extract QA from.\n zh_Hans: 你想要提取 QA 的文件。\n label:\n en_US: Input File\n ja_JP: Input File\n pt_BR: Input File\n zh_Hans: 输入文件\n llm_description: The file you want to extract QA from.\n max: null\n min: null\n name: input_file\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: file\n - auto_generate: null\n default: 0\n form: llm\n human_description:\n en_US: Column number for question.\n ja_JP: Column number for question.\n pt_BR: Column number for question.\n zh_Hans: 问题所在的列。\n label:\n en_US: Column number for question\n ja_JP: Column number for question\n pt_BR: Column number for question\n zh_Hans: 问题所在的列\n llm_description: The column number for question, the format of the column\n number must be an integer.\n max: null\n min: null\n name: question_column\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: number\n - auto_generate: null\n default: 1\n form: llm\n human_description:\n en_US: Column number for answer.\n ja_JP: Column number for answer.\n pt_BR: Column number for answer.\n zh_Hans: 答案所在的列。\n label:\n en_US: Column number for answer\n ja_JP: Column number for answer\n pt_BR: Column number for answer\n zh_Hans: 答案所在的列\n llm_description: The column number for answer, the format of the column\n number must be an integer.\n max: null\n min: null\n name: answer_column\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: number\n params:\n answer_column: ''\n input_file: ''\n question_column: ''\n provider_id: langgenius/qa_chunk/qa_chunk\n provider_name: langgenius/qa_chunk/qa_chunk\n provider_type: builtin\n selected: false\n title: Q&A PROCESSOR\n tool_configurations: {}\n tool_description: A tool for QA chunking mode.\n tool_label: QA Chunk\n tool_name: qa_chunk\n tool_node_version: '2'\n tool_parameters:\n answer_column:\n type: variable\n value:\n - rag\n - shared\n - Column_Number_for_Answers\n input_file:\n type: variable\n value:\n - '1750836380067'\n - file\n question_column:\n type: variable\n value:\n - rag\n - shared\n - Column_Number_for_Questions\n type: tool\n height: 52\n id: '1753253430271'\n position:\n x: -282.74494795239\n y: 326\n positionAbsolute:\n x: -282.74494795239\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n author: TenTen\n desc: ''\n height: 173\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Simple\n Q&A Template\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" requires\n a pre-prepared table of question-answer pairs. As a result, it only supports\n \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"File\n Upload\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" data\n source, accepting \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":16,\"mode\":\"normal\",\"style\":\"\",\"text\":\"csv\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" file\n formats.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 173\n id: '1753411065636'\n position:\n x: -714.4192784522008\n y: 411.6979750489463\n positionAbsolute:\n x: -714.4192784522008\n y: 411.6979750489463\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n viewport:\n x: 698.8920691163195\n y: 311.46417000656925\n zoom: 0.41853867943092266\n rag_pipeline_variables:\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: 1\n label: Column Number for Questions\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: Specify a column in the table as Questions. The number of first column is\n 0.\n type: number\n unit: ''\n variable: Column_Number_for_Questions\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: 2\n label: Column Number for Answers\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: Specify a column in the table as Answers. The number of first column is\n 0.\n type: number\n unit: null\n variable: Column_Number_for_Answers\n", + "graph": { + "edges": [ + { + "data": { + "isInIteration": false, + "isInLoop": false, + "sourceType": "datasource", + "targetType": "tool" + }, + "id": "1750836380067-source-1753253430271-target", + "source": "1750836380067", + "sourceHandle": "source", + "target": "1753253430271", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "tool", + "targetType": "knowledge-index" + }, + "id": "1753253430271-source-1750836372241-target", + "source": "1753253430271", + "sourceHandle": "source", + "target": "1750836372241", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + } + ], + "nodes": [ + { + "data": { + "chunk_structure": "qa_model", + "embedding_model": "jina-embeddings-v2-base-en", + "embedding_model_provider": "langgenius/jina/jina", + "index_chunk_variable_selector": [ + "1753253430271", + "result" + ], + "indexing_technique": "high_quality", + "keyword_number": 10, + "retrieval_model": { + "reranking_enable": false, + "reranking_mode": "reranking_model", + "reranking_model": { + "reranking_model_name": null, + "reranking_provider_name": null + }, + "score_threshold": 0, + "score_threshold_enabled": false, + "search_method": "semantic_search", + "top_k": 3, + "weights": null + }, + "selected": true, + "title": "Knowledge Base", + "type": "knowledge-index" + }, + "height": 114, + "id": "1750836372241", + "position": { + "x": 160, + "y": 326 + }, + "positionAbsolute": { + "x": 160, + "y": 326 + }, + "selected": true, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "File", + "datasource_name": "upload-file", + "datasource_parameters": {}, + "fileExtensions": [ + "csv" + ], + "plugin_id": "langgenius/file", + "provider_name": "file", + "provider_type": "local_file", + "selected": false, + "title": "File", + "type": "datasource" + }, + "height": 52, + "id": "1750836380067", + "position": { + "x": -714.4192784522008, + "y": 326 + }, + "positionAbsolute": { + "x": -714.4192784522008, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 249, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Knowledge Pipeline\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" starts with Data Source as the starting node and ends with the knowledge base node. The general steps are: import documents from the data source → use extractor to extract document content → split and clean content into structured chunks → store in the knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The user input variables required by the Knowledge Pipeline node must be predefined and managed via the Input Field section located in the top-right corner of the orchestration canvas. It determines what input fields the end users will see and need to fill in when importing files to the knowledge base through this pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Unique Inputs: Input fields defined here are only available to the selected data source and its downstream nodes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Global Inputs: These input fields are shared across all subsequent nodes after the data source and are typically set during the Process Documents step.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For more information, see \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer\",\"target\":null,\"title\":null,\"url\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\".\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 1115 + }, + "height": 249, + "id": "1751252161631", + "position": { + "x": -714.4192784522008, + "y": -19.94142868660783 + }, + "positionAbsolute": { + "x": -714.4192784522008, + "y": -19.94142868660783 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 1115 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 281, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Currently we support 4 types of \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Data Sources\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\": File Upload, Online Drive, Online Doc, and Web Crawler. Different types of Data Sources have different input and output types. The output of File Upload and Online Drive are files, while the output of Online Doc and WebCrawler are pages. You can find more Data Sources on our Marketplace.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A Knowledge Pipeline can have multiple data sources. Each data source can be selected more than once with different settings. Each added data source is a tab on the add file interface. However, each time the user can only select one data source to import the file and trigger its subsequent processing.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 415 + }, + "height": 281, + "id": "1751252440357", + "position": { + "x": -1206.996048993409, + "y": 311.5998178583933 + }, + "positionAbsolute": { + "x": -1206.996048993409, + "y": 311.5998178583933 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 415 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 403, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The knowledge base provides two indexing methods: \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Economical\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", each with different retrieval strategies. High-Quality mode uses embeddings for vectorization and supports vector, full-text, and hybrid retrieval, offering more accurate results but higher resource usage. Economical mode uses keyword-based inverted indexing with no token consumption but lower accuracy; upgrading to High-Quality is possible, but downgrading requires creating a new knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"* Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" only support the \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" indexing method.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 403, + "id": "1751254117904", + "position": { + "x": 160, + "y": 471.1516409864865 + }, + "positionAbsolute": { + "x": 160, + "y": 471.1516409864865 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 341, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A Processor\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" extracts specified columns from tables to generate structured Q&A pairs. Users can independently designate which columns to use for questions and which for answers.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"These pairs are indexed by the question field, so user queries are matched directly against the questions to retrieve the corresponding answers. This \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q-to-Q\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" matching strategy improves clarity and precision, especially in scenarios involving high-frequency or highly similar user questions.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 341, + "id": "1751356019653", + "position": { + "x": -282.74494795239, + "y": 411.6979750489463 + }, + "positionAbsolute": { + "x": -282.74494795239, + "y": 411.6979750489463 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "is_team_authorization": true, + "output_schema": { + "properties": { + "result": { + "description": "The result of the general chunk tool.", + "properties": { + "qa_chunks": { + "items": { + "description": "The QA chunk.", + "properties": { + "answer": { + "description": "The answer of the QA chunk.", + "type": "string" + }, + "question": { + "description": "The question of the QA chunk.", + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + } + }, + "type": "object" + }, + "paramSchemas": [ + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "The file you want to extract QA from.", + "ja_JP": "The file you want to extract QA from.", + "pt_BR": "The file you want to extract QA from.", + "zh_Hans": "你想要提取 QA 的文件。" + }, + "label": { + "en_US": "Input File", + "ja_JP": "Input File", + "pt_BR": "Input File", + "zh_Hans": "输入文件" + }, + "llm_description": "The file you want to extract QA from.", + "max": null, + "min": null, + "name": "input_file", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "file" + }, + { + "auto_generate": null, + "default": 0, + "form": "llm", + "human_description": { + "en_US": "Column number for question.", + "ja_JP": "Column number for question.", + "pt_BR": "Column number for question.", + "zh_Hans": "问题所在的列。" + }, + "label": { + "en_US": "Column number for question", + "ja_JP": "Column number for question", + "pt_BR": "Column number for question", + "zh_Hans": "问题所在的列" + }, + "llm_description": "The column number for question, the format of the column number must be an integer.", + "max": null, + "min": null, + "name": "question_column", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "number" + }, + { + "auto_generate": null, + "default": 1, + "form": "llm", + "human_description": { + "en_US": "Column number for answer.", + "ja_JP": "Column number for answer.", + "pt_BR": "Column number for answer.", + "zh_Hans": "答案所在的列。" + }, + "label": { + "en_US": "Column number for answer", + "ja_JP": "Column number for answer", + "pt_BR": "Column number for answer", + "zh_Hans": "答案所在的列" + }, + "llm_description": "The column number for answer, the format of the column number must be an integer.", + "max": null, + "min": null, + "name": "answer_column", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "number" + } + ], + "params": { + "answer_column": "", + "input_file": "", + "question_column": "" + }, + "provider_id": "langgenius/qa_chunk/qa_chunk", + "provider_name": "langgenius/qa_chunk/qa_chunk", + "provider_type": "builtin", + "selected": false, + "title": "Q&A PROCESSOR", + "tool_configurations": {}, + "tool_description": "A tool for QA chunking mode.", + "tool_label": "QA Chunk", + "tool_name": "qa_chunk", + "tool_node_version": "2", + "tool_parameters": { + "answer_column": { + "type": "variable", + "value": [ + "rag", + "shared", + "Column_Number_for_Answers" + ] + }, + "input_file": { + "type": "variable", + "value": [ + "1750836380067", + "file" + ] + }, + "question_column": { + "type": "variable", + "value": [ + "rag", + "shared", + "Column_Number_for_Questions" + ] + } + }, + "type": "tool" + }, + "height": 52, + "id": "1753253430271", + "position": { + "x": -282.74494795239, + "y": 326 + }, + "positionAbsolute": { + "x": -282.74494795239, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 173, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Simple Q&A Template\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" requires a pre-prepared table of question-answer pairs. As a result, it only supports \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"File Upload\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" data source, accepting \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":16,\"mode\":\"normal\",\"style\":\"\",\"text\":\"csv\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" file formats.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 173, + "id": "1753411065636", + "position": { + "x": -714.4192784522008, + "y": 411.6979750489463 + }, + "positionAbsolute": { + "x": -714.4192784522008, + "y": 411.6979750489463 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + } + ], + "viewport": { + "x": 698.8920691163195, + "y": 311.46417000656925, + "zoom": 0.41853867943092266 + } + }, + "icon_info": { + "icon": "ae0993dc-ff90-48ac-9e35-c31ebae5124b", + "icon_background": null, + "icon_type": "image", + "icon_url": "data:image/png;base64,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" + }, + "id": "9ef3e66a-11c7-4227-897c-3b0f9a42da1a", + "name": "Simple Q&A", + "icon": { + "icon": "ae0993dc-ff90-48ac-9e35-c31ebae5124b", + "icon_background": null, + "icon_type": "image", + "icon_url": "data:image/png;base64,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" + }, + "language": "zh-Hans", + "position": 3 + }, + "982d1788-837a-40c8-b7de-d37b09a9b2bc": { + "chunk_structure": "hierarchical_model", + "description": "This template is designed for converting native Office files such as DOCX, XLSX, and PPTX into Markdown to facilitate better information processing. PDF files are not recommended.", + "export_data": "dependencies:\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/jina:0.0.8@d3a6766fbb80890d73fea7ea04803f3e1702c6e6bd621aafb492b86222a193dd\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/parentchild_chunker:0.0.7@ee9c253e7942436b4de0318200af97d98d094262f3c1a56edbe29dcb01fbc158\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: yevanchen/markitdown:0.0.4@776b3e2e930e2ffd28a75bb20fecbe7a020849cf754f86e604acacf1258877f6\nkind: rag_pipeline\nrag_pipeline:\n description: ''\n icon: 9d658c3a-b22f-487d-8223-db51e9012505\n icon_background: null\n icon_type: image\n icon_url: data:image/png;base64,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\n name: Convert to Markdown\nversion: 0.1.0\nworkflow:\n conversation_variables: []\n environment_variables: []\n features: {}\n graph:\n edges:\n - data:\n isInLoop: false\n sourceType: tool\n targetType: knowledge-index\n id: 1751336942081-source-1750400198569-target\n selected: false\n source: '1751336942081'\n sourceHandle: source\n target: '1750400198569'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: tool\n id: 1750400203722-source-1751359716720-target\n selected: false\n source: '1750400203722'\n sourceHandle: source\n target: '1751359716720'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: tool\n targetType: tool\n id: 1751359716720-source-1751336942081-target\n source: '1751359716720'\n sourceHandle: source\n target: '1751336942081'\n targetHandle: target\n type: custom\n zIndex: 0\n nodes:\n - data:\n chunk_structure: hierarchical_model\n embedding_model: jina-embeddings-v2-base-en\n embedding_model_provider: langgenius/jina/jina\n index_chunk_variable_selector:\n - '1751336942081'\n - result\n indexing_technique: high_quality\n keyword_number: 10\n retrieval_model:\n hybridSearchMode: weighted_score\n score_threshold: 0.5\n score_threshold_enabled: false\n search_method: hybrid_search\n top_k: 3\n vector_setting:\n embedding_model_name: jina-embeddings-v2-base-en\n embedding_provider_name: langgenius/jina/jina\n selected: true\n title: Knowledge Base\n type: knowledge-index\n height: 114\n id: '1750400198569'\n position:\n x: 357.7591396590142\n y: 282\n positionAbsolute:\n x: 357.7591396590142\n y: 282\n selected: true\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: File\n datasource_name: upload-file\n datasource_parameters: {}\n fileExtensions:\n - html\n - xlsx\n - xls\n - doc\n - docx\n - csv\n - pptx\n - xml\n - ppt\n - txt\n plugin_id: langgenius/file\n provider_name: file\n provider_type: local_file\n selected: false\n title: File\n type: datasource\n height: 52\n id: '1750400203722'\n position:\n x: -580.684520226929\n y: 282\n positionAbsolute:\n x: -580.684520226929\n y: 282\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n author: TenTen\n desc: ''\n height: 316\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Currently\n we support 4 types of \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Data\n Sources\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\":\n File Upload, Online Drive, Online Doc, and Web Crawler. Different types\n of Data Sources have different input and output types. The output of File\n Upload and Online Drive are files, while the output of Online Doc and WebCrawler\n are pages. You can find more Data Sources on our Marketplace.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n Knowledge Pipeline can have multiple data sources. Each data source can\n be selected more than once with different settings. Each added data source\n is a tab on the add file interface. However, each time the user can only\n select one data source to import the file and trigger its subsequent processing.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 374\n height: 316\n id: '1751264451381'\n position:\n x: -1034.2054006208518\n y: 282\n positionAbsolute:\n x: -1034.2054006208518\n y: 282\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 374\n - data:\n author: TenTen\n desc: ''\n height: 260\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Knowledge\n Pipeline\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\n starts with Data Source as the starting node and ends with the knowledge\n base node. The general steps are: import documents from the data source\n → use extractor to extract document content → split and clean content into\n structured chunks → store in the knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n user input variables required by the Knowledge Pipeline node must be predefined\n and managed via the Input Field section located in the top-right corner\n of the orchestration canvas. It determines what input fields the end users\n will see and need to fill in when importing files to the knowledge base\n through this pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Unique\n Inputs: Input fields defined here are only available to the selected data\n source and its downstream nodes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Global\n Inputs: These input fields are shared across all subsequent nodes after\n the data source and are typically set during the Process Documents step.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For\n more information, see \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer\",\"target\":null,\"title\":null,\"url\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\".\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 1182\n height: 260\n id: '1751266376760'\n position:\n x: -580.684520226929\n y: -21.891401375096322\n positionAbsolute:\n x: -580.684520226929\n y: -21.891401375096322\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 1182\n - data:\n author: TenTen\n desc: ''\n height: 417\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n document extractor in Retrieval-Augmented Generation (RAG) is a tool or\n component that automatically identifies, extracts, and structures text and\n data from various types of documents—such as PDFs, images, scanned files,\n handwritten notes, and more—into a format that can be effectively used by\n language models within RAG Pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Markitdown\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\n serves as an excellent alternative to traditional document extraction nodes,\n offering robust file conversion capabilities within the Dify ecosystem.\n It leverages MarkItDown''s plugin-based architecture to provide seamless\n conversion of multiple file formats to Markdown.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 241\n height: 417\n id: '1751266402561'\n position:\n x: -266.96080929383595\n y: 372.64040589639495\n positionAbsolute:\n x: -266.96080929383595\n y: 372.64040589639495\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 241\n - data:\n author: TenTen\n desc: ''\n height: 554\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Parent-Child\n Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\n addresses the dilemma of context and precision by leveraging a two-tier\n hierarchical approach that effectively balances the trade-off between accurate\n matching and comprehensive contextual information in RAG systems. \",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Here\n is the essential mechanism of this structured, two-level information access:\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"-\n Query Matching with Child Chunks: Small, focused pieces of information,\n often as concise as a single sentence within a paragraph, are used to match\n the user''s query. These child chunks enable precise and relevant initial\n retrieval.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"-\n Contextual Enrichment with Parent Chunks: Larger, encompassing sections—such\n as a paragraph, a section, or even an entire document—that include the matched\n child chunks are then retrieved. These parent chunks provide comprehensive\n context for the Language Model (LLM).\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 554\n id: '1751266447821'\n position:\n x: 37.74090119950054\n y: 372.64040589639495\n positionAbsolute:\n x: 37.74090119950054\n y: 372.64040589639495\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n author: TenTen\n desc: ''\n height: 411\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n knowledge base provides two indexing methods: \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Economical\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\",\n each with different retrieval strategies. High-Quality mode uses embeddings\n for vectorization and supports vector, full-text, and hybrid retrieval,\n offering more accurate results but higher resource usage. Economical mode\n uses keyword-based inverted indexing with no token consumption but lower\n accuracy; upgrading to High-Quality is possible, but downgrading requires\n creating a new knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"*\n Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A\n Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" only\n support the \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" indexing\n method.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 411\n id: '1751266580099'\n position:\n x: 357.7591396590142\n y: 434.3959856026883\n positionAbsolute:\n x: 357.7591396590142\n y: 434.3959856026883\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n is_team_authorization: true\n output_schema:\n properties:\n result:\n description: Parent child chunks result\n items:\n type: object\n type: array\n type: object\n paramSchemas:\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: ''\n ja_JP: ''\n pt_BR: ''\n zh_Hans: ''\n label:\n en_US: Input Content\n ja_JP: Input Content\n pt_BR: Conteúdo de Entrada\n zh_Hans: 输入文本\n llm_description: The text you want to chunk.\n max: null\n min: null\n name: input_text\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: paragraph\n form: llm\n human_description:\n en_US: Split text into paragraphs based on separator and maximum chunk\n length, using split text as parent block or entire document as parent\n block and directly retrieve.\n ja_JP: Split text into paragraphs based on separator and maximum chunk\n length, using split text as parent block or entire document as parent\n block and directly retrieve.\n pt_BR: Dividir texto em parágrafos com base no separador e no comprimento\n máximo do bloco, usando o texto dividido como bloco pai ou documento\n completo como bloco pai e diretamente recuperá-lo.\n zh_Hans: 根据分隔符和最大块长度将文本拆分为段落,使用拆分文本作为检索的父块或整个文档用作父块并直接检索。\n label:\n en_US: Parent Mode\n ja_JP: Parent Mode\n pt_BR: Modo Pai\n zh_Hans: 父块模式\n llm_description: Split text into paragraphs based on separator and maximum\n chunk length, using split text as parent block or entire document as parent\n block and directly retrieve.\n max: null\n min: null\n name: parent_mode\n options:\n - label:\n en_US: Paragraph\n ja_JP: Paragraph\n pt_BR: Parágrafo\n zh_Hans: 段落\n value: paragraph\n - label:\n en_US: Full Document\n ja_JP: Full Document\n pt_BR: Documento Completo\n zh_Hans: 全文\n value: full_doc\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: select\n - auto_generate: null\n default: '\n\n\n '\n form: llm\n human_description:\n en_US: Separator used for chunking\n ja_JP: Separator used for chunking\n pt_BR: Separador usado para divisão\n zh_Hans: 用于分块的分隔符\n label:\n en_US: Parent Delimiter\n ja_JP: Parent Delimiter\n pt_BR: Separador de Pai\n zh_Hans: 父块分隔符\n llm_description: The separator used to split chunks\n max: null\n min: null\n name: separator\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: 1024\n form: llm\n human_description:\n en_US: Maximum length for chunking\n ja_JP: Maximum length for chunking\n pt_BR: Comprimento máximo para divisão\n zh_Hans: 用于分块的最大长度\n label:\n en_US: Maximum Parent Chunk Length\n ja_JP: Maximum Parent Chunk Length\n pt_BR: Comprimento Máximo do Bloco Pai\n zh_Hans: 最大父块长度\n llm_description: Maximum length allowed per chunk\n max: null\n min: null\n name: max_length\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: number\n - auto_generate: null\n default: '. '\n form: llm\n human_description:\n en_US: Separator used for subchunking\n ja_JP: Separator used for subchunking\n pt_BR: Separador usado para subdivisão\n zh_Hans: 用于子分块的分隔符\n label:\n en_US: Child Delimiter\n ja_JP: Child Delimiter\n pt_BR: Separador de Subdivisão\n zh_Hans: 子分块分隔符\n llm_description: The separator used to split subchunks\n max: null\n min: null\n name: subchunk_separator\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: 512\n form: llm\n human_description:\n en_US: Maximum length for subchunking\n ja_JP: Maximum length for subchunking\n pt_BR: Comprimento máximo para subdivisão\n zh_Hans: 用于子分块的最大长度\n label:\n en_US: Maximum Child Chunk Length\n ja_JP: Maximum Child Chunk Length\n pt_BR: Comprimento Máximo de Subdivisão\n zh_Hans: 子分块最大长度\n llm_description: Maximum length allowed per subchunk\n max: null\n min: null\n name: subchunk_max_length\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: number\n - auto_generate: null\n default: 0\n form: llm\n human_description:\n en_US: Whether to remove consecutive spaces, newlines and tabs\n ja_JP: Whether to remove consecutive spaces, newlines and tabs\n pt_BR: Se deve remover espaços extras no texto\n zh_Hans: 是否移除文本中的连续空格、换行符和制表符\n label:\n en_US: Replace consecutive spaces, newlines and tabs\n ja_JP: Replace consecutive spaces, newlines and tabs\n pt_BR: Substituir espaços consecutivos, novas linhas e guias\n zh_Hans: 替换连续空格、换行符和制表符\n llm_description: Whether to remove consecutive spaces, newlines and tabs\n max: null\n min: null\n name: remove_extra_spaces\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n - auto_generate: null\n default: 0\n form: llm\n human_description:\n en_US: Whether to remove URLs and emails in the text\n ja_JP: Whether to remove URLs and emails in the text\n pt_BR: Se deve remover URLs e e-mails no texto\n zh_Hans: 是否移除文本中的URL和电子邮件地址\n label:\n en_US: Delete all URLs and email addresses\n ja_JP: Delete all URLs and email addresses\n pt_BR: Remover todas as URLs e e-mails\n zh_Hans: 删除所有URL和电子邮件地址\n llm_description: Whether to remove URLs and emails in the text\n max: null\n min: null\n name: remove_urls_emails\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n params:\n input_text: ''\n max_length: ''\n parent_mode: ''\n remove_extra_spaces: ''\n remove_urls_emails: ''\n separator: ''\n subchunk_max_length: ''\n subchunk_separator: ''\n provider_id: langgenius/parentchild_chunker/parentchild_chunker\n provider_name: langgenius/parentchild_chunker/parentchild_chunker\n provider_type: builtin\n selected: false\n title: Parent-child Chunker\n tool_configurations: {}\n tool_description: Process documents into parent-child chunk structures\n tool_label: Parent-child Chunker\n tool_name: parentchild_chunker\n tool_node_version: '2'\n tool_parameters:\n input_text:\n type: mixed\n value: '{{#1751359716720.text#}}'\n max_length:\n type: variable\n value:\n - rag\n - shared\n - Maximum_Parent_Length\n parent_mode:\n type: variable\n value:\n - rag\n - shared\n - Parent_Mode\n separator:\n type: mixed\n value: '{{#rag.shared.Parent_Delimiter#}}'\n subchunk_max_length:\n type: variable\n value:\n - rag\n - shared\n - Maximum_Child_Length\n subchunk_separator:\n type: mixed\n value: '{{#rag.shared.Child_Delimiter#}}'\n type: tool\n height: 52\n id: '1751336942081'\n position:\n x: 37.74090119950054\n y: 282\n positionAbsolute:\n x: 37.74090119950054\n y: 282\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n is_team_authorization: true\n output_schema: null\n paramSchemas:\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: Upload files for processing\n ja_JP: Upload files for processing\n pt_BR: Carregar arquivos para processamento\n zh_Hans: 上传文件进行处理\n label:\n en_US: Files\n ja_JP: Files\n pt_BR: Arquivos\n zh_Hans: 文件\n llm_description: ''\n max: null\n min: null\n name: files\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: files\n params:\n files: ''\n provider_id: yevanchen/markitdown/markitdown\n provider_name: yevanchen/markitdown/markitdown\n provider_type: builtin\n selected: false\n title: markitdown\n tool_configurations: {}\n tool_description: Python tool for converting files and office documents to\n Markdown.\n tool_label: markitdown\n tool_name: markitdown\n tool_node_version: '2'\n tool_parameters:\n files:\n type: variable\n value:\n - '1750400203722'\n - file\n type: tool\n height: 52\n id: '1751359716720'\n position:\n x: -266.96080929383595\n y: 282\n positionAbsolute:\n x: -266.96080929383595\n y: 282\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n author: TenTen\n desc: ''\n height: 301\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"MarkItDown\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" is\n recommended for converting and handling a wide range of file formats, particularly\n for transforming content into Markdown. It works especially well for converting\n native Office files—such as \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"DOCX\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"XLSX\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\",\n and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"PPTX\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"—into\n Markdown to facilitate better information processing. However, as some users\n have noted its suboptimal performance in extracting content from PDF files,\n using it for PDFs is not recommended.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 301\n id: '1753425718313'\n position:\n x: -580.684520226929\n y: 372.64040589639495\n positionAbsolute:\n x: -580.684520226929\n y: 372.64040589639495\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n viewport:\n x: 747.6785299994758\n y: 94.6209873206409\n zoom: 0.8152773235379324\n rag_pipeline_variables:\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: paragraph\n label: Parent Mode\n max_length: 48\n options:\n - paragraph\n - full_doc\n placeholder: null\n required: true\n tooltips: 'Parent Mode provides two options: paragraph mode splits text into paragraphs\n as parent chunks for retrieval, while full_doc mode uses the entire document\n as a single parent chunk (text beyond 10,000 tokens will be truncated).'\n type: select\n unit: null\n variable: Parent_Mode\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: \\n\\n\n label: Parent Delimiter\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: A delimiter is the character used to separate text. \\n\\n is recommended\n for splitting the original document into large parent chunks. You can also use\n special delimiters defined by yourself.\n type: text-input\n unit: null\n variable: Parent_Delimiter\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: 1024\n label: Maximum Parent Length\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: number\n unit: tokens\n variable: Maximum_Parent_Length\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: \\n\n label: Child Delimiter\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: A delimiter is the character used to separate text. \\n is recommended\n for splitting parent chunks into small child chunks. You can also use special\n delimiters defined by yourself.\n type: text-input\n unit: null\n variable: Child_Delimiter\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: 256\n label: Maximum Child Length\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: number\n unit: tokens\n variable: Maximum_Child_Length\n", + "graph": { + "edges": [ + { + "data": { + "isInLoop": false, + "sourceType": "tool", + "targetType": "knowledge-index" + }, + "id": "1751336942081-source-1750400198569-target", + "selected": false, + "source": "1751336942081", + "sourceHandle": "source", + "target": "1750400198569", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "tool" + }, + "id": "1750400203722-source-1751359716720-target", + "selected": false, + "source": "1750400203722", + "sourceHandle": "source", + "target": "1751359716720", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "tool", + "targetType": "tool" + }, + "id": "1751359716720-source-1751336942081-target", + "source": "1751359716720", + "sourceHandle": "source", + "target": "1751336942081", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + } + ], + "nodes": [ + { + "data": { + "chunk_structure": "hierarchical_model", + "embedding_model": "jina-embeddings-v2-base-en", + "embedding_model_provider": "langgenius/jina/jina", + "index_chunk_variable_selector": [ + "1751336942081", + "result" + ], + "indexing_technique": "high_quality", + "keyword_number": 10, + "retrieval_model": { + "hybridSearchMode": "weighted_score", + "score_threshold": 0.5, + "score_threshold_enabled": false, + "search_method": "hybrid_search", + "top_k": 3, + "vector_setting": { + "embedding_model_name": "jina-embeddings-v2-base-en", + "embedding_provider_name": "langgenius/jina/jina" + } + }, + "selected": true, + "title": "Knowledge Base", + "type": "knowledge-index" + }, + "height": 114, + "id": "1750400198569", + "position": { + "x": 357.7591396590142, + "y": 282 + }, + "positionAbsolute": { + "x": 357.7591396590142, + "y": 282 + }, + "selected": true, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "File", + "datasource_name": "upload-file", + "datasource_parameters": {}, + "fileExtensions": [ + "html", + "xlsx", + "xls", + "doc", + "docx", + "csv", + "pptx", + "xml", + "ppt", + "txt" + ], + "plugin_id": "langgenius/file", + "provider_name": "file", + "provider_type": "local_file", + "selected": false, + "title": "File", + "type": "datasource" + }, + "height": 52, + "id": "1750400203722", + "position": { + "x": -580.684520226929, + "y": 282 + }, + "positionAbsolute": { + "x": -580.684520226929, + "y": 282 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 316, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Currently we support 4 types of \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Data Sources\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\": File Upload, Online Drive, Online Doc, and Web Crawler. Different types of Data Sources have different input and output types. The output of File Upload and Online Drive are files, while the output of Online Doc and WebCrawler are pages. You can find more Data Sources on our Marketplace.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A Knowledge Pipeline can have multiple data sources. Each data source can be selected more than once with different settings. Each added data source is a tab on the add file interface. However, each time the user can only select one data source to import the file and trigger its subsequent processing.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 374 + }, + "height": 316, + "id": "1751264451381", + "position": { + "x": -1034.2054006208518, + "y": 282 + }, + "positionAbsolute": { + "x": -1034.2054006208518, + "y": 282 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 374 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 260, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Knowledge Pipeline\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" starts with Data Source as the starting node and ends with the knowledge base node. The general steps are: import documents from the data source → use extractor to extract document content → split and clean content into structured chunks → store in the knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The user input variables required by the Knowledge Pipeline node must be predefined and managed via the Input Field section located in the top-right corner of the orchestration canvas. It determines what input fields the end users will see and need to fill in when importing files to the knowledge base through this pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Unique Inputs: Input fields defined here are only available to the selected data source and its downstream nodes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Global Inputs: These input fields are shared across all subsequent nodes after the data source and are typically set during the Process Documents step.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For more information, see \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer\",\"target\":null,\"title\":null,\"url\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\".\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 1182 + }, + "height": 260, + "id": "1751266376760", + "position": { + "x": -580.684520226929, + "y": -21.891401375096322 + }, + "positionAbsolute": { + "x": -580.684520226929, + "y": -21.891401375096322 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 1182 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 417, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A document extractor in Retrieval-Augmented Generation (RAG) is a tool or component that automatically identifies, extracts, and structures text and data from various types of documents—such as PDFs, images, scanned files, handwritten notes, and more—into a format that can be effectively used by language models within RAG Pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Markitdown\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" serves as an excellent alternative to traditional document extraction nodes, offering robust file conversion capabilities within the Dify ecosystem. It leverages MarkItDown's plugin-based architecture to provide seamless conversion of multiple file formats to Markdown.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 241 + }, + "height": 417, + "id": "1751266402561", + "position": { + "x": -266.96080929383595, + "y": 372.64040589639495 + }, + "positionAbsolute": { + "x": -266.96080929383595, + "y": 372.64040589639495 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 241 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 554, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" addresses the dilemma of context and precision by leveraging a two-tier hierarchical approach that effectively balances the trade-off between accurate matching and comprehensive contextual information in RAG systems. \",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Here is the essential mechanism of this structured, two-level information access:\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"- Query Matching with Child Chunks: Small, focused pieces of information, often as concise as a single sentence within a paragraph, are used to match the user's query. These child chunks enable precise and relevant initial retrieval.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"- Contextual Enrichment with Parent Chunks: Larger, encompassing sections—such as a paragraph, a section, or even an entire document—that include the matched child chunks are then retrieved. These parent chunks provide comprehensive context for the Language Model (LLM).\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 554, + "id": "1751266447821", + "position": { + "x": 37.74090119950054, + "y": 372.64040589639495 + }, + "positionAbsolute": { + "x": 37.74090119950054, + "y": 372.64040589639495 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 411, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The knowledge base provides two indexing methods: \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Economical\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", each with different retrieval strategies. High-Quality mode uses embeddings for vectorization and supports vector, full-text, and hybrid retrieval, offering more accurate results but higher resource usage. Economical mode uses keyword-based inverted indexing with no token consumption but lower accuracy; upgrading to High-Quality is possible, but downgrading requires creating a new knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"* Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" only support the \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" indexing method.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 411, + "id": "1751266580099", + "position": { + "x": 357.7591396590142, + "y": 434.3959856026883 + }, + "positionAbsolute": { + "x": 357.7591396590142, + "y": 434.3959856026883 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "is_team_authorization": true, + "output_schema": { + "properties": { + "result": { + "description": "Parent child chunks result", + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "paramSchemas": [ + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "", + "ja_JP": "", + "pt_BR": "", + "zh_Hans": "" + }, + "label": { + "en_US": "Input Content", + "ja_JP": "Input Content", + "pt_BR": "Conteúdo de Entrada", + "zh_Hans": "输入文本" + }, + "llm_description": "The text you want to chunk.", + "max": null, + "min": null, + "name": "input_text", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": "paragraph", + "form": "llm", + "human_description": { + "en_US": "Split text into paragraphs based on separator and maximum chunk length, using split text as parent block or entire document as parent block and directly retrieve.", + "ja_JP": "Split text into paragraphs based on separator and maximum chunk length, using split text as parent block or entire document as parent block and directly retrieve.", + "pt_BR": "Dividir texto em parágrafos com base no separador e no comprimento máximo do bloco, usando o texto dividido como bloco pai ou documento completo como bloco pai e diretamente recuperá-lo.", + "zh_Hans": "根据分隔符和最大块长度将文本拆分为段落,使用拆分文本作为检索的父块或整个文档用作父块并直接检索。" + }, + "label": { + "en_US": "Parent Mode", + "ja_JP": "Parent Mode", + "pt_BR": "Modo Pai", + "zh_Hans": "父块模式" + }, + "llm_description": "Split text into paragraphs based on separator and maximum chunk length, using split text as parent block or entire document as parent block and directly retrieve.", + "max": null, + "min": null, + "name": "parent_mode", + "options": [ + { + "label": { + "en_US": "Paragraph", + "ja_JP": "Paragraph", + "pt_BR": "Parágrafo", + "zh_Hans": "段落" + }, + "value": "paragraph" + }, + { + "label": { + "en_US": "Full Document", + "ja_JP": "Full Document", + "pt_BR": "Documento Completo", + "zh_Hans": "全文" + }, + "value": "full_doc" + } + ], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "select" + }, + { + "auto_generate": null, + "default": "\n\n", + "form": "llm", + "human_description": { + "en_US": "Separator used for chunking", + "ja_JP": "Separator used for chunking", + "pt_BR": "Separador usado para divisão", + "zh_Hans": "用于分块的分隔符" + }, + "label": { + "en_US": "Parent Delimiter", + "ja_JP": "Parent Delimiter", + "pt_BR": "Separador de Pai", + "zh_Hans": "父块分隔符" + }, + "llm_description": "The separator used to split chunks", + "max": null, + "min": null, + "name": "separator", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": 1024, + "form": "llm", + "human_description": { + "en_US": "Maximum length for chunking", + "ja_JP": "Maximum length for chunking", + "pt_BR": "Comprimento máximo para divisão", + "zh_Hans": "用于分块的最大长度" + }, + "label": { + "en_US": "Maximum Parent Chunk Length", + "ja_JP": "Maximum Parent Chunk Length", + "pt_BR": "Comprimento Máximo do Bloco Pai", + "zh_Hans": "最大父块长度" + }, + "llm_description": "Maximum length allowed per chunk", + "max": null, + "min": null, + "name": "max_length", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "number" + }, + { + "auto_generate": null, + "default": ". ", + "form": "llm", + "human_description": { + "en_US": "Separator used for subchunking", + "ja_JP": "Separator used for subchunking", + "pt_BR": "Separador usado para subdivisão", + "zh_Hans": "用于子分块的分隔符" + }, + "label": { + "en_US": "Child Delimiter", + "ja_JP": "Child Delimiter", + "pt_BR": "Separador de Subdivisão", + "zh_Hans": "子分块分隔符" + }, + "llm_description": "The separator used to split subchunks", + "max": null, + "min": null, + "name": "subchunk_separator", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": 512, + "form": "llm", + "human_description": { + "en_US": "Maximum length for subchunking", + "ja_JP": "Maximum length for subchunking", + "pt_BR": "Comprimento máximo para subdivisão", + "zh_Hans": "用于子分块的最大长度" + }, + "label": { + "en_US": "Maximum Child Chunk Length", + "ja_JP": "Maximum Child Chunk Length", + "pt_BR": "Comprimento Máximo de Subdivisão", + "zh_Hans": "子分块最大长度" + }, + "llm_description": "Maximum length allowed per subchunk", + "max": null, + "min": null, + "name": "subchunk_max_length", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "number" + }, + { + "auto_generate": null, + "default": 0, + "form": "llm", + "human_description": { + "en_US": "Whether to remove consecutive spaces, newlines and tabs", + "ja_JP": "Whether to remove consecutive spaces, newlines and tabs", + "pt_BR": "Se deve remover espaços extras no texto", + "zh_Hans": "是否移除文本中的连续空格、换行符和制表符" + }, + "label": { + "en_US": "Replace consecutive spaces, newlines and tabs", + "ja_JP": "Replace consecutive spaces, newlines and tabs", + "pt_BR": "Substituir espaços consecutivos, novas linhas e guias", + "zh_Hans": "替换连续空格、换行符和制表符" + }, + "llm_description": "Whether to remove consecutive spaces, newlines and tabs", + "max": null, + "min": null, + "name": "remove_extra_spaces", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + }, + { + "auto_generate": null, + "default": 0, + "form": "llm", + "human_description": { + "en_US": "Whether to remove URLs and emails in the text", + "ja_JP": "Whether to remove URLs and emails in the text", + "pt_BR": "Se deve remover URLs e e-mails no texto", + "zh_Hans": "是否移除文本中的URL和电子邮件地址" + }, + "label": { + "en_US": "Delete all URLs and email addresses", + "ja_JP": "Delete all URLs and email addresses", + "pt_BR": "Remover todas as URLs e e-mails", + "zh_Hans": "删除所有URL和电子邮件地址" + }, + "llm_description": "Whether to remove URLs and emails in the text", + "max": null, + "min": null, + "name": "remove_urls_emails", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + } + ], + "params": { + "input_text": "", + "max_length": "", + "parent_mode": "", + "remove_extra_spaces": "", + "remove_urls_emails": "", + "separator": "", + "subchunk_max_length": "", + "subchunk_separator": "" + }, + "provider_id": "langgenius/parentchild_chunker/parentchild_chunker", + "provider_name": "langgenius/parentchild_chunker/parentchild_chunker", + "provider_type": "builtin", + "selected": false, + "title": "Parent-child Chunker", + "tool_configurations": {}, + "tool_description": "Process documents into parent-child chunk structures", + "tool_label": "Parent-child Chunker", + "tool_name": "parentchild_chunker", + "tool_node_version": "2", + "tool_parameters": { + "input_text": { + "type": "mixed", + "value": "{{#1751359716720.text#}}" + }, + "max_length": { + "type": "variable", + "value": [ + "rag", + "shared", + "Maximum_Parent_Length" + ] + }, + "parent_mode": { + "type": "variable", + "value": [ + "rag", + "shared", + "Parent_Mode" + ] + }, + "separator": { + "type": "mixed", + "value": "{{#rag.shared.Parent_Delimiter#}}" + }, + "subchunk_max_length": { + "type": "variable", + "value": [ + "rag", + "shared", + "Maximum_Child_Length" + ] + }, + "subchunk_separator": { + "type": "mixed", + "value": "{{#rag.shared.Child_Delimiter#}}" + } + }, + "type": "tool" + }, + "height": 52, + "id": "1751336942081", + "position": { + "x": 37.74090119950054, + "y": 282 + }, + "positionAbsolute": { + "x": 37.74090119950054, + "y": 282 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "is_team_authorization": true, + "output_schema": null, + "paramSchemas": [ + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "Upload files for processing", + "ja_JP": "Upload files for processing", + "pt_BR": "Carregar arquivos para processamento", + "zh_Hans": "上传文件进行处理" + }, + "label": { + "en_US": "Files", + "ja_JP": "Files", + "pt_BR": "Arquivos", + "zh_Hans": "文件" + }, + "llm_description": "", + "max": null, + "min": null, + "name": "files", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "files" + } + ], + "params": { + "files": "" + }, + "provider_id": "yevanchen/markitdown/markitdown", + "provider_name": "yevanchen/markitdown/markitdown", + "provider_type": "builtin", + "selected": false, + "title": "markitdown", + "tool_configurations": {}, + "tool_description": "Python tool for converting files and office documents to Markdown.", + "tool_label": "markitdown", + "tool_name": "markitdown", + "tool_node_version": "2", + "tool_parameters": { + "files": { + "type": "variable", + "value": [ + "1750400203722", + "file" + ] + } + }, + "type": "tool" + }, + "height": 52, + "id": "1751359716720", + "position": { + "x": -266.96080929383595, + "y": 282 + }, + "positionAbsolute": { + "x": -266.96080929383595, + "y": 282 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 301, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"MarkItDown\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" is recommended for converting and handling a wide range of file formats, particularly for transforming content into Markdown. It works especially well for converting native Office files—such as \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"DOCX\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"XLSX\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"PPTX\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"—into Markdown to facilitate better information processing. However, as some users have noted its suboptimal performance in extracting content from PDF files, using it for PDFs is not recommended.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 301, + "id": "1753425718313", + "position": { + "x": -580.684520226929, + "y": 372.64040589639495 + }, + "positionAbsolute": { + "x": -580.684520226929, + "y": 372.64040589639495 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + } + ], + "viewport": { + "x": 747.6785299994758, + "y": 94.6209873206409, + "zoom": 0.8152773235379324 + } + }, + "icon_info": { + "icon": "9d658c3a-b22f-487d-8223-db51e9012505", + "icon_background": null, + "icon_type": "image", + "icon_url": "data:image/png;base64,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" + }, + "id": "982d1788-837a-40c8-b7de-d37b09a9b2bc", + "name": "Convert to Markdown", + "icon": { + "icon": "9d658c3a-b22f-487d-8223-db51e9012505", + "icon_background": null, + "icon_type": "image", + "icon_url": "data:image/png;base64,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" + }, + "language": "zh-Hans", + "position": 4 + }, + "98374ab6-9dcd-434d-983e-268bec156b43": { + "chunk_structure": "qa_model", + "description": "This template is designed to use LLM to extract key information from the input document and generate Q&A pairs indexed by questions, enabling efficient retrieval of relevant answers based on query similarity.", + "export_data": "dependencies:\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/dify_extractor:0.0.5@ba7e2fd9165eda73bfcc68e31a108855197e88706e5556c058e0777ab08409b3\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/notion_datasource:0.1.12@2855c4a7cffd3311118ebe70f095e546f99935e47f12c841123146f728534f55\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/jina_datasource:0.0.5@75942f5bbde870ad28e0345ff5ebf54ebd3aec63f0e66344ef76b88cf06b85c3\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/google_drive:0.1.6@4bc0cf8f8979ebd7321b91506b4bc8f090b05b769b5d214f2da4ce4c04ce30bd\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/jina:0.0.8@d3a6766fbb80890d73fea7ea04803f3e1702c6e6bd621aafb492b86222a193dd\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/qa_chunk:0.0.8@1fed9644646bdd48792cdf5a1d559a3df336bd3a8edb0807227499fb56dce3af\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: bowenliang123/md_exporter:2.0.0@13e1aca1995328e41c080ff9f7f6d898df60ff74a3f4d98d6de4b18ab5b92c2e\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/firecrawl_datasource:0.2.4@37b490ebc52ac30d1c6cbfa538edcddddcfed7d5f5de58982edbd4e2094eb6e2\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius/anthropic:0.2.0@a776815b091c81662b2b54295ef4b8a54b5533c2ec1c66c7c8f2feea724f3248\nkind: rag_pipeline\nrag_pipeline:\n description: ''\n icon: 2b887f89-b6c9-4288-be43-635fee45216b\n icon_background: '#FFEAD5'\n icon_type: image\n icon_url: data:image/png;base64,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\n name: LLM Generated Q&A\nversion: 0.1.0\nworkflow:\n conversation_variables: []\n environment_variables: []\n features: {}\n graph:\n edges:\n - data:\n isInLoop: false\n sourceType: tool\n targetType: variable-aggregator\n id: 1750836391776-source-1753346901505-target\n selected: false\n source: '1750836391776'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: document-extractor\n targetType: variable-aggregator\n id: 1753349228522-source-1753346901505-target\n selected: false\n source: '1753349228522'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1754023419266-source-1753346901505-target\n selected: false\n source: '1754023419266'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1756442998557-source-1756442986174-target\n selected: false\n source: '1756442998557'\n sourceHandle: source\n target: '1756442986174'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInIteration: false\n isInLoop: false\n sourceType: variable-aggregator\n targetType: if-else\n id: 1756442986174-source-1756443014860-target\n selected: false\n source: '1756442986174'\n sourceHandle: source\n target: '1756443014860'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1750836380067-source-1756442986174-target\n selected: false\n source: '1750836380067'\n sourceHandle: source\n target: '1756442986174'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: if-else\n targetType: tool\n id: 1756443014860-true-1750836391776-target\n selected: false\n source: '1756443014860'\n sourceHandle: 'true'\n target: '1750836391776'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: if-else\n targetType: document-extractor\n id: 1756443014860-false-1753349228522-target\n selected: false\n source: '1756443014860'\n sourceHandle: 'false'\n target: '1753349228522'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1756896212061-source-1753346901505-target\n source: '1756896212061'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: variable-aggregator\n id: 1756907397615-source-1753346901505-target\n source: '1756907397615'\n sourceHandle: source\n target: '1753346901505'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInIteration: false\n isInLoop: false\n sourceType: variable-aggregator\n targetType: llm\n id: 1753346901505-source-1756912504019-target\n source: '1753346901505'\n sourceHandle: source\n target: '1756912504019'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInIteration: false\n isInLoop: false\n sourceType: llm\n targetType: tool\n id: 1756912504019-source-1756912537172-target\n source: '1756912504019'\n sourceHandle: source\n target: '1756912537172'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: tool\n targetType: tool\n id: 1756912537172-source-1756912274158-target\n source: '1756912537172'\n sourceHandle: source\n target: '1756912274158'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: tool\n targetType: knowledge-index\n id: 1756912274158-source-1750836372241-target\n source: '1756912274158'\n sourceHandle: source\n target: '1750836372241'\n targetHandle: target\n type: custom\n zIndex: 0\n nodes:\n - data:\n chunk_structure: qa_model\n embedding_model: jina-embeddings-v2-base-en\n embedding_model_provider: langgenius/jina/jina\n index_chunk_variable_selector:\n - '1756912274158'\n - result\n indexing_technique: high_quality\n keyword_number: 10\n retrieval_model:\n hybridSearchMode: weighted_score\n reranking_enable: false\n score_threshold: 0.5\n score_threshold_enabled: false\n search_method: semantic_search\n top_k: 3\n vector_setting:\n embedding_model_name: jina-embeddings-v2-base-en\n embedding_provider_name: langgenius/jina/jina\n selected: false\n title: Knowledge Base\n type: knowledge-index\n height: 114\n id: '1750836372241'\n position:\n x: 1150.8369138826617\n y: 326\n positionAbsolute:\n x: 1150.8369138826617\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: File\n datasource_name: upload-file\n datasource_parameters: {}\n fileExtensions:\n - txt\n - markdown\n - mdx\n - pdf\n - html\n - xlsx\n - xls\n - vtt\n - properties\n - doc\n - docx\n - csv\n - eml\n - msg\n - pptx\n - xml\n - epub\n - ppt\n - md\n plugin_id: langgenius/file\n provider_name: file\n provider_type: local_file\n selected: false\n title: File\n type: datasource\n height: 52\n id: '1750836380067'\n position:\n x: -1371.6520723158733\n y: 224.87938381325645\n positionAbsolute:\n x: -1371.6520723158733\n y: 224.87938381325645\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n is_team_authorization: true\n output_schema:\n properties:\n documents:\n description: the documents extracted from the file\n items:\n type: object\n type: array\n images:\n description: The images extracted from the file\n items:\n type: object\n type: array\n type: object\n paramSchemas:\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg,\n jpeg)\n ja_JP: the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg,\n jpeg)\n pt_BR: o arquivo a ser analisado (suporta pdf, ppt, pptx, doc, docx, png,\n jpg, jpeg)\n zh_Hans: 用于解析的文件(支持 pdf, ppt, pptx, doc, docx, png, jpg, jpeg)\n label:\n en_US: file\n ja_JP: file\n pt_BR: file\n zh_Hans: file\n llm_description: the file to be parsed (support pdf, ppt, pptx, doc, docx,\n png, jpg, jpeg)\n max: null\n min: null\n name: file\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: file\n params:\n file: ''\n provider_id: langgenius/dify_extractor/dify_extractor\n provider_name: langgenius/dify_extractor/dify_extractor\n provider_type: builtin\n selected: false\n title: Dify Extractor\n tool_configurations: {}\n tool_description: Dify Extractor\n tool_label: Dify Extractor\n tool_name: dify_extractor\n tool_node_version: '2'\n tool_parameters:\n file:\n type: variable\n value:\n - '1756442986174'\n - output\n type: tool\n height: 52\n id: '1750836391776'\n position:\n x: -417.5334221022782\n y: 268.1692071834485\n positionAbsolute:\n x: -417.5334221022782\n y: 268.1692071834485\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n author: TenTen\n desc: ''\n height: 252\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Knowledge\n Pipeline\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\n starts with Data Source as the starting node and ends with the knowledge\n base node. The general steps are: import documents from the data source\n → use extractor to extract document content → split and clean content into\n structured chunks → store in the knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n user input variables required by the Knowledge Pipeline node must be predefined\n and managed via the Input Field section located in the top-right corner\n of the orchestration canvas. It determines what input fields the end users\n will see and need to fill in when importing files to the knowledge base\n through this pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Unique\n Inputs: Input fields defined here are only available to the selected data\n source and its downstream nodes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Global\n Inputs: These input fields are shared across all subsequent nodes after\n the data source and are typically set during the Process Documents step.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For\n more information, see \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer\",\"target\":null,\"title\":null,\"url\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\".\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 1124\n height: 252\n id: '1751252161631'\n position:\n x: -1371.6520723158733\n y: -123.758428116601\n positionAbsolute:\n x: -1371.6520723158733\n y: -123.758428116601\n selected: true\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 1124\n - data:\n author: TenTen\n desc: ''\n height: 388\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Currently\n we support 4 types of \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Data\n Sources\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\":\n File Upload, Online Drive, Online Doc, and Web Crawler. Different types\n of Data Sources have different input and output types. The output of File\n Upload and Online Drive are files, while the output of Online Doc and WebCrawler\n are pages. You can find more Data Sources on our Marketplace.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n Knowledge Pipeline can have multiple data sources. Each data source can\n be selected more than once with different settings. Each added data source\n is a tab on the add file interface. However, each time the user can only\n select one data source to import the file and trigger its subsequent processing.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 285\n height: 388\n id: '1751252440357'\n position:\n x: -1723.9942193415582\n y: 224.87938381325645\n positionAbsolute:\n x: -1723.9942193415582\n y: 224.87938381325645\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 285\n - data:\n author: TenTen\n desc: ''\n height: 430\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n document extractor in Retrieval-Augmented Generation (RAG) is a tool or\n component that automatically identifies, extracts, and structures text and\n data from various types of documents—such as PDFs, images, scanned files,\n handwritten notes, and more—into a format that can be effectively used by\n language models within RAG Pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Dify\n Extractor\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" is\n a built-in document parser developed by Dify. It supports a wide range of\n common file formats and offers specialized handling for certain formats,\n such as \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":16,\"mode\":\"normal\",\"style\":\"\",\"text\":\".docx\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\".\n In addition to text extraction, it can extract images embedded within documents,\n store them, and return their accessible URLs.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 430\n id: '1751253091602'\n position:\n x: -417.5334221022782\n y: 546.5283142529594\n positionAbsolute:\n x: -417.5334221022782\n y: 546.5283142529594\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n author: TenTen\n desc: ''\n height: 336\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A\n Processor\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" extracts\n specified columns from tables to generate structured Q&A pairs. Users can\n independently designate which columns to use for questions and which for\n answers.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"These\n pairs are indexed by the question field, so user queries are matched directly\n against the questions to retrieve the corresponding answers. This \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q-to-Q\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" matching\n strategy improves clarity and precision, especially in scenarios involving\n high-frequency or highly similar user questions.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 336\n id: '1751253953926'\n position:\n x: 794.2003154321724\n y: 417.25474169825833\n positionAbsolute:\n x: 794.2003154321724\n y: 417.25474169825833\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n author: TenTen\n desc: ''\n height: 410\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n knowledge base provides two indexing methods: \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Economical\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\",\n each with different retrieval strategies. High-Quality mode uses embeddings\n for vectorization and supports vector, full-text, and hybrid retrieval,\n offering more accurate results but higher resource usage. Economical mode\n uses keyword-based inverted indexing with no token consumption but lower\n accuracy; upgrading to High-Quality is possible, but downgrading requires\n creating a new knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"*\n Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A\n Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" only\n support the \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" indexing\n method.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 410\n id: '1751254117904'\n position:\n x: 1150.8369138826617\n y: 475.88970282568215\n positionAbsolute:\n x: 1150.8369138826617\n y: 475.88970282568215\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n output_type: string\n selected: false\n title: Variable Aggregator\n type: variable-aggregator\n variables:\n - - '1750836391776'\n - text\n - - '1753349228522'\n - text\n - - '1754023419266'\n - content\n - - '1756896212061'\n - content\n height: 187\n id: '1753346901505'\n position:\n x: -117.24452412456148\n y: 326\n positionAbsolute:\n x: -117.24452412456148\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n is_array_file: false\n selected: false\n title: Doc Extractor\n type: document-extractor\n variable_selector:\n - '1756442986174'\n - output\n height: 92\n id: '1753349228522'\n position:\n x: -417.5334221022782\n y: 417.25474169825833\n positionAbsolute:\n x: -417.5334221022782\n y: 417.25474169825833\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: Notion\n datasource_name: notion_datasource\n datasource_parameters: {}\n plugin_id: langgenius/notion_datasource\n provider_name: notion_datasource\n provider_type: online_document\n selected: false\n title: Notion\n type: datasource\n height: 52\n id: '1754023419266'\n position:\n x: -1369.6904698303242\n y: 440.01452302398053\n positionAbsolute:\n x: -1369.6904698303242\n y: 440.01452302398053\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n output_type: file\n selected: false\n title: Variable Aggregator\n type: variable-aggregator\n variables:\n - - '1750836380067'\n - file\n - - '1756442998557'\n - file\n height: 135\n id: '1756442986174'\n position:\n x: -1067.06980963949\n y: 236.10252072775984\n positionAbsolute:\n x: -1067.06980963949\n y: 236.10252072775984\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: Google Drive\n datasource_name: google_drive\n datasource_parameters: {}\n plugin_id: langgenius/google_drive\n provider_name: google_drive\n provider_type: online_drive\n selected: false\n title: Google Drive\n type: datasource\n height: 52\n id: '1756442998557'\n position:\n x: -1371.6520723158733\n y: 326\n positionAbsolute:\n x: -1371.6520723158733\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n cases:\n - case_id: 'true'\n conditions:\n - comparison_operator: is\n id: 1581dd11-7898-41f4-962f-937283ba7e01\n value: .xlsx\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 92abb46d-d7e4-46e7-a5e1-8a29bb45d528\n value: .xls\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 1dde5ae7-754d-4e83-96b2-fe1f02995d8b\n value: .md\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 7e1a80e5-c32a-46a4-8f92-8912c64972aa\n value: .markdown\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 53abfe95-c7d0-4f63-ad37-17d425d25106\n value: .mdx\n varType: string\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 436877b8-8c0a-4cc6-9565-92754db08571\n value: .html\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 5e3e375e-750b-4204-8ac3-9a1174a5ab7c\n value: .htm\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 1a84a784-a797-4f96-98a0-33a9b48ceb2b\n value: .docx\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 62d11445-876a-493f-85d3-8fc020146bdd\n value: .csv\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n - comparison_operator: is\n id: 02c4bce8-7668-4ccd-b750-4281f314b231\n value: .txt\n varType: file\n variable_selector:\n - '1756442986174'\n - output\n - extension\n id: 'true'\n logical_operator: or\n selected: false\n title: IF/ELSE\n type: if-else\n height: 358\n id: '1756443014860'\n position:\n x: -733.5977815139424\n y: 236.10252072775984\n positionAbsolute:\n x: -733.5977815139424\n y: 236.10252072775984\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: Jina Reader\n datasource_name: jina_reader\n datasource_parameters:\n crawl_sub_pages:\n type: variable\n value:\n - rag\n - '1756896212061'\n - jina_subpages\n limit:\n type: variable\n value:\n - rag\n - '1756896212061'\n - jina_limit\n url:\n type: mixed\n value: '{{#rag.1756896212061.jina_url#}}'\n use_sitemap:\n type: variable\n value:\n - rag\n - '1756896212061'\n - jian_sitemap\n plugin_id: langgenius/jina_datasource\n provider_name: jinareader\n provider_type: website_crawl\n selected: false\n title: Jina Reader\n type: datasource\n height: 52\n id: '1756896212061'\n position:\n x: -1371.6520723158733\n y: 538.9988445953813\n positionAbsolute:\n x: -1371.6520723158733\n y: 538.9988445953813\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: Firecrawl\n datasource_name: crawl\n datasource_parameters:\n crawl_subpages:\n type: variable\n value:\n - rag\n - '1756907397615'\n - firecrawl_subpages\n exclude_paths:\n type: mixed\n value: '{{#rag.1756907397615.exclude_paths#}}'\n include_paths:\n type: mixed\n value: '{{#rag.1756907397615.include_paths#}}'\n limit:\n type: variable\n value:\n - rag\n - '1756907397615'\n - max_pages\n max_depth:\n type: variable\n value:\n - rag\n - '1756907397615'\n - max_depth\n only_main_content:\n type: variable\n value:\n - rag\n - '1756907397615'\n - main_content\n url:\n type: mixed\n value: '{{#rag.1756907397615.firecrawl_url1#}}'\n plugin_id: langgenius/firecrawl_datasource\n provider_name: firecrawl\n provider_type: website_crawl\n selected: false\n title: Firecrawl\n type: datasource\n height: 52\n id: '1756907397615'\n position:\n x: -1371.6520723158733\n y: 644.3296146102903\n positionAbsolute:\n x: -1371.6520723158733\n y: 644.3296146102903\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n is_team_authorization: true\n paramSchemas:\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: The file you want to extract QA from.\n ja_JP: The file you want to extract QA from.\n pt_BR: The file you want to extract QA from.\n zh_Hans: 你想要提取 QA 的文件。\n label:\n en_US: Input File\n ja_JP: Input File\n pt_BR: Input File\n zh_Hans: 输入文件\n llm_description: The file you want to extract QA from.\n max: null\n min: null\n name: input_file\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: file\n - auto_generate: null\n default: 0\n form: llm\n human_description:\n en_US: Column number for question.\n ja_JP: Column number for question.\n pt_BR: Column number for question.\n zh_Hans: 问题所在的列。\n label:\n en_US: Column number for question\n ja_JP: Column number for question\n pt_BR: Column number for question\n zh_Hans: 问题所在的列\n llm_description: The column number for question, the format of the column\n number must be an integer.\n max: null\n min: null\n name: question_column\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: number\n - auto_generate: null\n default: 1\n form: llm\n human_description:\n en_US: Column number for answer.\n ja_JP: Column number for answer.\n pt_BR: Column number for answer.\n zh_Hans: 答案所在的列。\n label:\n en_US: Column number for answer\n ja_JP: Column number for answer\n pt_BR: Column number for answer\n zh_Hans: 答案所在的列\n llm_description: The column number for answer, the format of the column\n number must be an integer.\n max: null\n min: null\n name: answer_column\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: number\n params:\n answer_column: ''\n input_file: ''\n question_column: ''\n provider_id: langgenius/qa_chunk/qa_chunk\n provider_name: langgenius/qa_chunk/qa_chunk\n provider_type: builtin\n selected: false\n title: Q&A Processor\n tool_configurations: {}\n tool_description: A tool for QA chunking mode.\n tool_label: QA Chunk\n tool_name: qa_chunk\n tool_node_version: '2'\n tool_parameters:\n answer_column:\n type: constant\n value: 2\n input_file:\n type: variable\n value:\n - '1756912537172'\n - files\n question_column:\n type: constant\n value: 1\n type: tool\n height: 52\n id: '1756912274158'\n position:\n x: 794.2003154321724\n y: 326\n positionAbsolute:\n x: 794.2003154321724\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n context:\n enabled: false\n variable_selector: []\n model:\n completion_params:\n temperature: 0.7\n mode: chat\n name: claude-3-5-sonnet-20240620\n provider: langgenius/anthropic/anthropic\n prompt_template:\n - id: 7f8105aa-a37d-4f5a-b581-babeeb31e833\n role: system\n text: '\n\n Generate a list of Q&A pairs based on {{#1753346901505.output#}}. Present\n the output as a Markdown table, where the first column is serial number,\n the second column is Question, and the third column is Question. Ensure\n that the table format can be easily converted into a CSV file.\n\n Example Output Format:\n\n | Index | Question | Answer |\n\n |-------|-----------|--------|\n\n | 1 | What is the main purpose of the document? | The document explains\n the company''s new product launch strategy. ![image](https://cloud.dify.ai/files/xxxxxxx)\n |\n\n | 2 || When will the product be launched? | The product will be launched\n in Q3 of this year. |\n\n\n Instructions:\n\n Read and understand the input text.\n\n Extract key information and generate meaningful questions and answers.\n\n Preserve any ![image] URLs from the input text in the answers.\n\n Keep questions concise and specific.\n\n Ensure answers are accurate, self-contained, and clear.\n\n Output only the Markdown table without any extra explanation.'\n selected: false\n title: LLM\n type: llm\n vision:\n enabled: false\n height: 88\n id: '1756912504019'\n position:\n x: 184.46657789772178\n y: 326\n positionAbsolute:\n x: 184.46657789772178\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n is_team_authorization: true\n paramSchemas:\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: Markdown text\n ja_JP: Markdown text\n pt_BR: Markdown text\n zh_Hans: Markdown格式文本,必须为Markdown表格格式\n label:\n en_US: Markdown text\n ja_JP: Markdown text\n pt_BR: Markdown text\n zh_Hans: Markdown格式文本\n llm_description: ''\n max: null\n min: null\n name: md_text\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: Filename of the output file\n ja_JP: Filename of the output file\n pt_BR: Filename of the output file\n zh_Hans: 输出文件名\n label:\n en_US: Filename of the output file\n ja_JP: Filename of the output file\n pt_BR: Filename of the output file\n zh_Hans: 输出文件名\n llm_description: ''\n max: null\n min: null\n name: output_filename\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: string\n params:\n md_text: ''\n output_filename: ''\n provider_id: bowenliang123/md_exporter/md_exporter\n provider_name: bowenliang123/md_exporter/md_exporter\n provider_type: builtin\n selected: false\n title: Markdown to CSV file\n tool_configurations: {}\n tool_description: Generate CSV file from Markdown text\n tool_label: Markdown to CSV file\n tool_name: md_to_csv\n tool_node_version: '2'\n tool_parameters:\n md_text:\n type: mixed\n value: '{{#1756912504019.text#}}'\n output_filename:\n type: mixed\n value: LLM Generated Q&A\n type: tool\n height: 52\n id: '1756912537172'\n position:\n x: 484.75465419110174\n y: 326\n positionAbsolute:\n x: 484.75465419110174\n y: 326\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n author: TenTen\n desc: ''\n height: 174\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n LLM-generated Q&A pairs are designed to extract key information from the\n input text and present it in a structured, easy-to-use format. Each pair\n consists of a concise question that captures an important point or detail,\n and a clear, self-contained answer that provides the relevant information\n without requiring additional context. The output is formatted as a Markdown\n table with three columns—Index, Question, and Answer—so that it can be easily\n converted into a CSV file for further processing. \",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 528\n height: 174\n id: '1756912556940'\n position:\n x: 184.46657789772178\n y: 462.64405262857747\n positionAbsolute:\n x: 184.46657789772178\n y: 462.64405262857747\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 528\n viewport:\n x: 1149.1394490177502\n y: 317.2338302699771\n zoom: 0.4911032886685182\n rag_pipeline_variables:\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1753688365254'\n default_value: null\n label: URL\n max_length: 256\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: text-input\n unit: null\n variable: jina_reader_url\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1753688365254'\n default_value: 10\n label: Limit\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: number\n unit: pages\n variable: jina_reader_imit\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1753688365254'\n default_value: true\n label: Crawl sub-pages\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: checkbox\n unit: null\n variable: Crawl_sub_pages_2\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1753688365254'\n default_value: true\n label: Use sitemap\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: Use_sitemap\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756896212061'\n default_value: null\n label: URL\n max_length: 256\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: text-input\n unit: null\n variable: jina_url\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756896212061'\n default_value: 10\n label: Limit\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: number\n unit: pages\n variable: jina_limit\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756896212061'\n default_value: true\n label: Use sitemap\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: Follow the sitemap to crawl the site. If not, Jina Reader will crawl\n iteratively based on page relevance, yielding fewer but higher-quality pages.\n type: checkbox\n unit: null\n variable: jian_sitemap\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756896212061'\n default_value: true\n label: Crawl subpages\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: jina_subpages\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: null\n label: URL\n max_length: 256\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: text-input\n unit: null\n variable: firecrawl_url1\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: true\n label: firecrawl_subpages\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: firecrawl_subpages\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: null\n label: Exclude paths\n max_length: 256\n options: []\n placeholder: blog/*,/about/*\n required: false\n tooltips: null\n type: text-input\n unit: null\n variable: exclude_paths\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: null\n label: include_paths\n max_length: 256\n options: []\n placeholder: articles/*\n required: false\n tooltips: null\n type: text-input\n unit: null\n variable: include_paths\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: 0\n label: Max depth\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: Maximum depth to crawl relative to the entered URL. Depth 0 just scrapes\n the page of the entered url, depth 1 scrapes the url and everything after enteredURL\n + one /, and so on.\n type: number\n unit: null\n variable: max_depth\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: 10\n label: Limit\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: number\n unit: null\n variable: max_pages\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: true\n label: Extract only main content (no headers, navs, footers, etc.)\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: main_content\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: '1756907397615'\n default_value: null\n label: depthtest\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: number\n unit: null\n variable: depthtest\n", + "graph": { + "edges": [ + { + "data": { + "isInLoop": false, + "sourceType": "tool", + "targetType": "variable-aggregator" + }, + "id": "1750836391776-source-1753346901505-target", + "selected": false, + "source": "1750836391776", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "document-extractor", + "targetType": "variable-aggregator" + }, + "id": "1753349228522-source-1753346901505-target", + "selected": false, + "source": "1753349228522", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1754023419266-source-1753346901505-target", + "selected": false, + "source": "1754023419266", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1756442998557-source-1756442986174-target", + "selected": false, + "source": "1756442998557", + "sourceHandle": "source", + "target": "1756442986174", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInIteration": false, + "isInLoop": false, + "sourceType": "variable-aggregator", + "targetType": "if-else" + }, + "id": "1756442986174-source-1756443014860-target", + "selected": false, + "source": "1756442986174", + "sourceHandle": "source", + "target": "1756443014860", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1750836380067-source-1756442986174-target", + "selected": false, + "source": "1750836380067", + "sourceHandle": "source", + "target": "1756442986174", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "if-else", + "targetType": "tool" + }, + "id": "1756443014860-true-1750836391776-target", + "selected": false, + "source": "1756443014860", + "sourceHandle": "true", + "target": "1750836391776", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "if-else", + "targetType": "document-extractor" + }, + "id": "1756443014860-false-1753349228522-target", + "selected": false, + "source": "1756443014860", + "sourceHandle": "false", + "target": "1753349228522", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1756896212061-source-1753346901505-target", + "source": "1756896212061", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "variable-aggregator" + }, + "id": "1756907397615-source-1753346901505-target", + "source": "1756907397615", + "sourceHandle": "source", + "target": "1753346901505", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInIteration": false, + "isInLoop": false, + "sourceType": "variable-aggregator", + "targetType": "llm" + }, + "id": "1753346901505-source-1756912504019-target", + "source": "1753346901505", + "sourceHandle": "source", + "target": "1756912504019", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInIteration": false, + "isInLoop": false, + "sourceType": "llm", + "targetType": "tool" + }, + "id": "1756912504019-source-1756912537172-target", + "source": "1756912504019", + "sourceHandle": "source", + "target": "1756912537172", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "tool", + "targetType": "tool" + }, + "id": "1756912537172-source-1756912274158-target", + "source": "1756912537172", + "sourceHandle": "source", + "target": "1756912274158", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "tool", + "targetType": "knowledge-index" + }, + "id": "1756912274158-source-1750836372241-target", + "source": "1756912274158", + "sourceHandle": "source", + "target": "1750836372241", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + } + ], + "nodes": [ + { + "data": { + "chunk_structure": "qa_model", + "embedding_model": "jina-embeddings-v2-base-en", + "embedding_model_provider": "langgenius/jina/jina", + "index_chunk_variable_selector": [ + "1756912274158", + "result" + ], + "indexing_technique": "high_quality", + "keyword_number": 10, + "retrieval_model": { + "hybridSearchMode": "weighted_score", + "reranking_enable": false, + "score_threshold": 0.5, + "score_threshold_enabled": false, + "search_method": "semantic_search", + "top_k": 3, + "vector_setting": { + "embedding_model_name": "jina-embeddings-v2-base-en", + "embedding_provider_name": "langgenius/jina/jina" + } + }, + "selected": false, + "title": "Knowledge Base", + "type": "knowledge-index" + }, + "height": 114, + "id": "1750836372241", + "position": { + "x": 1150.8369138826617, + "y": 326 + }, + "positionAbsolute": { + "x": 1150.8369138826617, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "File", + "datasource_name": "upload-file", + "datasource_parameters": {}, + "fileExtensions": [ + "txt", + "markdown", + "mdx", + "pdf", + "html", + "xlsx", + "xls", + "vtt", + "properties", + "doc", + "docx", + "csv", + "eml", + "msg", + "pptx", + "xml", + "epub", + "ppt", + "md" + ], + "plugin_id": "langgenius/file", + "provider_name": "file", + "provider_type": "local_file", + "selected": false, + "title": "File", + "type": "datasource" + }, + "height": 52, + "id": "1750836380067", + "position": { + "x": -1371.6520723158733, + "y": 224.87938381325645 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": 224.87938381325645 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "is_team_authorization": true, + "output_schema": { + "properties": { + "documents": { + "description": "the documents extracted from the file", + "items": { + "type": "object" + }, + "type": "array" + }, + "images": { + "description": "The images extracted from the file", + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "paramSchemas": [ + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "ja_JP": "the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "pt_BR": "o arquivo a ser analisado (suporta pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "zh_Hans": "用于解析的文件(支持 pdf, ppt, pptx, doc, docx, png, jpg, jpeg)" + }, + "label": { + "en_US": "file", + "ja_JP": "file", + "pt_BR": "file", + "zh_Hans": "file" + }, + "llm_description": "the file to be parsed (support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "max": null, + "min": null, + "name": "file", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "file" + } + ], + "params": { + "file": "" + }, + "provider_id": "langgenius/dify_extractor/dify_extractor", + "provider_name": "langgenius/dify_extractor/dify_extractor", + "provider_type": "builtin", + "selected": false, + "title": "Dify Extractor", + "tool_configurations": {}, + "tool_description": "Dify Extractor", + "tool_label": "Dify Extractor", + "tool_name": "dify_extractor", + "tool_node_version": "2", + "tool_parameters": { + "file": { + "type": "variable", + "value": [ + "1756442986174", + "output" + ] + } + }, + "type": "tool" + }, + "height": 52, + "id": "1750836391776", + "position": { + "x": -417.5334221022782, + "y": 268.1692071834485 + }, + "positionAbsolute": { + "x": -417.5334221022782, + "y": 268.1692071834485 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 252, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Knowledge Pipeline\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" starts with Data Source as the starting node and ends with the knowledge base node. The general steps are: import documents from the data source → use extractor to extract document content → split and clean content into structured chunks → store in the knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The user input variables required by the Knowledge Pipeline node must be predefined and managed via the Input Field section located in the top-right corner of the orchestration canvas. It determines what input fields the end users will see and need to fill in when importing files to the knowledge base through this pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Unique Inputs: Input fields defined here are only available to the selected data source and its downstream nodes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Global Inputs: These input fields are shared across all subsequent nodes after the data source and are typically set during the Process Documents step.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For more information, see \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer\",\"target\":null,\"title\":null,\"url\":\"https://docs.dify.ai/en/guides/knowledge-base/knowledge-pipeline/knowledge-pipeline-orchestration\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\".\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 1124 + }, + "height": 252, + "id": "1751252161631", + "position": { + "x": -1371.6520723158733, + "y": -123.758428116601 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": -123.758428116601 + }, + "selected": true, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 1124 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 388, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Currently we support 4 types of \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Data Sources\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\": File Upload, Online Drive, Online Doc, and Web Crawler. Different types of Data Sources have different input and output types. The output of File Upload and Online Drive are files, while the output of Online Doc and WebCrawler are pages. You can find more Data Sources on our Marketplace.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A Knowledge Pipeline can have multiple data sources. Each data source can be selected more than once with different settings. Each added data source is a tab on the add file interface. However, each time the user can only select one data source to import the file and trigger its subsequent processing.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 285 + }, + "height": 388, + "id": "1751252440357", + "position": { + "x": -1723.9942193415582, + "y": 224.87938381325645 + }, + "positionAbsolute": { + "x": -1723.9942193415582, + "y": 224.87938381325645 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 285 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 430, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A document extractor in Retrieval-Augmented Generation (RAG) is a tool or component that automatically identifies, extracts, and structures text and data from various types of documents—such as PDFs, images, scanned files, handwritten notes, and more—into a format that can be effectively used by language models within RAG Pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Dify Extractor\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" is a built-in document parser developed by Dify. It supports a wide range of common file formats and offers specialized handling for certain formats, such as \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":16,\"mode\":\"normal\",\"style\":\"\",\"text\":\".docx\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\". In addition to text extraction, it can extract images embedded within documents, store them, and return their accessible URLs.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 430, + "id": "1751253091602", + "position": { + "x": -417.5334221022782, + "y": 546.5283142529594 + }, + "positionAbsolute": { + "x": -417.5334221022782, + "y": 546.5283142529594 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 336, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A Processor\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" extracts specified columns from tables to generate structured Q&A pairs. Users can independently designate which columns to use for questions and which for answers.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"These pairs are indexed by the question field, so user queries are matched directly against the questions to retrieve the corresponding answers. This \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q-to-Q\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" matching strategy improves clarity and precision, especially in scenarios involving high-frequency or highly similar user questions.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 336, + "id": "1751253953926", + "position": { + "x": 794.2003154321724, + "y": 417.25474169825833 + }, + "positionAbsolute": { + "x": 794.2003154321724, + "y": 417.25474169825833 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 410, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The knowledge base provides two indexing methods: \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Economical\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", each with different retrieval strategies. High-Quality mode uses embeddings for vectorization and supports vector, full-text, and hybrid retrieval, offering more accurate results but higher resource usage. Economical mode uses keyword-based inverted indexing with no token consumption but lower accuracy; upgrading to High-Quality is possible, but downgrading requires creating a new knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"* Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" and \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" only support the \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" indexing method.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 410, + "id": "1751254117904", + "position": { + "x": 1150.8369138826617, + "y": 475.88970282568215 + }, + "positionAbsolute": { + "x": 1150.8369138826617, + "y": 475.88970282568215 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "output_type": "string", + "selected": false, + "title": "Variable Aggregator", + "type": "variable-aggregator", + "variables": [ + [ + "1750836391776", + "text" + ], + [ + "1753349228522", + "text" + ], + [ + "1754023419266", + "content" + ], + [ + "1756896212061", + "content" + ] + ] + }, + "height": 187, + "id": "1753346901505", + "position": { + "x": -117.24452412456148, + "y": 326 + }, + "positionAbsolute": { + "x": -117.24452412456148, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "is_array_file": false, + "selected": false, + "title": "Doc Extractor", + "type": "document-extractor", + "variable_selector": [ + "1756442986174", + "output" + ] + }, + "height": 92, + "id": "1753349228522", + "position": { + "x": -417.5334221022782, + "y": 417.25474169825833 + }, + "positionAbsolute": { + "x": -417.5334221022782, + "y": 417.25474169825833 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "Notion", + "datasource_name": "notion_datasource", + "datasource_parameters": {}, + "plugin_id": "langgenius/notion_datasource", + "provider_name": "notion_datasource", + "provider_type": "online_document", + "selected": false, + "title": "Notion", + "type": "datasource" + }, + "height": 52, + "id": "1754023419266", + "position": { + "x": -1369.6904698303242, + "y": 440.01452302398053 + }, + "positionAbsolute": { + "x": -1369.6904698303242, + "y": 440.01452302398053 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "output_type": "file", + "selected": false, + "title": "Variable Aggregator", + "type": "variable-aggregator", + "variables": [ + [ + "1750836380067", + "file" + ], + [ + "1756442998557", + "file" + ] + ] + }, + "height": 135, + "id": "1756442986174", + "position": { + "x": -1067.06980963949, + "y": 236.10252072775984 + }, + "positionAbsolute": { + "x": -1067.06980963949, + "y": 236.10252072775984 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "Google Drive", + "datasource_name": "google_drive", + "datasource_parameters": {}, + "plugin_id": "langgenius/google_drive", + "provider_name": "google_drive", + "provider_type": "online_drive", + "selected": false, + "title": "Google Drive", + "type": "datasource" + }, + "height": 52, + "id": "1756442998557", + "position": { + "x": -1371.6520723158733, + "y": 326 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "cases": [ + { + "case_id": "true", + "conditions": [ + { + "comparison_operator": "is", + "id": "1581dd11-7898-41f4-962f-937283ba7e01", + "value": ".xlsx", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "92abb46d-d7e4-46e7-a5e1-8a29bb45d528", + "value": ".xls", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "1dde5ae7-754d-4e83-96b2-fe1f02995d8b", + "value": ".md", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "7e1a80e5-c32a-46a4-8f92-8912c64972aa", + "value": ".markdown", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "53abfe95-c7d0-4f63-ad37-17d425d25106", + "value": ".mdx", + "varType": "string", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "436877b8-8c0a-4cc6-9565-92754db08571", + "value": ".html", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "5e3e375e-750b-4204-8ac3-9a1174a5ab7c", + "value": ".htm", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "1a84a784-a797-4f96-98a0-33a9b48ceb2b", + "value": ".docx", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "62d11445-876a-493f-85d3-8fc020146bdd", + "value": ".csv", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + }, + { + "comparison_operator": "is", + "id": "02c4bce8-7668-4ccd-b750-4281f314b231", + "value": ".txt", + "varType": "file", + "variable_selector": [ + "1756442986174", + "output", + "extension" + ] + } + ], + "id": "true", + "logical_operator": "or" + } + ], + "selected": false, + "title": "IF/ELSE", + "type": "if-else" + }, + "height": 358, + "id": "1756443014860", + "position": { + "x": -733.5977815139424, + "y": 236.10252072775984 + }, + "positionAbsolute": { + "x": -733.5977815139424, + "y": 236.10252072775984 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "Jina Reader", + "datasource_name": "jina_reader", + "datasource_parameters": { + "crawl_sub_pages": { + "type": "variable", + "value": [ + "rag", + "1756896212061", + "jina_subpages" + ] + }, + "limit": { + "type": "variable", + "value": [ + "rag", + "1756896212061", + "jina_limit" + ] + }, + "url": { + "type": "mixed", + "value": "{{#rag.1756896212061.jina_url#}}" + }, + "use_sitemap": { + "type": "variable", + "value": [ + "rag", + "1756896212061", + "jian_sitemap" + ] + } + }, + "plugin_id": "langgenius/jina_datasource", + "provider_name": "jinareader", + "provider_type": "website_crawl", + "selected": false, + "title": "Jina Reader", + "type": "datasource" + }, + "height": 52, + "id": "1756896212061", + "position": { + "x": -1371.6520723158733, + "y": 538.9988445953813 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": 538.9988445953813 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "Firecrawl", + "datasource_name": "crawl", + "datasource_parameters": { + "crawl_subpages": { + "type": "variable", + "value": [ + "rag", + "1756907397615", + "firecrawl_subpages" + ] + }, + "exclude_paths": { + "type": "mixed", + "value": "{{#rag.1756907397615.exclude_paths#}}" + }, + "include_paths": { + "type": "mixed", + "value": "{{#rag.1756907397615.include_paths#}}" + }, + "limit": { + "type": "variable", + "value": [ + "rag", + "1756907397615", + "max_pages" + ] + }, + "max_depth": { + "type": "variable", + "value": [ + "rag", + "1756907397615", + "max_depth" + ] + }, + "only_main_content": { + "type": "variable", + "value": [ + "rag", + "1756907397615", + "main_content" + ] + }, + "url": { + "type": "mixed", + "value": "{{#rag.1756907397615.firecrawl_url1#}}" + } + }, + "plugin_id": "langgenius/firecrawl_datasource", + "provider_name": "firecrawl", + "provider_type": "website_crawl", + "selected": false, + "title": "Firecrawl", + "type": "datasource" + }, + "height": 52, + "id": "1756907397615", + "position": { + "x": -1371.6520723158733, + "y": 644.3296146102903 + }, + "positionAbsolute": { + "x": -1371.6520723158733, + "y": 644.3296146102903 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "is_team_authorization": true, + "paramSchemas": [ + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "The file you want to extract QA from.", + "ja_JP": "The file you want to extract QA from.", + "pt_BR": "The file you want to extract QA from.", + "zh_Hans": "你想要提取 QA 的文件。" + }, + "label": { + "en_US": "Input File", + "ja_JP": "Input File", + "pt_BR": "Input File", + "zh_Hans": "输入文件" + }, + "llm_description": "The file you want to extract QA from.", + "max": null, + "min": null, + "name": "input_file", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "file" + }, + { + "auto_generate": null, + "default": 0, + "form": "llm", + "human_description": { + "en_US": "Column number for question.", + "ja_JP": "Column number for question.", + "pt_BR": "Column number for question.", + "zh_Hans": "问题所在的列。" + }, + "label": { + "en_US": "Column number for question", + "ja_JP": "Column number for question", + "pt_BR": "Column number for question", + "zh_Hans": "问题所在的列" + }, + "llm_description": "The column number for question, the format of the column number must be an integer.", + "max": null, + "min": null, + "name": "question_column", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "number" + }, + { + "auto_generate": null, + "default": 1, + "form": "llm", + "human_description": { + "en_US": "Column number for answer.", + "ja_JP": "Column number for answer.", + "pt_BR": "Column number for answer.", + "zh_Hans": "答案所在的列。" + }, + "label": { + "en_US": "Column number for answer", + "ja_JP": "Column number for answer", + "pt_BR": "Column number for answer", + "zh_Hans": "答案所在的列" + }, + "llm_description": "The column number for answer, the format of the column number must be an integer.", + "max": null, + "min": null, + "name": "answer_column", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "number" + } + ], + "params": { + "answer_column": "", + "input_file": "", + "question_column": "" + }, + "provider_id": "langgenius/qa_chunk/qa_chunk", + "provider_name": "langgenius/qa_chunk/qa_chunk", + "provider_type": "builtin", + "selected": false, + "title": "Q&A Processor", + "tool_configurations": {}, + "tool_description": "A tool for QA chunking mode.", + "tool_label": "QA Chunk", + "tool_name": "qa_chunk", + "tool_node_version": "2", + "tool_parameters": { + "answer_column": { + "type": "constant", + "value": 2 + }, + "input_file": { + "type": "variable", + "value": [ + "1756912537172", + "files" + ] + }, + "question_column": { + "type": "constant", + "value": 1 + } + }, + "type": "tool" + }, + "height": 52, + "id": "1756912274158", + "position": { + "x": 794.2003154321724, + "y": 326 + }, + "positionAbsolute": { + "x": 794.2003154321724, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "context": { + "enabled": false, + "variable_selector": [] + }, + "model": { + "completion_params": { + "temperature": 0.7 + }, + "mode": "chat", + "name": "claude-3-5-sonnet-20240620", + "provider": "langgenius/anthropic/anthropic" + }, + "prompt_template": [ + { + "id": "7f8105aa-a37d-4f5a-b581-babeeb31e833", + "role": "system", + "text": "\nGenerate a list of Q&A pairs based on {{#1753346901505.output#}}. Present the output as a Markdown table, where the first column is serial number, the second column is Question, and the third column is Question. Ensure that the table format can be easily converted into a CSV file.\nExample Output Format:\n| Index | Question | Answer |\n|-------|-----------|--------|\n| 1 | What is the main purpose of the document? | The document explains the company's new product launch strategy. ![image](https://cloud.dify.ai/files/xxxxxxx) |\n| 2 || When will the product be launched? | The product will be launched in Q3 of this year. |\n\nInstructions:\nRead and understand the input text.\nExtract key information and generate meaningful questions and answers.\nPreserve any ![image] URLs from the input text in the answers.\nKeep questions concise and specific.\nEnsure answers are accurate, self-contained, and clear.\nOutput only the Markdown table without any extra explanation." + } + ], + "selected": false, + "title": "LLM", + "type": "llm", + "vision": { + "enabled": false + } + }, + "height": 88, + "id": "1756912504019", + "position": { + "x": 184.46657789772178, + "y": 326 + }, + "positionAbsolute": { + "x": 184.46657789772178, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "is_team_authorization": true, + "paramSchemas": [ + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "Markdown text", + "ja_JP": "Markdown text", + "pt_BR": "Markdown text", + "zh_Hans": "Markdown格式文本,必须为Markdown表格格式" + }, + "label": { + "en_US": "Markdown text", + "ja_JP": "Markdown text", + "pt_BR": "Markdown text", + "zh_Hans": "Markdown格式文本" + }, + "llm_description": "", + "max": null, + "min": null, + "name": "md_text", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "Filename of the output file", + "ja_JP": "Filename of the output file", + "pt_BR": "Filename of the output file", + "zh_Hans": "输出文件名" + }, + "label": { + "en_US": "Filename of the output file", + "ja_JP": "Filename of the output file", + "pt_BR": "Filename of the output file", + "zh_Hans": "输出文件名" + }, + "llm_description": "", + "max": null, + "min": null, + "name": "output_filename", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "string" + } + ], + "params": { + "md_text": "", + "output_filename": "" + }, + "provider_id": "bowenliang123/md_exporter/md_exporter", + "provider_name": "bowenliang123/md_exporter/md_exporter", + "provider_type": "builtin", + "selected": false, + "title": "Markdown to CSV file", + "tool_configurations": {}, + "tool_description": "Generate CSV file from Markdown text", + "tool_label": "Markdown to CSV file", + "tool_name": "md_to_csv", + "tool_node_version": "2", + "tool_parameters": { + "md_text": { + "type": "mixed", + "value": "{{#1756912504019.text#}}" + }, + "output_filename": { + "type": "mixed", + "value": "LLM Generated Q&A" + } + }, + "type": "tool" + }, + "height": 52, + "id": "1756912537172", + "position": { + "x": 484.75465419110174, + "y": 326 + }, + "positionAbsolute": { + "x": 484.75465419110174, + "y": 326 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 174, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The LLM-generated Q&A pairs are designed to extract key information from the input text and present it in a structured, easy-to-use format. Each pair consists of a concise question that captures an important point or detail, and a clear, self-contained answer that provides the relevant information without requiring additional context. The output is formatted as a Markdown table with three columns—Index, Question, and Answer—so that it can be easily converted into a CSV file for further processing. \",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 528 + }, + "height": 174, + "id": "1756912556940", + "position": { + "x": 184.46657789772178, + "y": 462.64405262857747 + }, + "positionAbsolute": { + "x": 184.46657789772178, + "y": 462.64405262857747 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 528 + } + ], + "viewport": { + "x": 1149.1394490177502, + "y": 317.2338302699771, + "zoom": 0.4911032886685182 + } + }, + "icon_info": { + "icon": "e4ea16ed-9690-4de9-ab80-5b622ecbcc04", + "icon_background": null, + "icon_type": "image", + "icon_url": "data:image/png;base64,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" + }, + "id": "98374ab6-9dcd-434d-983e-268bec156b43", + "name": "LLM Generated Q&A", + "icon": { + "icon": "e4ea16ed-9690-4de9-ab80-5b622ecbcc04", + "icon_background": null, + "icon_type": "image", + "icon_url": "data:image/png;base64,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" + }, + "language": "zh-Hans", + "position": 5 + }, + { + "chunk_structure": "hierarchical_model", + "description": "This knowledge pipeline uses LLMs to extract content from images and tables in documents and automatically generate descriptive annotations for contextual enrichment.", + "export_data": "dependencies:\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius\/jina:0.0.8@d3a6766fbb80890d73fea7ea04803f3e1702c6e6bd621aafb492b86222a193dd\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius\/parentchild_chunker:0.0.7@ee9c253e7942436b4de0318200af97d98d094262f3c1a56edbe29dcb01fbc158\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius\/mineru:0.5.0@ca04f2dceb4107e3adf24839756954b7c5bcb7045d035dbab5821595541c093d\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius\/anthropic:0.2.0@a776815b091c81662b2b54295ef4b8a54b5533c2ec1c66c7c8f2feea724f3248\nkind: rag_pipeline\nrag_pipeline:\n description: ''\n icon: e642577f-da15-4c03-81b9-c9dec9189a3c\n icon_background: null\n icon_type: image\n icon_url: data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAoKADAAQAAAABAAAAoAAAAACn7BmJAAAP9UlEQVR4Ae2dTXPbxhnHdwFRr5ZN2b1kJraouk57i\/IJrJx6jDPT9Fpnkrvj3DOOv0DsXDvJxLk2nUnSW09hPkGc6aWdOBEtpZNLE9Gy3iiSQJ\/\/gg8DQnyFFiAAPjtDLbAA9uWPn5595VKrjLjtn\/YqrZaq+L6quL5X9pQqO1qtI3u+0mXy8MFJxfihP1qrss\/XQ+FFPtRK1UmreriMJkz\/GqaVX8N1z1dPHdyvnZpP1+fmVG3jhTVzDden6SjP6brt7b1y21VbWnk3CawKAbWp9Fmo0s3VbKamffWYgKz5vv+t1s5jt62qGxtrPVAnrUwqAH63u7dF\/4E3qaBbVCB8zjjHcZRDJs91XaXJpOGDMDgSx5zj2HWDMByz4\/v5fBZ80lLhE3Y498jcsfO8Nt1DlYbvmXs9L\/DbbY\/uozqmjwOUSvvVtuN8+tKLa4\/73GI1KDEAYek8x7vta\/0a5XiLcw1Y5uZcAxpgK5VKXeD4HvHTUaDdbivA2Go1yW+rZrPVkzDBUSOk7\/\/u2m8e9VyweGIdQAPenLpD\/3LvcLsM0C0szBNs8wY+nIvLpgKA8PS0YWBkKwkQyUo8un517b7tXFsl4cnO\/25p33lA7YoKMloqzanFxSXj2864xJe8Ao3GaRdGpAYQbVtEKwCS1au0Xf8TyuMWMirgQYXiOFjFw8PDcLvxC7ek79roSZ8bwO3dvTue77+P6hZV69LSElm9heKoLyXpKgCLeHx8zCBSb9m7e972YWwATVvPVfeoL\/YOcjg\/X1IrKyvd3mo313JQKAXQLgSEgBGO3v\/DG9eu3I1byFgAosr1HP9zauttitWLK32+nzs5aRgQMfSDoRtnXr8ep0qeGMAOfF+ho4FxuosXV7vjdfmWVHI\/qQKwhvv7z02VTCDVnJJ+dVIIJwIwDB\/G8FZXLwh8k761gt0PCJ8\/PzDjiHEgHBvAKHywfDKeVzCaYhYH1TAsIQazJ4VwLAAFvphvZoYeiwvh2YnVPqJ1OhwVVLti+foIJEGmNgQbYISG5Creqf85Ga7yKGlGAvj9zh5mNjbR4UCbT6rdUZLO7nWwwf0CMNNyvXuj1BhaBdPU2m2lnE8Q8aVLF6XDMUpNuW4UQMfk2bN9swKHqua7N9avPBwkzUAATbvP9b\/BDMfy8rLMbgxSUML7KoBxwqOjI1yr07TdK4OGZwZWwTS3+wDwYRWLTK311VgChygAZjA7Rq7cbpp1An3v7gtgUPWqW2j3YW5XnCgQR4HQ1OzWk529W\/3i6AsgLakyjUfAx6uS+z0sYaLAMAXQd2ADRt9PedCvV3wGwO939+7xNBuqX3GiwHkUQFWM5XnUnKu0HM8sXAnHdwZA+grVbdwA8ylOFLChABYlw5FFvBO1gj0Aou0H6wdi8REnCthQIMRTmazg7XCcPQBy229+XhaUhkWS4\/MrELKC+JJa13UB3P5xb1Pafl1d5MCyArCC6JSQ28LXdDn6LoD09bzbCJSql6UR37YC3U6t521x3F0AtaNvIlCqX5ZGfNsK4Gu5cGQJDWs4NgCiZ0JLujYRIBYQKohLQgFsSMDVMPeGDYBtt72FBAW+JGSXOFkBwAcI4bA\/EHwDoO9rY\/0cJ7iIC+JEgSQUwHpB4\/ygHWgAJDJfRiD2aREnCiSpAANodkajhDoAqgoS7bfzFMLFiQK2FGAjR7WxMXqdKjjogDCdthKTeESBqAKdTgiCK\/jjUG8kOOjsxYdAcaJAUgoAQF5hhV1xndacVL9JiS3x9leArSC2ZHa03y7jNg7s\/4iEigL2FOChGGIPAOoKosY2uOJEgTQUYGNHw39lB7vRI1HszyxOFEhDAQaQ0io7fqc3EgpMIw+SxgwrwJ0QRzvr3XpXAJxhIqZYdKp59TrSl2m4Kb6FGUuajR3trLvWtYAzpoEUd4oKcIeXhgQvCYBTfBGStFJzm\/\/EWkDqiiw1qR6W1TC7r11JlIurX\/6caPy5iJx+uUkd7SOrFYfgM8MwNBKYi7xLJoulgFTBxXqfuSuNAJi7V1asDM99+8fLpvYtly91VykUq4jDSzPtNpntNme0PLbjH67meFexf2C9Hmx8QMOAwVQcj82MF4XcJQrEVyDEmpmKk9Uw8bWUJ2Mo0ANgjOflEVHAmgLSCbEmpUQURwEBMI5q8ow1BQRAa1JKRHEUyAWAPx7Rj+I1afpGXOEUyAWAn+2cqI9\/aBROfCkQLT\/Iugiwfp\/tNtRH3x+LFcz6y4qRv8wDCOu3a6pgX6xgjBec9UcyDSBbPxZRrCArURw\/0wCy9WO595tiBVmLoviZBTBq\/VhwsYKsRDH8zAIYtX4st1hBVqIYfiYBHGT9WHKxgqxE\/v1MAjjI+rHcYgVZifz7mfo5pACsE\/XRDycjlYUVhPvT1QV1dTmT\/0cjyyA30LfisiBCFzwz2Ezf0BvD4ZkP\/n2k\/kbjhH++tiggjqFZFm+ZKoBxwIuKiPaigBhVJT\/n+snOL8bkXL68llqubYA3KLMvUnU8iUVM+zsU0fQGlaPw4Yd1U8RULWCS4PELE4vISuTDT7X1DgCxC8OlUvLJ\/pqWfOE+yyimagFRPb77h2VTRaLz8PfdU1po0Laqz8WSVm\/9dlG9fX1J4VhcthVIFUCWIgkQ8wqe7e\/tRtuYtuPnd3he\/5dfglpwKgBy5m2AmFfwWINZ96cKIIsfBfFjGohGG26YE\/CGqZOfa5kAkOViENFy++A\/wUwHX4v6b1Eb793fL0WD5TxnCiTfHY0hCOAa1oF4cdlVb9AUnLj8K3AuAD\/baSh8bDvA9zb1ZAe5N67J\/O8gbfIWHrsKBnjvfnPQLS+gsOlgBbEoIdoWFOtnU+XpxxXLAkbhA4i2LeEgKyjWb\/rQ2MzBxABG4ePMJAFhtC0o1o\/VLo4\/EYCD4GM5bEMYtYJi\/Vjp4vhjAzgKPpbENoRsBcX6scLF8sfqhIwLH0sDCOFsdEzYCvq0lausfGaFi+OPBHBS+FgamxDCCj4bMTPC6YqfLwWGAhgXPpbAFoSwgviIK54CA9uA54WPpbLdJuR4xS+GAn0BtAUfSyQQshLiRxU4A6Bt+DhBgZCVED+sQA+AScHHCQqErIT4rEAXwKTh4wQFQlZCfChgesH\/+G9DvfdDenswA0I4G+OEJiL5k1sFHAPfvw5TL4BYwtQlz2SCzntTgI+VEAhZidn1u23AaUkgEE5L+WykO3UAIYNAmA0YppGLTAAoEE7j1WcjzcwAKBBmA4i0c5EpAAXCtF\/\/9NPLHIAC4fShSDMHmQRQIEwTgemmlVkABcLpgpFW6pkGUCBMC4PppZN5AAXC6cGRRsq5AFAgTAOF6aSRGwAFwukAknSquQJQIEwah\/Tjzx2AAmH6kCSZYi4BFAiTRCLduHMLoECYLihJpUYA6uAna+j3O\/LoZClX\/t4afium4+oEoJ9rAFEQgZDfZz78MIB65a9PtinbFbV0USkn1zWyFfWT\/l2N6O94WMl03iLx6QtwR\/vIdU2Iy9vLK1h+BcCCvdC8FUcAzNsbK0J+u50QXcfvBX9FZdpaXV1VpdLQ3dqKUHQpQwYUaDZb6vnz58hJVSxgBl7ILGcBAJphmFDXeJb1kLKnrIDj+f4zpOmjayxOFEhBAc8LfiNaKy3DMCnoLUlEFOj2QSjcoZ2Xa7jueWIBoYO45BXg2tbzvaeY+zBtQM\/rzs8lnwNJYaYVCPU36k5bd+aClQA401SkWHiubbV2ao7Wbg1pt1pBwzDFfEhSM6oAW0Bfq7oz1wragBw4o5pIsVNUoN0O+htzc7QYYWNjrYa0YRYFwhTfwgwnxVXwxgtrnWEYX6zgDPOQatG5qad99RgJB1NxOjhpNpupZkYSmz0FeBCaKuGnKH0AoO+bE6Zz9mSREqelQKvV6iTlhy2gX0Uo09m5QzxRwLoC7XZnGk47vwLott0qUoIFlI6Idc0lwpACWIoF57ZVFb6pgqknjNmQKuCTahiyiEtCAYYPHZAOc502IKVG8H2NRE9PT5NIW+IUBYithlHBVwFrOAk6IebIqcITAKGCuCQUYAvoec4jjr8L4I2ra1UKNNUw38g3iS8KnFeBRqNhJjuw+uqljTXTAUGcXQBxon3\/S\/gnJ8fwxIkC1hTgmtVX+n440h4AHTKNRGgdFlCsYFgmOT6PAswTrN\/vrq09CsfVAyB6JrRE\/0PcIFYwLJMcn0eBw8Pg11iJrU+j8RCUvW57e6\/sOf43tFSmsry8pBYXF3tvkDNRYAIF0PY7PDxSsH7Xr13eiD7aYwFxEVbQ1\/oujo+PT2RgGkKIi6UAll2BIbho248jPAMgLlA9\/QV5pkd8cJD+j1lz5sTPtwJoxnWWXn0RbftxyfoCiItuW79JZpM6JE1qDwYU80PiiwKjFDg5aahG4xRVb90tBTVqv2cGAkhVcU35QZcZZpRXsfaLRMJEgbACQdUbDOVR1XsXC0\/D18PHAwHETdfX1x5SI\/BDzBFjLw+BMCydHPdTAIyAFbOohdgZVPXys2Qhh7tOr\/gr6hVvuq6rLl5cVVqPfGx4pHK1kAoAuv19GKo2TWqox9fXL78yqqBDLSAeRq\/Y8fTrFGENESMBQ\/eomOX6TCnQAx8NuTjz+vVxBBjblJElrND4ICxhRSzhONLOzj1n4CvpV4e1+8LKjA0gHopCeOHCBeW6I41oOD05LpgCaPMdHBwE1S4s3wTwQYqJAMQDYQgd2tgDG1sKhFBm9hx3ODDWRyBNDB8UmxhAPNSB8HN0TNAhWVpalCk7CDNDDuN8x8fHpj+ADgfafONWu2GZYgHIETx5+vND6hLfwfnCwjxBuCTWkMUpqI\/2HhYXnJ52vsJLQy2u57yPzmqcIp8LQCT4ZGfvtlb+A9raqIwqGdZwYWEhTl7kmYwr0GP1aIaDVrfcv7F+5eF5sn1uAJE4quS2qx7QlPMtnAPElZUV2fQcYhTAYT0f5nVDa0SrNL32ZpwqNyqHFQA5UmMNff8ehmoQhl335+fnxSKyQDnzo+ARLDVMrXUWq1gpjVUAOUffPf35fUfpvzCIsIgBjAtiFVmkDPpo3+Fruc3mqVlIgHM4gsQsVJ7znIdx23qDipsIgJxY1CJyOGDEYPYc7c\/lOPBdviR+SgoALnyw2gkzXPj02Zigqn39peOpR7bB42ImCiAnsv3j3iaNGVFnRd\/E0A2Hh31YSYwnYlgHx\/D5A0jZBdd7s8338T2z4DNA0bJibA4O+zCzBeOt93DOkPEWadHn6bxK931NL6Ha+aZkn1vsBfW+SXvxDoyJOixl6rBskUAYQ3yZxpAqg6AcGIlcsKMAtuXDzmjYnEo7VWyXkZSlG5Th1AEclJHtn\/YqtHFShYAsA0pPeWXawn8d91PDt0KecbiOIR8+h0\/G8kxY+HoRj+nF1cmg1c+UTQd7PVJ4nYbHzHXaf\/6po5x6m7bEJa1q2JnURg\/2TNoxAv4PoGedQHqhulIAAAAASUVORK5CYII=\n name: Contextual Enrichment Using LLM\nversion: 0.1.0\nworkflow:\n conversation_variables: []\n environment_variables: []\n features: {}\n graph:\n edges:\n - data:\n isInLoop: false\n sourceType: tool\n targetType: knowledge-index\n id: 1751336942081-source-1750400198569-target\n selected: false\n source: '1751336942081'\n sourceHandle: source\n target: '1750400198569'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: llm\n targetType: tool\n id: 1758002850987-source-1751336942081-target\n source: '1758002850987'\n sourceHandle: source\n target: '1751336942081'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInIteration: false\n isInLoop: false\n sourceType: datasource\n targetType: tool\n id: 1756915693835-source-1758027159239-target\n source: '1756915693835'\n sourceHandle: source\n target: '1758027159239'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: tool\n targetType: llm\n id: 1758027159239-source-1758002850987-target\n source: '1758027159239'\n sourceHandle: source\n target: '1758002850987'\n targetHandle: target\n type: custom\n zIndex: 0\n nodes:\n - data:\n chunk_structure: hierarchical_model\n embedding_model: jina-embeddings-v2-base-en\n embedding_model_provider: langgenius\/jina\/jina\n index_chunk_variable_selector:\n - '1751336942081'\n - result\n indexing_technique: high_quality\n keyword_number: 10\n retrieval_model:\n reranking_enable: true\n reranking_mode: reranking_model\n reranking_model:\n reranking_model_name: jina-reranker-v1-base-en\n reranking_provider_name: langgenius\/jina\/jina\n score_threshold: 0\n score_threshold_enabled: false\n search_method: hybrid_search\n top_k: 3\n weights: null\n selected: false\n title: Knowledge Base\n type: knowledge-index\n height: 114\n id: '1750400198569'\n position:\n x: 474.7618603027596\n y: 282\n positionAbsolute:\n x: 474.7618603027596\n y: 282\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n author: TenTen\n desc: ''\n height: 458\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Currently\n we support 5 types of \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Data\n Sources\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\":\n File Upload, Text Input, Online Drive, Online Doc, and Web Crawler. Different\n types of Data Sources have different input and output types. The output\n of File Upload and Online Drive are files, while the output of Online Doc\n and WebCrawler are pages. You can find more Data Sources on our Marketplace.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n Knowledge Pipeline can have multiple data sources. Each data source can\n be selected more than once with different settings. Each added data source\n is a tab on the add file interface. However, each time the user can only\n select one data source to import the file and trigger its subsequent processing.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 458\n id: '1751264451381'\n position:\n x: -893.2836123260277\n y: 378.2537898330178\n positionAbsolute:\n x: -893.2836123260277\n y: 378.2537898330178\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n author: TenTen\n desc: ''\n height: 260\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Knowledge\n Pipeline\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\n starts with Data Source as the starting node and ends with the knowledge\n base node. The general steps are: import documents from the data source\n \u2192 use extractor to extract document content \u2192 split and clean content into\n structured chunks \u2192 store in the knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n user input variables required by the Knowledge Pipeline node must be predefined\n and managed via the Input Field section located in the top-right corner\n of the orchestration canvas. It determines what input fields the end users\n will see and need to fill in when importing files to the knowledge base\n through this pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Unique\n Inputs: Input fields defined here are only available to the selected data\n source and its downstream nodes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Global\n Inputs: These input fields are shared across all subsequent nodes after\n the data source and are typically set during the Process Documents step.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For\n more information, see \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"https:\/\/docs.dify.ai\/en\/guides\/knowledge-base\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer\",\"target\":null,\"title\":null,\"url\":\"https:\/\/docs.dify.ai\/en\/guides\/knowledge-base\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\".\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 1182\n height: 260\n id: '1751266376760'\n position:\n x: -704.0614991386192\n y: -73.30453110517956\n positionAbsolute:\n x: -704.0614991386192\n y: -73.30453110517956\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 1182\n - data:\n author: TenTen\n desc: ''\n height: 304\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"MinerU\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\n is an advanced open-source document extractor designed specifically to convert\n complex, unstructured documents\u2014such as PDFs, Word files, and PPTs\u2014into\n high-quality, machine-readable formats like Markdown and JSON. MinerU addresses\n challenges in document parsing such as layout detection, formula recognition,\n and multi-language support, which are critical for generating high-quality\n training corpora for LLMs.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 304\n id: '1751266402561'\n position:\n x: -555.2228329530462\n y: 592.0458661166498\n positionAbsolute:\n x: -555.2228329530462\n y: 592.0458661166498\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n author: TenTen\n desc: ''\n height: 554\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Parent-Child\n Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\n addresses the dilemma of context and precision by leveraging a two-tier\n hierarchical approach that effectively balances the trade-off between accurate\n matching and comprehensive contextual information in RAG systems. \",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Here\n is the essential mechanism of this structured, two-level information access:\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"-\n Query Matching with Child Chunks: Small, focused pieces of information,\n often as concise as a single sentence within a paragraph, are used to match\n the user''s query. These child chunks enable precise and relevant initial\n retrieval.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"-\n Contextual Enrichment with Parent Chunks: Larger, encompassing sections\u2014such\n as a paragraph, a section, or even an entire document\u2014that include the matched\n child chunks are then retrieved. These parent chunks provide comprehensive\n context for the Language Model (LLM).\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 554\n id: '1751266447821'\n position:\n x: 153.2996965006646\n y: 378.2537898330178\n positionAbsolute:\n x: 153.2996965006646\n y: 378.2537898330178\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n author: TenTen\n desc: ''\n height: 411\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n knowledge base provides two indexing methods:\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0and\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Economical\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\",\n each with different retrieval strategies. High-Quality mode uses embeddings\n for vectorization and supports vector, full-text, and hybrid retrieval,\n offering more accurate results but higher resource usage. Economical mode\n uses keyword-based inverted indexing with no token consumption but lower\n accuracy; upgrading to High-Quality is possible, but downgrading requires\n creating a new knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"*\n Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0and\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A\n Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0only\n support the\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0indexing\n method.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 411\n id: '1751266580099'\n position:\n x: 482.3389174180554\n y: 437.9839361130071\n positionAbsolute:\n x: 482.3389174180554\n y: 437.9839361130071\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n is_team_authorization: true\n output_schema:\n properties:\n result:\n description: Parent child chunks result\n items:\n type: object\n type: array\n type: object\n paramSchemas:\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: ''\n ja_JP: ''\n pt_BR: ''\n zh_Hans: ''\n label:\n en_US: Input Content\n ja_JP: Input Content\n pt_BR: Conte\u00fado de Entrada\n zh_Hans: \u8f93\u5165\u6587\u672c\n llm_description: The text you want to chunk.\n max: null\n min: null\n name: input_text\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: paragraph\n form: llm\n human_description:\n en_US: Split text into paragraphs based on separator and maximum chunk\n length, using split text as parent block or entire document as parent\n block and directly retrieve.\n ja_JP: Split text into paragraphs based on separator and maximum chunk\n length, using split text as parent block or entire document as parent\n block and directly retrieve.\n pt_BR: Dividir texto em par\u00e1grafos com base no separador e no comprimento\n m\u00e1ximo do bloco, usando o texto dividido como bloco pai ou documento\n completo como bloco pai e diretamente recuper\u00e1-lo.\n zh_Hans: \u6839\u636e\u5206\u9694\u7b26\u548c\u6700\u5927\u5757\u957f\u5ea6\u5c06\u6587\u672c\u62c6\u5206\u4e3a\u6bb5\u843d\uff0c\u4f7f\u7528\u62c6\u5206\u6587\u672c\u4f5c\u4e3a\u68c0\u7d22\u7684\u7236\u5757\u6216\u6574\u4e2a\u6587\u6863\u7528\u4f5c\u7236\u5757\u5e76\u76f4\u63a5\u68c0\u7d22\u3002\n label:\n en_US: Parent Mode\n ja_JP: Parent Mode\n pt_BR: Modo Pai\n zh_Hans: \u7236\u5757\u6a21\u5f0f\n llm_description: Split text into paragraphs based on separator and maximum\n chunk length, using split text as parent block or entire document as parent\n block and directly retrieve.\n max: null\n min: null\n name: parent_mode\n options:\n - label:\n en_US: Paragraph\n ja_JP: Paragraph\n pt_BR: Par\u00e1grafo\n zh_Hans: \u6bb5\u843d\n value: paragraph\n - label:\n en_US: Full Document\n ja_JP: Full Document\n pt_BR: Documento Completo\n zh_Hans: \u5168\u6587\n value: full_doc\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: select\n - auto_generate: null\n default: '\n\n\n '\n form: llm\n human_description:\n en_US: Separator used for chunking\n ja_JP: Separator used for chunking\n pt_BR: Separador usado para divis\u00e3o\n zh_Hans: \u7528\u4e8e\u5206\u5757\u7684\u5206\u9694\u7b26\n label:\n en_US: Parent Delimiter\n ja_JP: Parent Delimiter\n pt_BR: Separador de Pai\n zh_Hans: \u7236\u5757\u5206\u9694\u7b26\n llm_description: The separator used to split chunks\n max: null\n min: null\n name: separator\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: 1024\n form: llm\n human_description:\n en_US: Maximum length for chunking\n ja_JP: Maximum length for chunking\n pt_BR: Comprimento m\u00e1ximo para divis\u00e3o\n zh_Hans: \u7528\u4e8e\u5206\u5757\u7684\u6700\u5927\u957f\u5ea6\n label:\n en_US: Maximum Parent Chunk Length\n ja_JP: Maximum Parent Chunk Length\n pt_BR: Comprimento M\u00e1ximo do Bloco Pai\n zh_Hans: \u6700\u5927\u7236\u5757\u957f\u5ea6\n llm_description: Maximum length allowed per chunk\n max: null\n min: null\n name: max_length\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: number\n - auto_generate: null\n default: '. '\n form: llm\n human_description:\n en_US: Separator used for subchunking\n ja_JP: Separator used for subchunking\n pt_BR: Separador usado para subdivis\u00e3o\n zh_Hans: \u7528\u4e8e\u5b50\u5206\u5757\u7684\u5206\u9694\u7b26\n label:\n en_US: Child Delimiter\n ja_JP: Child Delimiter\n pt_BR: Separador de Subdivis\u00e3o\n zh_Hans: \u5b50\u5206\u5757\u5206\u9694\u7b26\n llm_description: The separator used to split subchunks\n max: null\n min: null\n name: subchunk_separator\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: 512\n form: llm\n human_description:\n en_US: Maximum length for subchunking\n ja_JP: Maximum length for subchunking\n pt_BR: Comprimento m\u00e1ximo para subdivis\u00e3o\n zh_Hans: \u7528\u4e8e\u5b50\u5206\u5757\u7684\u6700\u5927\u957f\u5ea6\n label:\n en_US: Maximum Child Chunk Length\n ja_JP: Maximum Child Chunk Length\n pt_BR: Comprimento M\u00e1ximo de Subdivis\u00e3o\n zh_Hans: \u5b50\u5206\u5757\u6700\u5927\u957f\u5ea6\n llm_description: Maximum length allowed per subchunk\n max: null\n min: null\n name: subchunk_max_length\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: number\n - auto_generate: null\n default: 0\n form: llm\n human_description:\n en_US: Whether to remove consecutive spaces, newlines and tabs\n ja_JP: Whether to remove consecutive spaces, newlines and tabs\n pt_BR: Se deve remover espa\u00e7os extras no texto\n zh_Hans: \u662f\u5426\u79fb\u9664\u6587\u672c\u4e2d\u7684\u8fde\u7eed\u7a7a\u683c\u3001\u6362\u884c\u7b26\u548c\u5236\u8868\u7b26\n label:\n en_US: Replace consecutive spaces, newlines and tabs\n ja_JP: Replace consecutive spaces, newlines and tabs\n pt_BR: Substituir espa\u00e7os consecutivos, novas linhas e guias\n zh_Hans: \u66ff\u6362\u8fde\u7eed\u7a7a\u683c\u3001\u6362\u884c\u7b26\u548c\u5236\u8868\u7b26\n llm_description: Whether to remove consecutive spaces, newlines and tabs\n max: null\n min: null\n name: remove_extra_spaces\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n - auto_generate: null\n default: 0\n form: llm\n human_description:\n en_US: Whether to remove URLs and emails in the text\n ja_JP: Whether to remove URLs and emails in the text\n pt_BR: Se deve remover URLs e e-mails no texto\n zh_Hans: \u662f\u5426\u79fb\u9664\u6587\u672c\u4e2d\u7684URL\u548c\u7535\u5b50\u90ae\u4ef6\u5730\u5740\n label:\n en_US: Delete all URLs and email addresses\n ja_JP: Delete all URLs and email addresses\n pt_BR: Remover todas as URLs e e-mails\n zh_Hans: \u5220\u9664\u6240\u6709URL\u548c\u7535\u5b50\u90ae\u4ef6\u5730\u5740\n llm_description: Whether to remove URLs and emails in the text\n max: null\n min: null\n name: remove_urls_emails\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n params:\n input_text: ''\n max_length: ''\n parent_mode: ''\n remove_extra_spaces: ''\n remove_urls_emails: ''\n separator: ''\n subchunk_max_length: ''\n subchunk_separator: ''\n provider_id: langgenius\/parentchild_chunker\/parentchild_chunker\n provider_name: langgenius\/parentchild_chunker\/parentchild_chunker\n provider_type: builtin\n selected: false\n title: Parent-child Chunker\n tool_configurations: {}\n tool_description: Process documents into parent-child chunk structures\n tool_label: Parent-child Chunker\n tool_name: parentchild_chunker\n tool_node_version: '2'\n tool_parameters:\n input_text:\n type: mixed\n value: '{{#1758002850987.text#}}'\n max_length:\n type: variable\n value:\n - rag\n - shared\n - Maximum_Parent_Length\n parent_mode:\n type: variable\n value:\n - rag\n - shared\n - Parent_Mode\n remove_extra_spaces:\n type: variable\n value:\n - rag\n - shared\n - clean_1\n remove_urls_emails:\n type: variable\n value:\n - rag\n - shared\n - clean_2\n separator:\n type: mixed\n value: '{{#rag.shared.Parent_Delimiter#}}'\n subchunk_max_length:\n type: variable\n value:\n - rag\n - shared\n - Maximum_Child_Length\n subchunk_separator:\n type: mixed\n value: '{{#rag.shared.Child_Delimiter#}}'\n type: tool\n height: 52\n id: '1751336942081'\n position:\n x: 144.55897745117755\n y: 282\n positionAbsolute:\n x: 144.55897745117755\n y: 282\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n author: TenTen\n desc: ''\n height: 446\n selected: true\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"In\n this step, the LLM is responsible for enriching and reorganizing content,\n along with images and tables. The goal is to maintain the integrity of image\n URLs and tables while providing contextual descriptions and summaries to\n enhance understanding. The content should be structured into well-organized\n paragraphs, using double newlines to separate them. The LLM should enrich\n the document by adding relevant descriptions for images and extracting key\n insights from tables, ensuring the content remains easy to retrieve within\n a Retrieval-Augmented Generation (RAG) system. The final output should preserve\n the original structure, making it more accessible for knowledge retrieval.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 446\n id: '1753967810859'\n position:\n x: -176.67459682201036\n y: 405.2790698865377\n positionAbsolute:\n x: -176.67459682201036\n y: 405.2790698865377\n selected: true\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n datasource_configurations: {}\n datasource_label: File\n datasource_name: upload-file\n datasource_parameters: {}\n fileExtensions:\n - pdf\n - doc\n - docx\n - pptx\n - ppt\n - jpg\n - png\n - jpeg\n plugin_id: langgenius\/file\n provider_name: file\n provider_type: local_file\n selected: false\n title: File\n type: datasource\n height: 52\n id: '1756915693835'\n position:\n x: -893.2836123260277\n y: 282\n positionAbsolute:\n x: -893.2836123260277\n y: 282\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n context:\n enabled: false\n variable_selector: []\n model:\n completion_params:\n temperature: 0.7\n mode: chat\n name: claude-3-5-sonnet-20240620\n provider: langgenius\/anthropic\/anthropic\n prompt_template:\n - id: beb97761-d30d-4549-9b67-de1b8292e43d\n role: system\n text: \"You are an AI document assistant. \\nYour tasks are:\\nEnrich the content\\\n \\ contextually:\\nAdd meaningful descriptions for each image.\\nSummarize\\\n \\ key information from each table.\\nOutput the enriched content\u00a0with clear\\\n \\ annotations showing the\u00a0corresponding image and table positions, so\\\n \\ the text can later be aligned back into the original document. Preserve\\\n \\ any ![image] URLs from the input text.\\nYou will receive two inputs:\\n\\\n The file and text\u00a0(may contain images url and tables).\\nThe final output\\\n \\ should be a\u00a0single, enriched version of the original document with ![image]\\\n \\ url preserved.\\nGenerate output directly without saying words like:\\\n \\ Here's the enriched version of the original text with the image description\\\n \\ inserted.\"\n - id: f92ef0cd-03a7-48a7-80e8-bcdc965fb399\n role: user\n text: The file is {{#1756915693835.file#}} and the text are\u00a0{{#1758027159239.text#}}.\n selected: false\n title: LLM\n type: llm\n vision:\n configs:\n detail: high\n variable_selector:\n - '1756915693835'\n - file\n enabled: true\n height: 88\n id: '1758002850987'\n position:\n x: -176.67459682201036\n y: 282\n positionAbsolute:\n x: -176.67459682201036\n y: 282\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n is_team_authorization: true\n paramSchemas:\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: The file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg,\n jpeg)\n ja_JP: \u89e3\u6790\u3059\u308b\u30d5\u30a1\u30a4\u30eb(pdf\u3001ppt\u3001pptx\u3001doc\u3001docx\u3001png\u3001jpg\u3001jpeg\u3092\u30b5\u30dd\u30fc\u30c8)\n pt_BR: The file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg,\n jpeg)\n zh_Hans: \u7528\u4e8e\u89e3\u6790\u7684\u6587\u4ef6(\u652f\u6301 pdf, ppt, pptx, doc, docx, png, jpg, jpeg)\n label:\n en_US: file\n ja_JP: file\n pt_BR: file\n zh_Hans: file\n llm_description: The file to be parsed (support pdf, ppt, pptx, doc, docx,\n png, jpg, jpeg)\n max: null\n min: null\n name: file\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: file\n - auto_generate: null\n default: auto\n form: form\n human_description:\n en_US: (For local deployment v1 and v2) Parsing method, can be auto, ocr,\n or txt. Default is auto. If results are not satisfactory, try ocr\n ja_JP: \uff08\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8v1\u3068v2\u7528\uff09\u89e3\u6790\u65b9\u6cd5\u306f\u3001auto\u3001ocr\u3001\u307e\u305f\u306ftxt\u306e\u3044\u305a\u308c\u304b\u3067\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fauto\u3067\u3059\u3002\u7d50\u679c\u304c\u6e80\u8db3\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u3001ocr\u3092\u8a66\u3057\u3066\u304f\u3060\u3055\u3044\n pt_BR: (For local deployment v1 and v2) Parsing method, can be auto, ocr,\n or txt. Default is auto. If results are not satisfactory, try ocr\n zh_Hans: \uff08\u7528\u4e8e\u672c\u5730\u90e8\u7f72v1\u548cv2\u7248\u672c\uff09\u89e3\u6790\u65b9\u6cd5\uff0c\u53ef\u4ee5\u662fauto, ocr, \u6216 txt\u3002\u9ed8\u8ba4\u662fauto\u3002\u5982\u679c\u7ed3\u679c\u4e0d\u7406\u60f3\uff0c\u8bf7\u5c1d\u8bd5ocr\n label:\n en_US: parse method\n ja_JP: \u89e3\u6790\u65b9\u6cd5\n pt_BR: parse method\n zh_Hans: \u89e3\u6790\u65b9\u6cd5\n llm_description: (For local deployment v1 and v2) Parsing method, can be\n auto, ocr, or txt. Default is auto. If results are not satisfactory, try\n ocr\n max: null\n min: null\n name: parse_method\n options:\n - icon: ''\n label:\n en_US: auto\n ja_JP: auto\n pt_BR: auto\n zh_Hans: auto\n value: auto\n - icon: ''\n label:\n en_US: ocr\n ja_JP: ocr\n pt_BR: ocr\n zh_Hans: ocr\n value: ocr\n - icon: ''\n label:\n en_US: txt\n ja_JP: txt\n pt_BR: txt\n zh_Hans: txt\n value: txt\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: select\n - auto_generate: null\n default: 1\n form: form\n human_description:\n en_US: (For official API and local deployment v2) Whether to enable formula\n recognition\n ja_JP: \uff08\u516c\u5f0fAPI\u7528\u3068\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8v2\u7528\uff09\u6570\u5f0f\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\u3069\u3046\u304b\n pt_BR: (For official API and local deployment v2) Whether to enable formula\n recognition\n zh_Hans: \uff08\u7528\u4e8e\u5b98\u65b9API\u548c\u672c\u5730\u90e8\u7f72v2\u7248\u672c\uff09\u662f\u5426\u5f00\u542f\u516c\u5f0f\u8bc6\u522b\n label:\n en_US: Enable formula recognition\n ja_JP: \u6570\u5f0f\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\n pt_BR: Enable formula recognition\n zh_Hans: \u5f00\u542f\u516c\u5f0f\u8bc6\u522b\n llm_description: (For official API and local deployment v2) Whether to enable\n formula recognition\n max: null\n min: null\n name: enable_formula\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n - auto_generate: null\n default: 1\n form: form\n human_description:\n en_US: (For official API and local deployment v2) Whether to enable table\n recognition\n ja_JP: \uff08\u516c\u5f0fAPI\u7528\u3068\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8v2\u7528\uff09\u8868\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\u3069\u3046\u304b\n pt_BR: (For official API and local deployment v2) Whether to enable table\n recognition\n zh_Hans: \uff08\u7528\u4e8e\u5b98\u65b9API\u548c\u672c\u5730\u90e8\u7f72v2\u7248\u672c\uff09\u662f\u5426\u5f00\u542f\u8868\u683c\u8bc6\u522b\n label:\n en_US: Enable table recognition\n ja_JP: \u8868\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\n pt_BR: Enable table recognition\n zh_Hans: \u5f00\u542f\u8868\u683c\u8bc6\u522b\n llm_description: (For official API and local deployment v2) Whether to enable\n table recognition\n max: null\n min: null\n name: enable_table\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n - auto_generate: null\n default: auto\n form: form\n human_description:\n en_US: '(For official API and local deployment v2) Specify document language,\n default ch, can be set to auto(local deployment need to specify the\n language, default ch), other optional value list see: https:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/version3.x\/pipeline_usage\/OCR.html#5'\n ja_JP: \uff08\u516c\u5f0fAPI\u7528\u3068\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8v2\u7528\uff09\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u8a00\u8a9e\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fch\u3067\u3001auto\u306b\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002auto\u306e\u5834\u5408\uff08\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3067\u306f\u8a00\u8a9e\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fch\u3067\u3059\uff09\u3001\u30e2\u30c7\u30eb\u306f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u8a00\u8a9e\u3092\u81ea\u52d5\u7684\u306b\u8b58\u5225\u3057\u307e\u3059\u3002\u4ed6\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u5024\u30ea\u30b9\u30c8\u306b\u3064\u3044\u3066\u306f\u3001\u6b21\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff1ahttps:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/version3.x\/pipeline_usage\/OCR.html#5\n pt_BR: '(For official API and local deployment v2) Specify document language,\n default ch, can be set to auto(local deployment need to specify the\n language, default ch), other optional value list see: https:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/version3.x\/pipeline_usage\/OCR.html#5'\n zh_Hans: \uff08\u4ec5\u9650\u5b98\u65b9api\u548c\u672c\u5730\u90e8\u7f72v2\u7248\u672c\uff09\u6307\u5b9a\u6587\u6863\u8bed\u8a00\uff0c\u9ed8\u8ba4 ch\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e3aauto\uff0c\u5f53\u4e3aauto\u65f6\u6a21\u578b\u4f1a\u81ea\u52a8\u8bc6\u522b\u6587\u6863\u8bed\u8a00\uff08\u672c\u5730\u90e8\u7f72\u9700\u8981\u6307\u5b9a\u660e\u786e\u7684\u8bed\u8a00\uff0c\u9ed8\u8ba4ch\uff09\uff0c\u5176\u4ed6\u53ef\u9009\u503c\u5217\u8868\u8be6\u89c1\uff1ahttps:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/version3.x\/pipeline_usage\/OCR.html#5\n label:\n en_US: Document language\n ja_JP: \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u8a00\u8a9e\n pt_BR: Document language\n zh_Hans: \u6587\u6863\u8bed\u8a00\n llm_description: '(For official API and local deployment v2) Specify document\n language, default ch, can be set to auto(local deployment need to specify\n the language, default ch), other optional value list see: https:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/version3.x\/pipeline_usage\/OCR.html#5'\n max: null\n min: null\n name: language\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: 0\n form: form\n human_description:\n en_US: (For official API) Whether to enable OCR recognition\n ja_JP: \uff08\u516c\u5f0fAPI\u7528\uff09OCR\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\u3069\u3046\u304b\n pt_BR: (For official API) Whether to enable OCR recognition\n zh_Hans: \uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u662f\u5426\u5f00\u542fOCR\u8bc6\u522b\n label:\n en_US: Enable OCR recognition\n ja_JP: OCR\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\n pt_BR: Enable OCR recognition\n zh_Hans: \u5f00\u542fOCR\u8bc6\u522b\n llm_description: (For official API) Whether to enable OCR recognition\n max: null\n min: null\n name: enable_ocr\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n - auto_generate: null\n default: '[]'\n form: form\n human_description:\n en_US: '(For official API) Example: [\"docx\",\"html\"], markdown, json are\n the default export formats, no need to set, this parameter only supports\n one or more of docx, html, latex'\n ja_JP: \uff08\u516c\u5f0fAPI\u7528\uff09\u4f8b\uff1a[\"docx\",\"html\"]\u3001markdown\u3001json\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u5f62\u5f0f\u3067\u3042\u308a\u3001\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3053\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u3001docx\u3001html\u3001latex\u306e3\u3064\u306e\u5f62\u5f0f\u306e\u3044\u305a\u308c\u304b\u307e\u305f\u306f\u8907\u6570\u306e\u307f\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u307e\u3059\n pt_BR: '(For official API) Example: [\"docx\",\"html\"], markdown, json are\n the default export formats, no need to set, this parameter only supports\n one or more of docx, html, latex'\n zh_Hans: \uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u793a\u4f8b\uff1a[\"docx\",\"html\"],markdown\u3001json\u4e3a\u9ed8\u8ba4\u5bfc\u51fa\u683c\u5f0f\uff0c\u65e0\u987b\u8bbe\u7f6e\uff0c\u8be5\u53c2\u6570\u4ec5\u652f\u6301docx\u3001html\u3001latex\u4e09\u79cd\u683c\u5f0f\u4e2d\u7684\u4e00\u4e2a\u6216\u591a\u4e2a\n label:\n en_US: Extra export formats\n ja_JP: \u8ffd\u52a0\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u5f62\u5f0f\n pt_BR: Extra export formats\n zh_Hans: \u989d\u5916\u5bfc\u51fa\u683c\u5f0f\n llm_description: '(For official API) Example: [\"docx\",\"html\"], markdown,\n json are the default export formats, no need to set, this parameter only\n supports one or more of docx, html, latex'\n max: null\n min: null\n name: extra_formats\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: pipeline\n form: form\n human_description:\n en_US: '(For local deployment v2) Example: pipeline, vlm-transformers,\n vlm-sglang-engine, vlm-sglang-client, default is pipeline'\n ja_JP: \uff08\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8v2\u7528\uff09\u4f8b\uff1apipeline\u3001vlm-transformers\u3001vlm-sglang-engine\u3001vlm-sglang-client\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306fpipeline\n pt_BR: '(For local deployment v2) Example: pipeline, vlm-transformers,\n vlm-sglang-engine, vlm-sglang-client, default is pipeline'\n zh_Hans: \uff08\u7528\u4e8e\u672c\u5730\u90e8\u7f72v2\u7248\u672c\uff09\u793a\u4f8b\uff1apipeline\u3001vlm-transformers\u3001vlm-sglang-engine\u3001vlm-sglang-client\uff0c\u9ed8\u8ba4\u503c\u4e3apipeline\n label:\n en_US: Backend type\n ja_JP: \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30bf\u30a4\u30d7\n pt_BR: Backend type\n zh_Hans: \u89e3\u6790\u540e\u7aef\n llm_description: '(For local deployment v2) Example: pipeline, vlm-transformers,\n vlm-sglang-engine, vlm-sglang-client, default is pipeline'\n max: null\n min: null\n name: backend\n options:\n - icon: ''\n label:\n en_US: pipeline\n ja_JP: pipeline\n pt_BR: pipeline\n zh_Hans: pipeline\n value: pipeline\n - icon: ''\n label:\n en_US: vlm-transformers\n ja_JP: vlm-transformers\n pt_BR: vlm-transformers\n zh_Hans: vlm-transformers\n value: vlm-transformers\n - icon: ''\n label:\n en_US: vlm-sglang-engine\n ja_JP: vlm-sglang-engine\n pt_BR: vlm-sglang-engine\n zh_Hans: vlm-sglang-engine\n value: vlm-sglang-engine\n - icon: ''\n label:\n en_US: vlm-sglang-client\n ja_JP: vlm-sglang-client\n pt_BR: vlm-sglang-client\n zh_Hans: vlm-sglang-client\n value: vlm-sglang-client\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: select\n - auto_generate: null\n default: ''\n form: form\n human_description:\n en_US: '(For local deployment v2 when backend is vlm-sglang-client) Example:\n http:\/\/127.0.0.1:8000, default is empty'\n ja_JP: \uff08\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8v2\u7528 \u89e3\u6790\u5f8c\u7aef\u304cvlm-sglang-client\u306e\u5834\u5408\uff09\u4f8b\uff1ahttp:\/\/127.0.0.1:8000\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306f\u7a7a\n pt_BR: '(For local deployment v2 when backend is vlm-sglang-client) Example:\n http:\/\/127.0.0.1:8000, default is empty'\n zh_Hans: \uff08\u7528\u4e8e\u672c\u5730\u90e8\u7f72v2\u7248\u672c \u89e3\u6790\u540e\u7aef\u4e3avlm-sglang-client\u65f6\uff09\u793a\u4f8b\uff1ahttp:\/\/127.0.0.1:8000\uff0c\u9ed8\u8ba4\u503c\u4e3a\u7a7a\n label:\n en_US: sglang-server url\n ja_JP: sglang-server\u30a2\u30c9\u30ec\u30b9\n pt_BR: sglang-server url\n zh_Hans: sglang-server\u5730\u5740\n llm_description: '(For local deployment v2 when backend is vlm-sglang-client)\n Example: http:\/\/127.0.0.1:8000, default is empty'\n max: null\n min: null\n name: sglang_server_url\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: string\n params:\n backend: ''\n enable_formula: ''\n enable_ocr: ''\n enable_table: ''\n extra_formats: ''\n file: ''\n language: ''\n parse_method: ''\n sglang_server_url: ''\n provider_id: langgenius\/mineru\/mineru\n provider_name: langgenius\/mineru\/mineru\n provider_type: builtin\n selected: false\n title: Parse File\n tool_configurations:\n backend:\n type: constant\n value: pipeline\n enable_formula:\n type: constant\n value: 1\n enable_ocr:\n type: constant\n value: true\n enable_table:\n type: constant\n value: 1\n extra_formats:\n type: mixed\n value: '[]'\n language:\n type: mixed\n value: auto\n parse_method:\n type: constant\n value: auto\n sglang_server_url:\n type: mixed\n value: ''\n tool_description: a tool for parsing text, tables, and images, supporting\n multiple formats such as pdf, pptx, docx, etc. supporting multiple languages\n such as English, Chinese, etc.\n tool_label: Parse File\n tool_name: parse-file\n tool_node_version: '2'\n tool_parameters:\n file:\n type: variable\n value:\n - '1756915693835'\n - file\n type: tool\n height: 270\n id: '1758027159239'\n position:\n x: -544.9739996945534\n y: 282\n positionAbsolute:\n x: -544.9739996945534\n y: 282\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n viewport:\n x: 679.9701291615181\n y: -191.49392257836791\n zoom: 0.8239704766223018\n rag_pipeline_variables:\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: paragraph\n label: Parent Mode\n max_length: 48\n options:\n - paragraph\n - full_doc\n placeholder: null\n required: true\n tooltips: 'Parent Mode provides two options: paragraph mode splits text into paragraphs\n as parent chunks for retrieval, while full_doc mode uses the entire document\n as a single parent chunk (text beyond 10,000 tokens will be truncated).'\n type: select\n unit: null\n variable: Parent_Mode\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: \\n\\n\n label: Parent Delimiter\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: A delimiter is the character used to separate text. \\n\\n is recommended\n for splitting the original document into large parent chunks. You can also use\n special delimiters defined by yourself.\n type: text-input\n unit: null\n variable: Parent_Delimiter\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: 1024\n label: Maximum Parent Length\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: number\n unit: tokens\n variable: Maximum_Parent_Length\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: \\n\n label: Child Delimiter\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: A delimiter is the character used to separate text. \\n is recommended\n for splitting parent chunks into small child chunks. You can also use special\n delimiters defined by yourself.\n type: text-input\n unit: null\n variable: Child_Delimiter\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: 256\n label: Maximum Child Length\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: ''\n type: number\n unit: tokens\n variable: Maximum_Child_Length\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: true\n label: Replace consecutive spaces, newlines and tabs.\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: clean_1\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: null\n label: Delete all URLs and email addresses.\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: ''\n type: checkbox\n unit: null\n variable: clean_2\n", + "graph": { + "edges": [ + { + "data": { + "isInLoop": false, + "sourceType": "tool", + "targetType": "knowledge-index" + }, + "id": "1751336942081-source-1750400198569-target", + "selected": false, + "source": "1751336942081", + "sourceHandle": "source", + "target": "1750400198569", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "llm", + "targetType": "tool" + }, + "id": "1758002850987-source-1751336942081-target", + "source": "1758002850987", + "sourceHandle": "source", + "target": "1751336942081", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInIteration": false, + "isInLoop": false, + "sourceType": "datasource", + "targetType": "tool" + }, + "id": "1756915693835-source-1758027159239-target", + "source": "1756915693835", + "sourceHandle": "source", + "target": "1758027159239", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "tool", + "targetType": "llm" + }, + "id": "1758027159239-source-1758002850987-target", + "source": "1758027159239", + "sourceHandle": "source", + "target": "1758002850987", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + } + ], + "nodes": [ + { + "data": { + "chunk_structure": "hierarchical_model", + "embedding_model": "jina-embeddings-v2-base-en", + "embedding_model_provider": "langgenius\/jina\/jina", + "index_chunk_variable_selector": [ + "1751336942081", + "result" + ], + "indexing_technique": "high_quality", + "keyword_number": 10, + "retrieval_model": { + "reranking_enable": true, + "reranking_mode": "reranking_model", + "reranking_model": { + "reranking_model_name": "jina-reranker-v1-base-en", + "reranking_provider_name": "langgenius\/jina\/jina" + }, + "score_threshold": 0, + "score_threshold_enabled": false, + "search_method": "hybrid_search", + "top_k": 3, + "weights": null + }, + "selected": false, + "title": "Knowledge Base", + "type": "knowledge-index" + }, + "height": 114, + "id": "1750400198569", + "position": { + "x": 474.7618603027596, + "y": 282 + }, + "positionAbsolute": { + "x": 474.7618603027596, + "y": 282 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 458, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Currently we support 5 types of \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Data Sources\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\": File Upload, Text Input, Online Drive, Online Doc, and Web Crawler. Different types of Data Sources have different input and output types. The output of File Upload and Online Drive are files, while the output of Online Doc and WebCrawler are pages. You can find more Data Sources on our Marketplace.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A Knowledge Pipeline can have multiple data sources. Each data source can be selected more than once with different settings. Each added data source is a tab on the add file interface. However, each time the user can only select one data source to import the file and trigger its subsequent processing.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 458, + "id": "1751264451381", + "position": { + "x": -893.2836123260277, + "y": 378.2537898330178 + }, + "positionAbsolute": { + "x": -893.2836123260277, + "y": 378.2537898330178 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 260, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Knowledge Pipeline\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" starts with Data Source as the starting node and ends with the knowledge base node. The general steps are: import documents from the data source \u2192 use extractor to extract document content \u2192 split and clean content into structured chunks \u2192 store in the knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The user input variables required by the Knowledge Pipeline node must be predefined and managed via the Input Field section located in the top-right corner of the orchestration canvas. It determines what input fields the end users will see and need to fill in when importing files to the knowledge base through this pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Unique Inputs: Input fields defined here are only available to the selected data source and its downstream nodes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Global Inputs: These input fields are shared across all subsequent nodes after the data source and are typically set during the Process Documents step.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For more information, see \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"https:\/\/docs.dify.ai\/en\/guides\/knowledge-base\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer\",\"target\":null,\"title\":null,\"url\":\"https:\/\/docs.dify.ai\/en\/guides\/knowledge-base\"},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\".\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 1182 + }, + "height": 260, + "id": "1751266376760", + "position": { + "x": -704.0614991386192, + "y": -73.30453110517956 + }, + "positionAbsolute": { + "x": -704.0614991386192, + "y": -73.30453110517956 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 1182 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 304, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"MinerU\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" is an advanced open-source document extractor designed specifically to convert complex, unstructured documents\u2014such as PDFs, Word files, and PPTs\u2014into high-quality, machine-readable formats like Markdown and JSON. MinerU addresses challenges in document parsing such as layout detection, formula recognition, and multi-language support, which are critical for generating high-quality training corpora for LLMs.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 304, + "id": "1751266402561", + "position": { + "x": -555.2228329530462, + "y": 592.0458661166498 + }, + "positionAbsolute": { + "x": -555.2228329530462, + "y": 592.0458661166498 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 554, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" addresses the dilemma of context and precision by leveraging a two-tier hierarchical approach that effectively balances the trade-off between accurate matching and comprehensive contextual information in RAG systems. \",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Here is the essential mechanism of this structured, two-level information access:\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"- Query Matching with Child Chunks: Small, focused pieces of information, often as concise as a single sentence within a paragraph, are used to match the user's query. These child chunks enable precise and relevant initial retrieval.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"- Contextual Enrichment with Parent Chunks: Larger, encompassing sections\u2014such as a paragraph, a section, or even an entire document\u2014that include the matched child chunks are then retrieved. These parent chunks provide comprehensive context for the Language Model (LLM).\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 554, + "id": "1751266447821", + "position": { + "x": 153.2996965006646, + "y": 378.2537898330178 + }, + "positionAbsolute": { + "x": 153.2996965006646, + "y": 378.2537898330178 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 411, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The knowledge base provides two indexing methods:\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0and\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Economical\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", each with different retrieval strategies. High-Quality mode uses embeddings for vectorization and supports vector, full-text, and hybrid retrieval, offering more accurate results but higher resource usage. Economical mode uses keyword-based inverted indexing with no token consumption but lower accuracy; upgrading to High-Quality is possible, but downgrading requires creating a new knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"* Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0and\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0only support the\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0indexing method.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 411, + "id": "1751266580099", + "position": { + "x": 482.3389174180554, + "y": 437.9839361130071 + }, + "positionAbsolute": { + "x": 482.3389174180554, + "y": 437.9839361130071 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "is_team_authorization": true, + "output_schema": { + "properties": { + "result": { + "description": "Parent child chunks result", + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "paramSchemas": [ + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "", + "ja_JP": "", + "pt_BR": "", + "zh_Hans": "" + }, + "label": { + "en_US": "Input Content", + "ja_JP": "Input Content", + "pt_BR": "Conte\u00fado de Entrada", + "zh_Hans": "\u8f93\u5165\u6587\u672c" + }, + "llm_description": "The text you want to chunk.", + "max": null, + "min": null, + "name": "input_text", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": "paragraph", + "form": "llm", + "human_description": { + "en_US": "Split text into paragraphs based on separator and maximum chunk length, using split text as parent block or entire document as parent block and directly retrieve.", + "ja_JP": "Split text into paragraphs based on separator and maximum chunk length, using split text as parent block or entire document as parent block and directly retrieve.", + "pt_BR": "Dividir texto em par\u00e1grafos com base no separador e no comprimento m\u00e1ximo do bloco, usando o texto dividido como bloco pai ou documento completo como bloco pai e diretamente recuper\u00e1-lo.", + "zh_Hans": "\u6839\u636e\u5206\u9694\u7b26\u548c\u6700\u5927\u5757\u957f\u5ea6\u5c06\u6587\u672c\u62c6\u5206\u4e3a\u6bb5\u843d\uff0c\u4f7f\u7528\u62c6\u5206\u6587\u672c\u4f5c\u4e3a\u68c0\u7d22\u7684\u7236\u5757\u6216\u6574\u4e2a\u6587\u6863\u7528\u4f5c\u7236\u5757\u5e76\u76f4\u63a5\u68c0\u7d22\u3002" + }, + "label": { + "en_US": "Parent Mode", + "ja_JP": "Parent Mode", + "pt_BR": "Modo Pai", + "zh_Hans": "\u7236\u5757\u6a21\u5f0f" + }, + "llm_description": "Split text into paragraphs based on separator and maximum chunk length, using split text as parent block or entire document as parent block and directly retrieve.", + "max": null, + "min": null, + "name": "parent_mode", + "options": [ + { + "label": { + "en_US": "Paragraph", + "ja_JP": "Paragraph", + "pt_BR": "Par\u00e1grafo", + "zh_Hans": "\u6bb5\u843d" + }, + "value": "paragraph" + }, + { + "label": { + "en_US": "Full Document", + "ja_JP": "Full Document", + "pt_BR": "Documento Completo", + "zh_Hans": "\u5168\u6587" + }, + "value": "full_doc" + } + ], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "select" + }, + { + "auto_generate": null, + "default": "\n\n", + "form": "llm", + "human_description": { + "en_US": "Separator used for chunking", + "ja_JP": "Separator used for chunking", + "pt_BR": "Separador usado para divis\u00e3o", + "zh_Hans": "\u7528\u4e8e\u5206\u5757\u7684\u5206\u9694\u7b26" + }, + "label": { + "en_US": "Parent Delimiter", + "ja_JP": "Parent Delimiter", + "pt_BR": "Separador de Pai", + "zh_Hans": "\u7236\u5757\u5206\u9694\u7b26" + }, + "llm_description": "The separator used to split chunks", + "max": null, + "min": null, + "name": "separator", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": 1024, + "form": "llm", + "human_description": { + "en_US": "Maximum length for chunking", + "ja_JP": "Maximum length for chunking", + "pt_BR": "Comprimento m\u00e1ximo para divis\u00e3o", + "zh_Hans": "\u7528\u4e8e\u5206\u5757\u7684\u6700\u5927\u957f\u5ea6" + }, + "label": { + "en_US": "Maximum Parent Chunk Length", + "ja_JP": "Maximum Parent Chunk Length", + "pt_BR": "Comprimento M\u00e1ximo do Bloco Pai", + "zh_Hans": "\u6700\u5927\u7236\u5757\u957f\u5ea6" + }, + "llm_description": "Maximum length allowed per chunk", + "max": null, + "min": null, + "name": "max_length", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "number" + }, + { + "auto_generate": null, + "default": ". ", + "form": "llm", + "human_description": { + "en_US": "Separator used for subchunking", + "ja_JP": "Separator used for subchunking", + "pt_BR": "Separador usado para subdivis\u00e3o", + "zh_Hans": "\u7528\u4e8e\u5b50\u5206\u5757\u7684\u5206\u9694\u7b26" + }, + "label": { + "en_US": "Child Delimiter", + "ja_JP": "Child Delimiter", + "pt_BR": "Separador de Subdivis\u00e3o", + "zh_Hans": "\u5b50\u5206\u5757\u5206\u9694\u7b26" + }, + "llm_description": "The separator used to split subchunks", + "max": null, + "min": null, + "name": "subchunk_separator", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": 512, + "form": "llm", + "human_description": { + "en_US": "Maximum length for subchunking", + "ja_JP": "Maximum length for subchunking", + "pt_BR": "Comprimento m\u00e1ximo para subdivis\u00e3o", + "zh_Hans": "\u7528\u4e8e\u5b50\u5206\u5757\u7684\u6700\u5927\u957f\u5ea6" + }, + "label": { + "en_US": "Maximum Child Chunk Length", + "ja_JP": "Maximum Child Chunk Length", + "pt_BR": "Comprimento M\u00e1ximo de Subdivis\u00e3o", + "zh_Hans": "\u5b50\u5206\u5757\u6700\u5927\u957f\u5ea6" + }, + "llm_description": "Maximum length allowed per subchunk", + "max": null, + "min": null, + "name": "subchunk_max_length", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "number" + }, + { + "auto_generate": null, + "default": 0, + "form": "llm", + "human_description": { + "en_US": "Whether to remove consecutive spaces, newlines and tabs", + "ja_JP": "Whether to remove consecutive spaces, newlines and tabs", + "pt_BR": "Se deve remover espa\u00e7os extras no texto", + "zh_Hans": "\u662f\u5426\u79fb\u9664\u6587\u672c\u4e2d\u7684\u8fde\u7eed\u7a7a\u683c\u3001\u6362\u884c\u7b26\u548c\u5236\u8868\u7b26" + }, + "label": { + "en_US": "Replace consecutive spaces, newlines and tabs", + "ja_JP": "Replace consecutive spaces, newlines and tabs", + "pt_BR": "Substituir espa\u00e7os consecutivos, novas linhas e guias", + "zh_Hans": "\u66ff\u6362\u8fde\u7eed\u7a7a\u683c\u3001\u6362\u884c\u7b26\u548c\u5236\u8868\u7b26" + }, + "llm_description": "Whether to remove consecutive spaces, newlines and tabs", + "max": null, + "min": null, + "name": "remove_extra_spaces", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + }, + { + "auto_generate": null, + "default": 0, + "form": "llm", + "human_description": { + "en_US": "Whether to remove URLs and emails in the text", + "ja_JP": "Whether to remove URLs and emails in the text", + "pt_BR": "Se deve remover URLs e e-mails no texto", + "zh_Hans": "\u662f\u5426\u79fb\u9664\u6587\u672c\u4e2d\u7684URL\u548c\u7535\u5b50\u90ae\u4ef6\u5730\u5740" + }, + "label": { + "en_US": "Delete all URLs and email addresses", + "ja_JP": "Delete all URLs and email addresses", + "pt_BR": "Remover todas as URLs e e-mails", + "zh_Hans": "\u5220\u9664\u6240\u6709URL\u548c\u7535\u5b50\u90ae\u4ef6\u5730\u5740" + }, + "llm_description": "Whether to remove URLs and emails in the text", + "max": null, + "min": null, + "name": "remove_urls_emails", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + } + ], + "params": { + "input_text": "", + "max_length": "", + "parent_mode": "", + "remove_extra_spaces": "", + "remove_urls_emails": "", + "separator": "", + "subchunk_max_length": "", + "subchunk_separator": "" + }, + "provider_id": "langgenius\/parentchild_chunker\/parentchild_chunker", + "provider_name": "langgenius\/parentchild_chunker\/parentchild_chunker", + "provider_type": "builtin", + "selected": false, + "title": "Parent-child Chunker", + "tool_configurations": {}, + "tool_description": "Process documents into parent-child chunk structures", + "tool_label": "Parent-child Chunker", + "tool_name": "parentchild_chunker", + "tool_node_version": "2", + "tool_parameters": { + "input_text": { + "type": "mixed", + "value": "{{#1758002850987.text#}}" + }, + "max_length": { + "type": "variable", + "value": [ + "rag", + "shared", + "Maximum_Parent_Length" + ] + }, + "parent_mode": { + "type": "variable", + "value": [ + "rag", + "shared", + "Parent_Mode" + ] + }, + "remove_extra_spaces": { + "type": "variable", + "value": [ + "rag", + "shared", + "clean_1" + ] + }, + "remove_urls_emails": { + "type": "variable", + "value": [ + "rag", + "shared", + "clean_2" + ] + }, + "separator": { + "type": "mixed", + "value": "{{#rag.shared.Parent_Delimiter#}}" + }, + "subchunk_max_length": { + "type": "variable", + "value": [ + "rag", + "shared", + "Maximum_Child_Length" + ] + }, + "subchunk_separator": { + "type": "mixed", + "value": "{{#rag.shared.Child_Delimiter#}}" + } + }, + "type": "tool" + }, + "height": 52, + "id": "1751336942081", + "position": { + "x": 144.55897745117755, + "y": 282 + }, + "positionAbsolute": { + "x": 144.55897745117755, + "y": 282 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 446, + "selected": true, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"In this step, the LLM is responsible for enriching and reorganizing content, along with images and tables. The goal is to maintain the integrity of image URLs and tables while providing contextual descriptions and summaries to enhance understanding. The content should be structured into well-organized paragraphs, using double newlines to separate them. The LLM should enrich the document by adding relevant descriptions for images and extracting key insights from tables, ensuring the content remains easy to retrieve within a Retrieval-Augmented Generation (RAG) system. The final output should preserve the original structure, making it more accessible for knowledge retrieval.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 446, + "id": "1753967810859", + "position": { + "x": -176.67459682201036, + "y": 405.2790698865377 + }, + "positionAbsolute": { + "x": -176.67459682201036, + "y": 405.2790698865377 + }, + "selected": true, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "File", + "datasource_name": "upload-file", + "datasource_parameters": {}, + "fileExtensions": [ + "pdf", + "doc", + "docx", + "pptx", + "ppt", + "jpg", + "png", + "jpeg" + ], + "plugin_id": "langgenius\/file", + "provider_name": "file", + "provider_type": "local_file", + "selected": false, + "title": "File", + "type": "datasource" + }, + "height": 52, + "id": "1756915693835", + "position": { + "x": -893.2836123260277, + "y": 282 + }, + "positionAbsolute": { + "x": -893.2836123260277, + "y": 282 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "context": { + "enabled": false, + "variable_selector": [] + }, + "model": { + "completion_params": { + "temperature": 0.7 + }, + "mode": "chat", + "name": "claude-3-5-sonnet-20240620", + "provider": "langgenius\/anthropic\/anthropic" + }, + "prompt_template": [ + { + "id": "beb97761-d30d-4549-9b67-de1b8292e43d", + "role": "system", + "text": "You are an AI document assistant. \nYour tasks are:\nEnrich the content contextually:\nAdd meaningful descriptions for each image.\nSummarize key information from each table.\nOutput the enriched content\u00a0with clear annotations showing the\u00a0corresponding image and table positions, so the text can later be aligned back into the original document. Preserve any ![image] URLs from the input text.\nYou will receive two inputs:\nThe file and text\u00a0(may contain images url and tables).\nThe final output should be a\u00a0single, enriched version of the original document with ![image] url preserved.\nGenerate output directly without saying words like: Here's the enriched version of the original text with the image description inserted." + }, + { + "id": "f92ef0cd-03a7-48a7-80e8-bcdc965fb399", + "role": "user", + "text": "The file is {{#1756915693835.file#}} and the text are\u00a0{{#1758027159239.text#}}." + } + ], + "selected": false, + "title": "LLM", + "type": "llm", + "vision": { + "configs": { + "detail": "high", + "variable_selector": [ + "1756915693835", + "file" + ] + }, + "enabled": true + } + }, + "height": 88, + "id": "1758002850987", + "position": { + "x": -176.67459682201036, + "y": 282 + }, + "positionAbsolute": { + "x": -176.67459682201036, + "y": 282 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "is_team_authorization": true, + "paramSchemas": [ + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "The file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "ja_JP": "\u89e3\u6790\u3059\u308b\u30d5\u30a1\u30a4\u30eb(pdf\u3001ppt\u3001pptx\u3001doc\u3001docx\u3001png\u3001jpg\u3001jpeg\u3092\u30b5\u30dd\u30fc\u30c8)", + "pt_BR": "The file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "zh_Hans": "\u7528\u4e8e\u89e3\u6790\u7684\u6587\u4ef6(\u652f\u6301 pdf, ppt, pptx, doc, docx, png, jpg, jpeg)" + }, + "label": { + "en_US": "file", + "ja_JP": "file", + "pt_BR": "file", + "zh_Hans": "file" + }, + "llm_description": "The file to be parsed (support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "max": null, + "min": null, + "name": "file", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "file" + }, + { + "auto_generate": null, + "default": "auto", + "form": "form", + "human_description": { + "en_US": "(For local deployment v1 and v2) Parsing method, can be auto, ocr, or txt. Default is auto. If results are not satisfactory, try ocr", + "ja_JP": "\uff08\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8v1\u3068v2\u7528\uff09\u89e3\u6790\u65b9\u6cd5\u306f\u3001auto\u3001ocr\u3001\u307e\u305f\u306ftxt\u306e\u3044\u305a\u308c\u304b\u3067\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fauto\u3067\u3059\u3002\u7d50\u679c\u304c\u6e80\u8db3\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u3001ocr\u3092\u8a66\u3057\u3066\u304f\u3060\u3055\u3044", + "pt_BR": "(For local deployment v1 and v2) Parsing method, can be auto, ocr, or txt. Default is auto. If results are not satisfactory, try ocr", + "zh_Hans": "\uff08\u7528\u4e8e\u672c\u5730\u90e8\u7f72v1\u548cv2\u7248\u672c\uff09\u89e3\u6790\u65b9\u6cd5\uff0c\u53ef\u4ee5\u662fauto, ocr, \u6216 txt\u3002\u9ed8\u8ba4\u662fauto\u3002\u5982\u679c\u7ed3\u679c\u4e0d\u7406\u60f3\uff0c\u8bf7\u5c1d\u8bd5ocr" + }, + "label": { + "en_US": "parse method", + "ja_JP": "\u89e3\u6790\u65b9\u6cd5", + "pt_BR": "parse method", + "zh_Hans": "\u89e3\u6790\u65b9\u6cd5" + }, + "llm_description": "(For local deployment v1 and v2) Parsing method, can be auto, ocr, or txt. Default is auto. If results are not satisfactory, try ocr", + "max": null, + "min": null, + "name": "parse_method", + "options": [ + { + "icon": "", + "label": { + "en_US": "auto", + "ja_JP": "auto", + "pt_BR": "auto", + "zh_Hans": "auto" + }, + "value": "auto" + }, + { + "icon": "", + "label": { + "en_US": "ocr", + "ja_JP": "ocr", + "pt_BR": "ocr", + "zh_Hans": "ocr" + }, + "value": "ocr" + }, + { + "icon": "", + "label": { + "en_US": "txt", + "ja_JP": "txt", + "pt_BR": "txt", + "zh_Hans": "txt" + }, + "value": "txt" + } + ], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "select" + }, + { + "auto_generate": null, + "default": 1, + "form": "form", + "human_description": { + "en_US": "(For official API and local deployment v2) Whether to enable formula recognition", + "ja_JP": "\uff08\u516c\u5f0fAPI\u7528\u3068\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8v2\u7528\uff09\u6570\u5f0f\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\u3069\u3046\u304b", + "pt_BR": "(For official API and local deployment v2) Whether to enable formula recognition", + "zh_Hans": "\uff08\u7528\u4e8e\u5b98\u65b9API\u548c\u672c\u5730\u90e8\u7f72v2\u7248\u672c\uff09\u662f\u5426\u5f00\u542f\u516c\u5f0f\u8bc6\u522b" + }, + "label": { + "en_US": "Enable formula recognition", + "ja_JP": "\u6570\u5f0f\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b", + "pt_BR": "Enable formula recognition", + "zh_Hans": "\u5f00\u542f\u516c\u5f0f\u8bc6\u522b" + }, + "llm_description": "(For official API and local deployment v2) Whether to enable formula recognition", + "max": null, + "min": null, + "name": "enable_formula", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + }, + { + "auto_generate": null, + "default": 1, + "form": "form", + "human_description": { + "en_US": "(For official API and local deployment v2) Whether to enable table recognition", + "ja_JP": "\uff08\u516c\u5f0fAPI\u7528\u3068\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8v2\u7528\uff09\u8868\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\u3069\u3046\u304b", + "pt_BR": "(For official API and local deployment v2) Whether to enable table recognition", + "zh_Hans": "\uff08\u7528\u4e8e\u5b98\u65b9API\u548c\u672c\u5730\u90e8\u7f72v2\u7248\u672c\uff09\u662f\u5426\u5f00\u542f\u8868\u683c\u8bc6\u522b" + }, + "label": { + "en_US": "Enable table recognition", + "ja_JP": "\u8868\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b", + "pt_BR": "Enable table recognition", + "zh_Hans": "\u5f00\u542f\u8868\u683c\u8bc6\u522b" + }, + "llm_description": "(For official API and local deployment v2) Whether to enable table recognition", + "max": null, + "min": null, + "name": "enable_table", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + }, + { + "auto_generate": null, + "default": "auto", + "form": "form", + "human_description": { + "en_US": "(For official API and local deployment v2) Specify document language, default ch, can be set to auto(local deployment need to specify the language, default ch), other optional value list see: https:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/version3.x\/pipeline_usage\/OCR.html#5", + "ja_JP": "\uff08\u516c\u5f0fAPI\u7528\u3068\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8v2\u7528\uff09\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u8a00\u8a9e\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fch\u3067\u3001auto\u306b\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002auto\u306e\u5834\u5408\uff08\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u3067\u306f\u8a00\u8a9e\u3092\u6307\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fch\u3067\u3059\uff09\u3001\u30e2\u30c7\u30eb\u306f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u8a00\u8a9e\u3092\u81ea\u52d5\u7684\u306b\u8b58\u5225\u3057\u307e\u3059\u3002\u4ed6\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u5024\u30ea\u30b9\u30c8\u306b\u3064\u3044\u3066\u306f\u3001\u6b21\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff1ahttps:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/version3.x\/pipeline_usage\/OCR.html#5", + "pt_BR": "(For official API and local deployment v2) Specify document language, default ch, can be set to auto(local deployment need to specify the language, default ch), other optional value list see: https:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/version3.x\/pipeline_usage\/OCR.html#5", + "zh_Hans": "\uff08\u4ec5\u9650\u5b98\u65b9api\u548c\u672c\u5730\u90e8\u7f72v2\u7248\u672c\uff09\u6307\u5b9a\u6587\u6863\u8bed\u8a00\uff0c\u9ed8\u8ba4 ch\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e3aauto\uff0c\u5f53\u4e3aauto\u65f6\u6a21\u578b\u4f1a\u81ea\u52a8\u8bc6\u522b\u6587\u6863\u8bed\u8a00\uff08\u672c\u5730\u90e8\u7f72\u9700\u8981\u6307\u5b9a\u660e\u786e\u7684\u8bed\u8a00\uff0c\u9ed8\u8ba4ch\uff09\uff0c\u5176\u4ed6\u53ef\u9009\u503c\u5217\u8868\u8be6\u89c1\uff1ahttps:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/version3.x\/pipeline_usage\/OCR.html#5" + }, + "label": { + "en_US": "Document language", + "ja_JP": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u8a00\u8a9e", + "pt_BR": "Document language", + "zh_Hans": "\u6587\u6863\u8bed\u8a00" + }, + "llm_description": "(For official API and local deployment v2) Specify document language, default ch, can be set to auto(local deployment need to specify the language, default ch), other optional value list see: https:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/version3.x\/pipeline_usage\/OCR.html#5", + "max": null, + "min": null, + "name": "language", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": 0, + "form": "form", + "human_description": { + "en_US": "(For official API) Whether to enable OCR recognition", + "ja_JP": "\uff08\u516c\u5f0fAPI\u7528\uff09OCR\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\u3069\u3046\u304b", + "pt_BR": "(For official API) Whether to enable OCR recognition", + "zh_Hans": "\uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u662f\u5426\u5f00\u542fOCR\u8bc6\u522b" + }, + "label": { + "en_US": "Enable OCR recognition", + "ja_JP": "OCR\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b", + "pt_BR": "Enable OCR recognition", + "zh_Hans": "\u5f00\u542fOCR\u8bc6\u522b" + }, + "llm_description": "(For official API) Whether to enable OCR recognition", + "max": null, + "min": null, + "name": "enable_ocr", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + }, + { + "auto_generate": null, + "default": "[]", + "form": "form", + "human_description": { + "en_US": "(For official API) Example: [\"docx\",\"html\"], markdown, json are the default export formats, no need to set, this parameter only supports one or more of docx, html, latex", + "ja_JP": "\uff08\u516c\u5f0fAPI\u7528\uff09\u4f8b\uff1a[\"docx\",\"html\"]\u3001markdown\u3001json\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u5f62\u5f0f\u3067\u3042\u308a\u3001\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3053\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u3001docx\u3001html\u3001latex\u306e3\u3064\u306e\u5f62\u5f0f\u306e\u3044\u305a\u308c\u304b\u307e\u305f\u306f\u8907\u6570\u306e\u307f\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u307e\u3059", + "pt_BR": "(For official API) Example: [\"docx\",\"html\"], markdown, json are the default export formats, no need to set, this parameter only supports one or more of docx, html, latex", + "zh_Hans": "\uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u793a\u4f8b\uff1a[\"docx\",\"html\"],markdown\u3001json\u4e3a\u9ed8\u8ba4\u5bfc\u51fa\u683c\u5f0f\uff0c\u65e0\u987b\u8bbe\u7f6e\uff0c\u8be5\u53c2\u6570\u4ec5\u652f\u6301docx\u3001html\u3001latex\u4e09\u79cd\u683c\u5f0f\u4e2d\u7684\u4e00\u4e2a\u6216\u591a\u4e2a" + }, + "label": { + "en_US": "Extra export formats", + "ja_JP": "\u8ffd\u52a0\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u5f62\u5f0f", + "pt_BR": "Extra export formats", + "zh_Hans": "\u989d\u5916\u5bfc\u51fa\u683c\u5f0f" + }, + "llm_description": "(For official API) Example: [\"docx\",\"html\"], markdown, json are the default export formats, no need to set, this parameter only supports one or more of docx, html, latex", + "max": null, + "min": null, + "name": "extra_formats", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": "pipeline", + "form": "form", + "human_description": { + "en_US": "(For local deployment v2) Example: pipeline, vlm-transformers, vlm-sglang-engine, vlm-sglang-client, default is pipeline", + "ja_JP": "\uff08\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8v2\u7528\uff09\u4f8b\uff1apipeline\u3001vlm-transformers\u3001vlm-sglang-engine\u3001vlm-sglang-client\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306fpipeline", + "pt_BR": "(For local deployment v2) Example: pipeline, vlm-transformers, vlm-sglang-engine, vlm-sglang-client, default is pipeline", + "zh_Hans": "\uff08\u7528\u4e8e\u672c\u5730\u90e8\u7f72v2\u7248\u672c\uff09\u793a\u4f8b\uff1apipeline\u3001vlm-transformers\u3001vlm-sglang-engine\u3001vlm-sglang-client\uff0c\u9ed8\u8ba4\u503c\u4e3apipeline" + }, + "label": { + "en_US": "Backend type", + "ja_JP": "\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30bf\u30a4\u30d7", + "pt_BR": "Backend type", + "zh_Hans": "\u89e3\u6790\u540e\u7aef" + }, + "llm_description": "(For local deployment v2) Example: pipeline, vlm-transformers, vlm-sglang-engine, vlm-sglang-client, default is pipeline", + "max": null, + "min": null, + "name": "backend", + "options": [ + { + "icon": "", + "label": { + "en_US": "pipeline", + "ja_JP": "pipeline", + "pt_BR": "pipeline", + "zh_Hans": "pipeline" + }, + "value": "pipeline" + }, + { + "icon": "", + "label": { + "en_US": "vlm-transformers", + "ja_JP": "vlm-transformers", + "pt_BR": "vlm-transformers", + "zh_Hans": "vlm-transformers" + }, + "value": "vlm-transformers" + }, + { + "icon": "", + "label": { + "en_US": "vlm-sglang-engine", + "ja_JP": "vlm-sglang-engine", + "pt_BR": "vlm-sglang-engine", + "zh_Hans": "vlm-sglang-engine" + }, + "value": "vlm-sglang-engine" + }, + { + "icon": "", + "label": { + "en_US": "vlm-sglang-client", + "ja_JP": "vlm-sglang-client", + "pt_BR": "vlm-sglang-client", + "zh_Hans": "vlm-sglang-client" + }, + "value": "vlm-sglang-client" + } + ], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "select" + }, + { + "auto_generate": null, + "default": "", + "form": "form", + "human_description": { + "en_US": "(For local deployment v2 when backend is vlm-sglang-client) Example: http:\/\/127.0.0.1:8000, default is empty", + "ja_JP": "\uff08\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8v2\u7528 \u89e3\u6790\u5f8c\u7aef\u304cvlm-sglang-client\u306e\u5834\u5408\uff09\u4f8b\uff1ahttp:\/\/127.0.0.1:8000\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306f\u7a7a", + "pt_BR": "(For local deployment v2 when backend is vlm-sglang-client) Example: http:\/\/127.0.0.1:8000, default is empty", + "zh_Hans": "\uff08\u7528\u4e8e\u672c\u5730\u90e8\u7f72v2\u7248\u672c \u89e3\u6790\u540e\u7aef\u4e3avlm-sglang-client\u65f6\uff09\u793a\u4f8b\uff1ahttp:\/\/127.0.0.1:8000\uff0c\u9ed8\u8ba4\u503c\u4e3a\u7a7a" + }, + "label": { + "en_US": "sglang-server url", + "ja_JP": "sglang-server\u30a2\u30c9\u30ec\u30b9", + "pt_BR": "sglang-server url", + "zh_Hans": "sglang-server\u5730\u5740" + }, + "llm_description": "(For local deployment v2 when backend is vlm-sglang-client) Example: http:\/\/127.0.0.1:8000, default is empty", + "max": null, + "min": null, + "name": "sglang_server_url", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "string" + } + ], + "params": { + "backend": "", + "enable_formula": "", + "enable_ocr": "", + "enable_table": "", + "extra_formats": "", + "file": "", + "language": "", + "parse_method": "", + "sglang_server_url": "" + }, + "provider_id": "langgenius\/mineru\/mineru", + "provider_name": "langgenius\/mineru\/mineru", + "provider_type": "builtin", + "selected": false, + "title": "Parse File", + "tool_configurations": { + "backend": { + "type": "constant", + "value": "pipeline" + }, + "enable_formula": { + "type": "constant", + "value": 1 + }, + "enable_ocr": { + "type": "constant", + "value": true + }, + "enable_table": { + "type": "constant", + "value": 1 + }, + "extra_formats": { + "type": "mixed", + "value": "[]" + }, + "language": { + "type": "mixed", + "value": "auto" + }, + "parse_method": { + "type": "constant", + "value": "auto" + }, + "sglang_server_url": { + "type": "mixed", + "value": "" + } + }, + "tool_description": "a tool for parsing text, tables, and images, supporting multiple formats such as pdf, pptx, docx, etc. supporting multiple languages such as English, Chinese, etc.", + "tool_label": "Parse File", + "tool_name": "parse-file", + "tool_node_version": "2", + "tool_parameters": { + "file": { + "type": "variable", + "value": [ + "1756915693835", + "file" + ] + } + }, + "type": "tool" + }, + "height": 270, + "id": "1758027159239", + "position": { + "x": -544.9739996945534, + "y": 282 + }, + "positionAbsolute": { + "x": -544.9739996945534, + "y": 282 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + } + ], + "viewport": { + "x": 679.9701291615181, + "y": -191.49392257836791, + "zoom": 0.8239704766223018 + } + }, + "icon_info": { + "icon": "e642577f-da15-4c03-81b9-c9dec9189a3c", + "icon_background": null, + "icon_type": "image", + "icon_url": "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAoKADAAQAAAABAAAAoAAAAACn7BmJAAAP9UlEQVR4Ae2dTXPbxhnHdwFRr5ZN2b1kJraouk57i\/IJrJx6jDPT9Fpnkrvj3DOOv0DsXDvJxLk2nUnSW09hPkGc6aWdOBEtpZNLE9Gy3iiSQJ\/\/gg8DQnyFFiAAPjtDLbAA9uWPn5595VKrjLjtn\/YqrZaq+L6quL5X9pQqO1qtI3u+0mXy8MFJxfihP1qrss\/XQ+FFPtRK1UmreriMJkz\/GqaVX8N1z1dPHdyvnZpP1+fmVG3jhTVzDden6SjP6brt7b1y21VbWnk3CawKAbWp9Fmo0s3VbKamffWYgKz5vv+t1s5jt62qGxtrPVAnrUwqAH63u7dF\/4E3qaBbVCB8zjjHcZRDJs91XaXJpOGDMDgSx5zj2HWDMByz4\/v5fBZ80lLhE3Y498jcsfO8Nt1DlYbvmXs9L\/DbbY\/uozqmjwOUSvvVtuN8+tKLa4\/73GI1KDEAYek8x7vta\/0a5XiLcw1Y5uZcAxpgK5VKXeD4HvHTUaDdbivA2Go1yW+rZrPVkzDBUSOk7\/\/u2m8e9VyweGIdQAPenLpD\/3LvcLsM0C0szBNs8wY+nIvLpgKA8PS0YWBkKwkQyUo8un517b7tXFsl4cnO\/25p33lA7YoKMloqzanFxSXj2864xJe8Ao3GaRdGpAYQbVtEKwCS1au0Xf8TyuMWMirgQYXiOFjFw8PDcLvxC7ek79roSZ8bwO3dvTue77+P6hZV69LSElm9heKoLyXpKgCLeHx8zCBSb9m7e972YWwATVvPVfeoL\/YOcjg\/X1IrKyvd3mo313JQKAXQLgSEgBGO3v\/DG9eu3I1byFgAosr1HP9zauttitWLK32+nzs5aRgQMfSDoRtnXr8ep0qeGMAOfF+ho4FxuosXV7vjdfmWVHI\/qQKwhvv7z02VTCDVnJJ+dVIIJwIwDB\/G8FZXLwh8k761gt0PCJ8\/PzDjiHEgHBvAKHywfDKeVzCaYhYH1TAsIQazJ4VwLAAFvphvZoYeiwvh2YnVPqJ1OhwVVLti+foIJEGmNgQbYISG5Creqf85Ga7yKGlGAvj9zh5mNjbR4UCbT6rdUZLO7nWwwf0CMNNyvXuj1BhaBdPU2m2lnE8Q8aVLF6XDMUpNuW4UQMfk2bN9swKHqua7N9avPBwkzUAATbvP9b\/BDMfy8rLMbgxSUML7KoBxwqOjI1yr07TdK4OGZwZWwTS3+wDwYRWLTK311VgChygAZjA7Rq7cbpp1An3v7gtgUPWqW2j3YW5XnCgQR4HQ1OzWk529W\/3i6AsgLakyjUfAx6uS+z0sYaLAMAXQd2ADRt9PedCvV3wGwO939+7xNBuqX3GiwHkUQFWM5XnUnKu0HM8sXAnHdwZA+grVbdwA8ylOFLChABYlw5FFvBO1gj0Aou0H6wdi8REnCthQIMRTmazg7XCcPQBy229+XhaUhkWS4\/MrELKC+JJa13UB3P5xb1Pafl1d5MCyArCC6JSQ28LXdDn6LoD09bzbCJSql6UR37YC3U6t521x3F0AtaNvIlCqX5ZGfNsK4Gu5cGQJDWs4NgCiZ0JLujYRIBYQKohLQgFsSMDVMPeGDYBtt72FBAW+JGSXOFkBwAcI4bA\/EHwDoO9rY\/0cJ7iIC+JEgSQUwHpB4\/ygHWgAJDJfRiD2aREnCiSpAANodkajhDoAqgoS7bfzFMLFiQK2FGAjR7WxMXqdKjjogDCdthKTeESBqAKdTgiCK\/jjUG8kOOjsxYdAcaJAUgoAQF5hhV1xndacVL9JiS3x9leArSC2ZHa03y7jNg7s\/4iEigL2FOChGGIPAOoKosY2uOJEgTQUYGNHw39lB7vRI1HszyxOFEhDAQaQ0io7fqc3EgpMIw+SxgwrwJ0QRzvr3XpXAJxhIqZYdKp59TrSl2m4Kb6FGUuajR3trLvWtYAzpoEUd4oKcIeXhgQvCYBTfBGStFJzm\/\/EWkDqiiw1qR6W1TC7r11JlIurX\/6caPy5iJx+uUkd7SOrFYfgM8MwNBKYi7xLJoulgFTBxXqfuSuNAJi7V1asDM99+8fLpvYtly91VykUq4jDSzPtNpntNme0PLbjH67meFexf2C9Hmx8QMOAwVQcj82MF4XcJQrEVyDEmpmKk9Uw8bWUJ2Mo0ANgjOflEVHAmgLSCbEmpUQURwEBMI5q8ow1BQRAa1JKRHEUyAWAPx7Rj+I1afpGXOEUyAWAn+2cqI9\/aBROfCkQLT\/Iugiwfp\/tNtRH3x+LFcz6y4qRv8wDCOu3a6pgX6xgjBec9UcyDSBbPxZRrCArURw\/0wCy9WO595tiBVmLoviZBTBq\/VhwsYKsRDH8zAIYtX4st1hBVqIYfiYBHGT9WHKxgqxE\/v1MAjjI+rHcYgVZifz7mfo5pACsE\/XRDycjlYUVhPvT1QV1dTmT\/0cjyyA30LfisiBCFzwz2Ezf0BvD4ZkP\/n2k\/kbjhH++tiggjqFZFm+ZKoBxwIuKiPaigBhVJT\/n+snOL8bkXL68llqubYA3KLMvUnU8iUVM+zsU0fQGlaPw4Yd1U8RULWCS4PELE4vISuTDT7X1DgCxC8OlUvLJ\/pqWfOE+yyimagFRPb77h2VTRaLz8PfdU1po0Laqz8WSVm\/9dlG9fX1J4VhcthVIFUCWIgkQ8wqe7e\/tRtuYtuPnd3he\/5dfglpwKgBy5m2AmFfwWINZ96cKIIsfBfFjGohGG26YE\/CGqZOfa5kAkOViENFy++A\/wUwHX4v6b1Eb793fL0WD5TxnCiTfHY0hCOAa1oF4cdlVb9AUnLj8K3AuAD\/baSh8bDvA9zb1ZAe5N67J\/O8gbfIWHrsKBnjvfnPQLS+gsOlgBbEoIdoWFOtnU+XpxxXLAkbhA4i2LeEgKyjWb\/rQ2MzBxABG4ePMJAFhtC0o1o\/VLo4\/EYCD4GM5bEMYtYJi\/Vjp4vhjAzgKPpbENoRsBcX6scLF8sfqhIwLH0sDCOFsdEzYCvq0lausfGaFi+OPBHBS+FgamxDCCj4bMTPC6YqfLwWGAhgXPpbAFoSwgviIK54CA9uA54WPpbLdJuR4xS+GAn0BtAUfSyQQshLiRxU4A6Bt+DhBgZCVED+sQA+AScHHCQqErIT4rEAXwKTh4wQFQlZCfChgesH\/+G9DvfdDenswA0I4G+OEJiL5k1sFHAPfvw5TL4BYwtQlz2SCzntTgI+VEAhZidn1u23AaUkgEE5L+WykO3UAIYNAmA0YppGLTAAoEE7j1WcjzcwAKBBmA4i0c5EpAAXCtF\/\/9NPLHIAC4fShSDMHmQRQIEwTgemmlVkABcLpgpFW6pkGUCBMC4PppZN5AAXC6cGRRsq5AFAgTAOF6aSRGwAFwukAknSquQJQIEwah\/Tjzx2AAmH6kCSZYi4BFAiTRCLduHMLoECYLihJpUYA6uAna+j3O\/LoZClX\/t4afium4+oEoJ9rAFEQgZDfZz78MIB65a9PtinbFbV0USkn1zWyFfWT\/l2N6O94WMl03iLx6QtwR\/vIdU2Iy9vLK1h+BcCCvdC8FUcAzNsbK0J+u50QXcfvBX9FZdpaXV1VpdLQ3dqKUHQpQwYUaDZb6vnz58hJVSxgBl7ILGcBAJphmFDXeJb1kLKnrIDj+f4zpOmjayxOFEhBAc8LfiNaKy3DMCnoLUlEFOj2QSjcoZ2Xa7jueWIBoYO45BXg2tbzvaeY+zBtQM\/rzs8lnwNJYaYVCPU36k5bd+aClQA401SkWHiubbV2ao7Wbg1pt1pBwzDFfEhSM6oAW0Bfq7oz1wragBw4o5pIsVNUoN0O+htzc7QYYWNjrYa0YRYFwhTfwgwnxVXwxgtrnWEYX6zgDPOQatG5qad99RgJB1NxOjhpNpupZkYSmz0FeBCaKuGnKH0AoO+bE6Zz9mSREqelQKvV6iTlhy2gX0Uo09m5QzxRwLoC7XZnGk47vwLott0qUoIFlI6Idc0lwpACWIoF57ZVFb6pgqknjNmQKuCTahiyiEtCAYYPHZAOc502IKVG8H2NRE9PT5NIW+IUBYithlHBVwFrOAk6IebIqcITAKGCuCQUYAvoec4jjr8L4I2ra1UKNNUw38g3iS8KnFeBRqNhJjuw+uqljTXTAUGcXQBxon3\/S\/gnJ8fwxIkC1hTgmtVX+n440h4AHTKNRGgdFlCsYFgmOT6PAswTrN\/vrq09CsfVAyB6JrRE\/0PcIFYwLJMcn0eBw8Pg11iJrU+j8RCUvW57e6\/sOf43tFSmsry8pBYXF3tvkDNRYAIF0PY7PDxSsH7Xr13eiD7aYwFxEVbQ1\/oujo+PT2RgGkKIi6UAll2BIbho248jPAMgLlA9\/QV5pkd8cJD+j1lz5sTPtwJoxnWWXn0RbftxyfoCiItuW79JZpM6JE1qDwYU80PiiwKjFDg5aahG4xRVb90tBTVqv2cGAkhVcU35QZcZZpRXsfaLRMJEgbACQdUbDOVR1XsXC0\/D18PHAwHETdfX1x5SI\/BDzBFjLw+BMCydHPdTAIyAFbOohdgZVPXys2Qhh7tOr\/gr6hVvuq6rLl5cVVqPfGx4pHK1kAoAuv19GKo2TWqox9fXL78yqqBDLSAeRq\/Y8fTrFGENESMBQ\/eomOX6TCnQAx8NuTjz+vVxBBjblJElrND4ICxhRSzhONLOzj1n4CvpV4e1+8LKjA0gHopCeOHCBeW6I41oOD05LpgCaPMdHBwE1S4s3wTwQYqJAMQDYQgd2tgDG1sKhFBm9hx3ODDWRyBNDB8UmxhAPNSB8HN0TNAhWVpalCk7CDNDDuN8x8fHpj+ADgfafONWu2GZYgHIETx5+vND6hLfwfnCwjxBuCTWkMUpqI\/2HhYXnJ52vsJLQy2u57yPzmqcIp8LQCT4ZGfvtlb+A9raqIwqGdZwYWEhTl7kmYwr0GP1aIaDVrfcv7F+5eF5sn1uAJE4quS2qx7QlPMtnAPElZUV2fQcYhTAYT0f5nVDa0SrNL32ZpwqNyqHFQA5UmMNff8ehmoQhl335+fnxSKyQDnzo+ARLDVMrXUWq1gpjVUAOUffPf35fUfpvzCIsIgBjAtiFVmkDPpo3+Fruc3mqVlIgHM4gsQsVJ7znIdx23qDipsIgJxY1CJyOGDEYPYc7c\/lOPBdviR+SgoALnyw2gkzXPj02Zigqn39peOpR7bB42ImCiAnsv3j3iaNGVFnRd\/E0A2Hh31YSYwnYlgHx\/D5A0jZBdd7s8338T2z4DNA0bJibA4O+zCzBeOt93DOkPEWadHn6bxK931NL6Ha+aZkn1vsBfW+SXvxDoyJOixl6rBskUAYQ3yZxpAqg6AcGIlcsKMAtuXDzmjYnEo7VWyXkZSlG5Th1AEclJHtn\/YqtHFShYAsA0pPeWXawn8d91PDt0KecbiOIR8+h0\/G8kxY+HoRj+nF1cmg1c+UTQd7PVJ4nYbHzHXaf\/6po5x6m7bEJa1q2JnURg\/2TNoxAv4PoGedQHqhulIAAAAASUVORK5CYII=" + }, + "id": "103825d3-7018-43ae-bcf0-f3c001f3eb69", + "name": "Contextual Enrichment Using LLM" +}, +{ + "chunk_structure": "hierarchical_model", + "description": "This Knowledge Pipeline extracts images and tables from complex PDF documents for downstream processing.", + "export_data": "dependencies:\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius\/jina:0.0.8@d3a6766fbb80890d73fea7ea04803f3e1702c6e6bd621aafb492b86222a193dd\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius\/parentchild_chunker:0.0.7@ee9c253e7942436b4de0318200af97d98d094262f3c1a56edbe29dcb01fbc158\n- current_identifier: null\n type: marketplace\n value:\n marketplace_plugin_unique_identifier: langgenius\/mineru:0.5.0@ca04f2dceb4107e3adf24839756954b7c5bcb7045d035dbab5821595541c093d\nkind: rag_pipeline\nrag_pipeline:\n description: ''\n icon: 87426868-91d6-4774-a535-5fd4595a77b3\n icon_background: null\n icon_type: image\n icon_url: data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAoKADAAQAAAABAAAAoAAAAACn7BmJAAARwElEQVR4Ae1dvXPcxhVfLMAP0RR1pL7MGVu8G7sXXdszotNYne1x6kgpktZSiiRNIrtMilgqnNZSb4\/lzm4i5i8w1TvDE+UZyZIlnihKOvIAbN5v7\/aIw93xPvBBHPDezBHYBbC7+O2Pb9++\/YAlMiIPHjwoO65btpQqK6VKVKySsqwV9fQpSliy6IcTubhYxrFTrJJqXe+Mz2+I8KgJoeh3IIRBTW1vt+MoXLWWlgRheo\/uqlmWVSVMa67jVJeXl6sHTx7dGb1HurK9uVnybHtNKXFBWAKEW1XCKvcrhb+tCdi+LBeX2ud80o3AaHipDUGkFErdJXJu2J63vliptAncnXr8MakQ8PH9+2tU9Av0omtCCZx3iZSSsLCE49j6iHPE+U+fCEnnCEOmTp\/uehbXzPWuizmNoFaC4CQdFxCE3V9\/bcd4vk8txpLwW\/f6FPZ9RT8c\/fZ9nSdESmGtK1veOvPGG3SerCRGQGg6V8rLxIwPg6QDUWzb1kTDcXrKaROu16v6T550RMuTJzvCHOhEYBS8PM8TIGmj4QrX9ejndiRG5Kj6lvj8zLlzNzsuxBiInYCaeI7zqeWrK8YuA+lmZqbF9PSUcIh0o2irUQCNEZeJTSoqXg0i4d7evial0ZIgopLWzdNvvvl53MDESsBfNrc+sqX6wth0juOIublZMUXHcSUqoOPmO6nPxYkXiFinn9GMIGLcGjEWApLWK7u2\/ZVpauMgniFAnICaNPN8TAIvaMXd3ZcHdqMlbjve1NXFSvSetIxaGU\/u3\/\/Uk\/aPIB+a1rm5Y+LEwnwkrRe1TPx8vAigBVssLYj51+Z0x5Dq+iNXNn58tLV1OWpOYxMQtt7jra0vqFd1HbYe7DsU8tjsTNQy8fMZRQB2PJQLjiQlS4mvwIEoxR2rCdZNrpTfUnd9FVrv2LHZxIiXRJMSBbCsP5sWXvX6nnj1qq5dPOQQ33D86Y\/HaZJH1oAgnyflHZAPfrrSieOJkS\/rlV3k8s1SS3eC6h4cABc82bizvfmgPComIxHQkA+9XPjwoI6bBRg1W74\/Dwig7sEBuNbIDCPFNDoJhyYgky8PlIn\/HUDChQgkHIqAvcg3ijM5\/tfmFLOEALgwLgmHIiANqX0bbHaZfFmq\/myUJUxCV+5\/S4qrNKh0AwnY7GY3OxwLx18baRhtUOZ8PV8IgITHiSOmY0KDE9cGveGhBHy0SY5GJa4gYe5wDIKSrwMB0zHBDCZw5+G9e1cOQ6YvAWH3kX2pnYzw8zVZfVhSfI0RaCIAroAzEJp6cu0w90xfApL6pEkFogSvN49uNIHlv8MjAD8hRsdISq7d+Krfkz0J2Gp6PwKT51pM7pcAxzMC\/RDQY8fNpnjtV5op1eu+ngSUUmnjEeTjprcXbBw3DALoO5imWJA516tX3EVAmt1yDS4XEK816DxMXnwPI9ATATTFmJ5H5lx5X8quDkkXAZXvX0ZK8\/NzPRPkSEZgVAQwKRlCq34+DWvBDgLC9oP2w\/yvKLOYdW78hxFoIQAuQQuSNNcJBZDpIKCx\/bjpDSDEp7EgYLQgjWR8GEywTcBHmz\/r9bls+wXh4fO4EIAWbDmn1x5v3l8z6bYJKKV3GZFTtEyShRFIAoHp5kxq4Ut\/zaTfJqAS8gIiufk10PAxbgRajmloQs01pK+n5KNn4kp7GxEnlwZOYMBtqUl4inlqGeckoywt5MfODbXajp7G7\/jeIrYB0RoQe7UAb+755oR1GX0NOKYlzZ6GGM5pAhIzVxFp074sLIxAkghg7x8I7VezhmPTBrSs8wiwBgQKLEkigLVEEIyM4Njs8iqLAtQNsdt9ElzLhGTJhskEIBNeCGxG9YLegaZpaaXXYlyzCcbqJhZGIEkEYAdCjAaUD2jiKSJ41gtQYEkaAd0RoYkuEOyKK2mMroyA3YrEOQsjkCQCRgs6dbcsaYtc7fizZFM1Jpkxp80IAAHTE7ZsVZbkgikjkptgoMCSBgJGAxL3SmiMmxqwZRymUQDOo9gIGAKCe9L0RgKRxUaH3z5xBExrS5xbaTv+9FSZxLPmDBiBTgSId9YKorLohO4sKofygoBRdp5Si20NmJeX4\/fIPgLG40JEPMEEzH595bqEtF7Ool4wLUWa0F7wr+\/\/JlMVdOrOfzrKY8p3\/C9\/FjMXL3ZcK2rADHrQHtPkiBa+dsOYdrmooCT93s\/\/8U+x9\/33SWczcelzE5xilYGEjY2NFHPMflZMwJTraOdvfxfuTz+lnGt2s3O8bb0URPheA+NxsZeU5\/N1Qqp2d8Wzq38SJ774l3DefrvzYgZDSazJ0V\/r3Hmu3xZTEHgoLuWKNyT0Hj5MOedsZBfo8OqhOCbgEdQLSLhDmrCIJOwg4BFgz1m2EAD5ikpCQwIHX9SGyJjWAydhM5jC5vFoSLhANqH9+uuZf8W4bHppNZd\/xN\/ryDyE2SugIWERm2MmYEb4aEgI27BIwgTMUG2DhDXqmBSJhEzADBEQRfHISV0kEjIBM0ZAQ0KMmBRBmIAZrWWMGWPsOO\/CBMxwDWP2TN5JyATMMAFRNJBw98t\/Z7yU4xePCTg+dqk9Wf\/6a\/Hy1q3U8kszIyZgmmhHyOvlzVu5JCETMAIp0n40jyRkAqbNooj55Y2ETMCIhDiKx0HCV19\/cxRZx54nEzB2SNNJ8MWXX+ZikRMTMB2+JJJLHnyE\/FmkRKhxkGh4nfDBFT4DAqwBmQdHigAT8Ejh58yZgMyBI0WAbcCY4Td7wcScbN\/kJt3GZA3Yt2r5QhoIMAHTQJnz6IsAE7AvNHwhDQSYgGmgzHn0RYAJ2BcavpAGAkzANFDmPPoiwATsCw1fSAOBifcDTrofLI1KznIerAGzXDsFKBsTsACVnOVXZAJmuXYKUDYmYAEqOcuvyATMcu0UoGxMwAJUcpZfkQmY5dopQNkmzg846nw7m77Fge9xzH7wgZhaPT+wSodN35qf1+kibef8eTHz3rsD0+51w7D59Xq2V9yk+UUnjoC9QD8sDhs+4odNfqZWV8U8fTQwjs3AsYsptlDTn96ivVt2iZDT770n5i79Lpb0D3unPF0rVBMMstT+8MdEPpUFQoLkSD8vi8bTIHqhCAhAQRR8KiupHemRPhaN53lLtTiJOfFN8CCbp7FxV9RJM+398EMbN5Bkl3YfxffaBkm\/9P2Hv2gSI2337t0uQmNLNeSD7wSPIv3yGyWNSbp34gk4CGx0PPCD3RfcY8\/Yb7ALxxH5+lmBn+nY7H3\/g04\/qFnRJDtvvSWO\/faTcbIoxDOFaYLnLl\/SnZBgrYI0ccnMxQ9Er68doTnmz7P2R7kwBAQE6KEGpUFNZ5wCLdubhPndYjcqfoUiYPj7vMHmMiqQ5nmQEK6eoKC5hz3I0o1AoQgI53EaArsybFvWY2zu03iHtPIoFAHRIw5KWCMGr0U9n363c2QEznCWbgQKRcB6wBUDKOTZs92IxBRjescmubjtTZPupB9z74YxFQQXDNwiQZm9eDEYjPU8PNznD2kDjjo2POl+w1wTEIa\/+9P\/tH9Oj9kGKAaCTI85gSCQTN\/TsL3JnZDeUE08AUfVGIAB5IC7hOXoESiUDQi4QT4MwYWbyLirIqzxwhox7vwmNb2J14CjAB\/ndKxB+aLpD8qwhJ90my74zsOc556Akmy9GXKJYK5euGc6DEDj3hMefkuyxz1uGbPw3MQTMKsao\/5N54dkZugfgKUbgcLZgN0QxB+DSQ7hYT5niOUA8Zck+yk6\/vZTXUpfedkv7QSUEMQLTvtCkWdoPcqwNmDWX9F\/8iSWIvq1Zzod1oCxwNlMBOTb6THbGlPBWHoj4FhC1JQQJaWUsCwKsYyFwCuy+fARwbD7Ze7Spdxov7GA6fEQuNaSmkOnNQowAQ0kQx4xJb9BEwwwHR\/T8sPEQzJoeln7dQPaQUB7cVGQ7hOytCCk5BY5DNc4Iy2GfMf\/+pdwchMXlidPxl9m3xfSniLWCTHxbpj40YmWIkY80OzyOpDhcGQCDofTwLtAvGOffKKJx8NuA+Fq38AEbEMx2glIBtfKFG3LgVEW5+239DjzaKkU826\/1QlRQtWsx1tbd8gIXFtYmBdTDvOxmJRI960brit2dmiNjCXWudeRLvacWwgBEBBuGKH8tm8mdAsHGYHkEJDkk9FjIgHfTHK5ccqMACHgeb7GgdwwVW6CmRLpI3AwEiIkWIgSeOQcZGEE0kCg3QtW6t6BDRhgZRqF4DyKi0DA3KtJy7eanRAmYHEZkfKb+8YGtKyqVI5VRf6uy\/MBU66HwmbXboI9qyZd160CiYBaLCww\/OLpIOC3+hvurFOVy5VKFdkikn2B6VRA0XMxBFxeXm66YSyhqgCFxuaKjg2\/f8IIuJ4x9dQGstKDv8qyaAM7UW40XDEzM51wEUZLPq41CKPlmp+7E5nPFwEe0wEhp989JKMd0Rb5YxA4YCdCLIxA\/AhgIgKEiKc1YHMkxLLWEelxTxgwsCSIgPG20PqjAwLanreOPKEBuSOSIPqcNLn7mhrQcE7bgIuVSo3mBa6TK2bN9T0xJbM7LzBrNk3WOJVlm9k0v9Td3QDngF2zCcaZUv\/FYX+\/gQMLIxA7Anv1fZ0m+Vo01xA4IKAv1xGxt9e8CecsjECcCLQ1oO\/fNOm2CXi68uY6pkhjRKR9o7mLj4xARASg2PRgB82+OlOp6A4IkmwTUKev1Hc4vnpZ10H+wwjEhUDdtKyW+DyYZgcBnaZqrEEDshYMwsTnURAAl9D7JduveubcuZvBtDoI2OyZqBu4gbVgECY+j4LA7u5L\/Ti5+G6F0+kgIC6SFrxOY8JVsLZe3wvfz2FGYCQEgrbf2crKZ+GHuwgILSh96ypufPmqzo7pMGIcHhoBLPMAh7SEbD+TSBcBceFU5dxt0yPefdFUn+YBPjICwyIAM05PvbLE7bDtZ9LoSUBcpGG539Ohtt9ocFNs0OLj0AjAfNvb1z7lmutN6Ra118N9CagnqvpKd5mhRnnVXC\/4OK4XAsGmV1ni6nJludrrPsT1JSAunq6sXKfJqjfgnMZeHkxCoMJyGALgCLgCzlCv90a\/ptekcSgBcZPt+59h8Bht+fPnL7hTYpDjYxcCIB040hzxUBtnKitXum4KRQwkIHrFru9\/DNeMR9O1nj0ndvM+MiEYOQjyPUMriSl95HD2\/OmPh0FlIAGRCOxBUq3vMwmHgbR493STb+r9w+y+IEJDERAP9CIh24RBKIt5Dg50ar7hyQfEhiYgbg6TkDsmQKW4YjocB83uaOQDciMREA8YEpqOybNnz9lPCGAKJvDzoe5Nh8PzRycfIBuZgHgIJDy9svKOcdG8ePlKYMCZm2Sgk28xPV3UOc7hanlB\/YNhbb4wOmMR0CRyamXlivKFHjGB1xtNMs+oNujk7witt13bERgdI6kJX12Fq6XSWt8xzhtHIiAyPFM5d5MWMr1DY8e3oY4xdoxC8nzCcaojm8+gLqFcjNbDPAHXn3oHAxVRS2xFTSD4\/KPNrctCqmuWsMqIx6772Gkhym4L4VVevCoOyPaXOPEC8TChwCgT+Peoxbt6FpNVYpJYCWjK9Hjz3mdKikuGiPgEmCbj7PTIn4KIE1BTvjwfo+AFmw5rw7EyEqYUwi1Bc3tjV\/jXozS3JrHgMRECmgzCGtHEg4y2Y2sySlsKx7bNpa5jFEC7EitAxLB46Q4EEWyf9gOCGwW7YuiNCQ5Ip7\/jQSz8bpeWasRNPFMViRLQZPJo8+dV2vjjsiXFBXorOu8WaEmbfvhkLEipj3SOD2oj3oh96hRtbN1ZbNyLX5HEECj8zo3Hj3UUrmMjSLl0sukqoXPEYWsMfY3s9Z5C9p3wsEZcruuVkj1vii8y9Vrb3NwsHRf2mpJqlVhzntAo9yMlXtN80d28slxcMqd87IHAKHhhWz7sjKY8bBZurT8X3npSmq5HUXVU6gTsV5AHmw\/KjnDLBEqJyFmm+0oEzop6+pQ6XQJhLdbiYonCJRPGkT43i3BHXPB6Ts9rhFUt\/G7+9nYVcWS94VrNWloSrd3PatgPnLCqusKpjuu3Q9pxyv8BVb3XBNS3Vn0AAAAASUVORK5CYII=\n name: Complex PDF with Images & Tables\nversion: 0.1.0\nworkflow:\n conversation_variables: []\n environment_variables: []\n features: {}\n graph:\n edges:\n - data:\n isInLoop: false\n sourceType: datasource\n targetType: tool\n id: 1750400203722-source-1751281136356-target\n selected: false\n source: '1750400203722'\n sourceHandle: source\n target: '1751281136356'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: tool\n targetType: knowledge-index\n id: 1751338398711-source-1750400198569-target\n selected: false\n source: '1751338398711'\n sourceHandle: source\n target: '1750400198569'\n targetHandle: target\n type: custom\n zIndex: 0\n - data:\n isInLoop: false\n sourceType: tool\n targetType: tool\n id: 1751281136356-source-1751338398711-target\n selected: false\n source: '1751281136356'\n sourceHandle: source\n target: '1751338398711'\n targetHandle: target\n type: custom\n zIndex: 0\n nodes:\n - data:\n chunk_structure: hierarchical_model\n embedding_model: jina-embeddings-v2-base-en\n embedding_model_provider: langgenius\/jina\/jina\n index_chunk_variable_selector:\n - '1751338398711'\n - result\n indexing_technique: high_quality\n keyword_number: 10\n retrieval_model:\n reranking_enable: true\n reranking_mode: reranking_model\n reranking_model:\n reranking_model_name: jina-reranker-v1-base-en\n reranking_provider_name: langgenius\/jina\/jina\n score_threshold: 0\n score_threshold_enabled: false\n search_method: hybrid_search\n top_k: 3\n weights: null\n selected: true\n title: Knowledge Base\n type: knowledge-index\n height: 114\n id: '1750400198569'\n position:\n x: 355.92518399555183\n y: 282\n positionAbsolute:\n x: 355.92518399555183\n y: 282\n selected: true\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n datasource_configurations: {}\n datasource_label: File\n datasource_name: upload-file\n datasource_parameters: {}\n fileExtensions:\n - txt\n - markdown\n - mdx\n - pdf\n - html\n - xlsx\n - xls\n - vtt\n - properties\n - doc\n - docx\n - csv\n - eml\n - msg\n - pptx\n - xml\n - epub\n - ppt\n - md\n plugin_id: langgenius\/file\n provider_name: file\n provider_type: local_file\n selected: false\n title: File Upload\n type: datasource\n height: 52\n id: '1750400203722'\n position:\n x: -579\n y: 282\n positionAbsolute:\n x: -579\n y: 282\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n author: TenTen\n desc: ''\n height: 337\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Currently\n we support 4 types of \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Data\n Sources\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\":\n File Upload, Online Drive, Online Doc, and Web Crawler. Different types\n of Data Sources have different input and output types. The output of File\n Upload and Online Drive are files, while the output of Online Doc and WebCrawler\n are pages. You can find more Data Sources on our Marketplace.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n Knowledge Pipeline can have multiple data sources. Each data source can\n be selected more than once with different settings. Each added data source\n is a tab on the add file interface. However, each time the user can only\n select one data source to import the file and trigger its subsequent processing.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 358\n height: 337\n id: '1751264451381'\n position:\n x: -990.8091030156684\n y: 282\n positionAbsolute:\n x: -990.8091030156684\n y: 282\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 358\n - data:\n author: TenTen\n desc: ''\n height: 260\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Knowledge\n Pipeline\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\n starts with Data Source as the starting node and ends with the knowledge\n base node. The general steps are: import documents from the data source\n \u2192 use extractor to extract document content \u2192 split and clean content into\n structured chunks \u2192 store in the knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n user input variables required by the Knowledge Pipeline node must be predefined\n and managed via the Input Field section located in the top-right corner\n of the orchestration canvas. It determines what input fields the end users\n will see and need to fill in when importing files to the knowledge base\n through this pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Unique\n Inputs: Input fields defined here are only available to the selected data\n source and its downstream nodes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Global\n Inputs: These input fields are shared across all subsequent nodes after\n the data source and are typically set during the Process Documents step.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For\n more information, see \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"https:\/\/docs.dify.ai\/en\/guides\/knowledge-base\/knowledge-pipeline\/knowledge-pipeline-orchestration.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer\",\"target\":null,\"title\":null,\"url\":\"https:\/\/docs.dify.ai\/en\/guides\/knowledge-base\/knowledge-pipeline\/knowledge-pipeline-orchestration\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 1182\n height: 260\n id: '1751266376760'\n position:\n x: -579\n y: -22.64803881585007\n positionAbsolute:\n x: -579\n y: -22.64803881585007\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 1182\n - data:\n author: TenTen\n desc: ''\n height: 541\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A\n document extractor for large language models (LLMs) like MinerU is a tool\n that preprocesses and converts diverse document types into structured, clean,\n and machine-readable data. This structured data can then be used to train\n or augment LLMs and retrieval-augmented generation (RAG) systems by providing\n them with accurate, well-organized content from varied sources. \",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"MinerU\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\n is an advanced open-source document extractor designed specifically to convert\n complex, unstructured documents\u2014such as PDFs, Word files, and PPTs\u2014into\n high-quality, machine-readable formats like Markdown and JSON. MinerU addresses\n challenges in document parsing such as layout detection, formula recognition,\n and multi-language support, which are critical for generating high-quality\n training corpora for LLMs.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 541\n id: '1751266402561'\n position:\n x: -263.7680017647218\n y: 558.328085421591\n positionAbsolute:\n x: -263.7680017647218\n y: 558.328085421591\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n author: TenTen\n desc: ''\n height: 554\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Parent-Child\n Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\n addresses the dilemma of context and precision by leveraging a two-tier\n hierarchical approach that effectively balances the trade-off between accurate\n matching and comprehensive contextual information in RAG systems. \",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Here\n is the essential mechanism of this structured, two-level information access:\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"-\n Query Matching with Child Chunks: Small, focused pieces of information,\n often as concise as a single sentence within a paragraph, are used to match\n the user''s query. These child chunks enable precise and relevant initial\n retrieval.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"-\n Contextual Enrichment with Parent Chunks: Larger, encompassing sections\u2014such\n as a paragraph, a section, or even an entire document\u2014that include the matched\n child chunks are then retrieved. These parent chunks provide comprehensive\n context for the Language Model (LLM).\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 554\n id: '1751266447821'\n position:\n x: 42.95253988413964\n y: 366.1915342509804\n positionAbsolute:\n x: 42.95253988413964\n y: 366.1915342509804\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n author: TenTen\n desc: ''\n height: 411\n selected: false\n showAuthor: true\n text: '{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The\n knowledge base provides two indexing methods:\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0and\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Economical\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\",\n each with different retrieval strategies. High-Quality mode uses embeddings\n for vectorization and supports vector, full-text, and hybrid retrieval,\n offering more accurate results but higher resource usage. Economical mode\n uses keyword-based inverted indexing with no token consumption but lower\n accuracy; upgrading to High-Quality is possible, but downgrading requires\n creating a new knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"*\n Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0and\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A\n Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0only\n support the\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0indexing\n method.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}'\n theme: blue\n title: ''\n type: ''\n width: 240\n height: 411\n id: '1751266580099'\n position:\n x: 355.92518399555183\n y: 434.6494699299023\n positionAbsolute:\n x: 355.92518399555183\n y: 434.6494699299023\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom-note\n width: 240\n - data:\n credential_id: fd1cbc33-1481-47ee-9af2-954b53d350e0\n is_team_authorization: false\n output_schema:\n properties:\n full_zip_url:\n description: The zip URL of the complete parsed result\n type: string\n images:\n description: The images extracted from the file\n items:\n type: object\n type: array\n type: object\n paramSchemas:\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg,\n jpeg)\n ja_JP: \u89e3\u6790\u3059\u308b\u30d5\u30a1\u30a4\u30eb(pdf\u3001ppt\u3001pptx\u3001doc\u3001docx\u3001png\u3001jpg\u3001jpeg\u3092\u30b5\u30dd\u30fc\u30c8)\n pt_BR: the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg,\n jpeg)\n zh_Hans: \u7528\u4e8e\u89e3\u6790\u7684\u6587\u4ef6(\u652f\u6301 pdf, ppt, pptx, doc, docx, png, jpg, jpeg)\n label:\n en_US: file\n ja_JP: file\n pt_BR: file\n zh_Hans: file\n llm_description: the file to be parsed (support pdf, ppt, pptx, doc, docx,\n png, jpg, jpeg)\n max: null\n min: null\n name: file\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: file\n - auto_generate: null\n default: auto\n form: form\n human_description:\n en_US: (For local deployment service)Parsing method, can be auto, ocr,\n or txt. Default is auto. If results are not satisfactory, try ocr\n ja_JP: \uff08\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30b5\u30fc\u30d3\u30b9\u7528\uff09\u89e3\u6790\u65b9\u6cd5\u306f\u3001auto\u3001ocr\u3001\u307e\u305f\u306ftxt\u306e\u3044\u305a\u308c\u304b\u3067\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fauto\u3067\u3059\u3002\u7d50\u679c\u304c\u6e80\u8db3\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u3001ocr\u3092\u8a66\u3057\u3066\u304f\u3060\u3055\u3044\n pt_BR: (For local deployment service)Parsing method, can be auto, ocr,\n or txt. Default is auto. If results are not satisfactory, try ocr\n zh_Hans: \uff08\u7528\u4e8e\u672c\u5730\u90e8\u7f72\u670d\u52a1\uff09\u89e3\u6790\u65b9\u6cd5\uff0c\u53ef\u4ee5\u662fauto, ocr, \u6216 txt\u3002\u9ed8\u8ba4\u662fauto\u3002\u5982\u679c\u7ed3\u679c\u4e0d\u7406\u60f3\uff0c\u8bf7\u5c1d\u8bd5ocr\n label:\n en_US: parse method\n ja_JP: \u89e3\u6790\u65b9\u6cd5\n pt_BR: parse method\n zh_Hans: \u89e3\u6790\u65b9\u6cd5\n llm_description: Parsing method, can be auto, ocr, or txt. Default is auto.\n If results are not satisfactory, try ocr\n max: null\n min: null\n name: parse_method\n options:\n - label:\n en_US: auto\n ja_JP: auto\n pt_BR: auto\n zh_Hans: auto\n value: auto\n - label:\n en_US: ocr\n ja_JP: ocr\n pt_BR: ocr\n zh_Hans: ocr\n value: ocr\n - label:\n en_US: txt\n ja_JP: txt\n pt_BR: txt\n zh_Hans: txt\n value: txt\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: select\n - auto_generate: null\n default: 1\n form: form\n human_description:\n en_US: (For official API) Whether to enable formula recognition\n ja_JP: \uff08\u516c\u5f0fAPI\u7528\uff09\u6570\u5f0f\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\u3069\u3046\u304b\n pt_BR: (For official API) Whether to enable formula recognition\n zh_Hans: \uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u662f\u5426\u5f00\u542f\u516c\u5f0f\u8bc6\u522b\n label:\n en_US: Enable formula recognition\n ja_JP: \u6570\u5f0f\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\n pt_BR: Enable formula recognition\n zh_Hans: \u5f00\u542f\u516c\u5f0f\u8bc6\u522b\n llm_description: (For official API) Whether to enable formula recognition\n max: null\n min: null\n name: enable_formula\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n - auto_generate: null\n default: 1\n form: form\n human_description:\n en_US: (For official API) Whether to enable table recognition\n ja_JP: \uff08\u516c\u5f0fAPI\u7528\uff09\u8868\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\u3069\u3046\u304b\n pt_BR: (For official API) Whether to enable table recognition\n zh_Hans: \uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u662f\u5426\u5f00\u542f\u8868\u683c\u8bc6\u522b\n label:\n en_US: Enable table recognition\n ja_JP: \u8868\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\n pt_BR: Enable table recognition\n zh_Hans: \u5f00\u542f\u8868\u683c\u8bc6\u522b\n llm_description: (For official API) Whether to enable table recognition\n max: null\n min: null\n name: enable_table\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n - auto_generate: null\n default: doclayout_yolo\n form: form\n human_description:\n en_US: '(For official API) Optional values: doclayout_yolo, layoutlmv3,\n default value is doclayout_yolo. doclayout_yolo is a self-developed\n model with better effect'\n ja_JP: \uff08\u516c\u5f0fAPI\u7528\uff09\u30aa\u30d7\u30b7\u30e7\u30f3\u5024\uff1adoclayout_yolo\u3001layoutlmv3\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f doclayout_yolo\u3002doclayout_yolo\n \u306f\u81ea\u5df1\u958b\u767a\u30e2\u30c7\u30eb\u3067\u3001\u52b9\u679c\u304c\u3088\u308a\u826f\u3044\n pt_BR: '(For official API) Optional values: doclayout_yolo, layoutlmv3,\n default value is doclayout_yolo. doclayout_yolo is a self-developed\n model with better effect'\n zh_Hans: \uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u53ef\u9009\u503c\uff1adoclayout_yolo\u3001layoutlmv3\uff0c\u9ed8\u8ba4\u503c\u4e3a doclayout_yolo\u3002doclayout_yolo\n \u4e3a\u81ea\u7814\u6a21\u578b\uff0c\u6548\u679c\u66f4\u597d\n label:\n en_US: Layout model\n ja_JP: \u30ec\u30a4\u30a2\u30a6\u30c8\u691c\u51fa\u30e2\u30c7\u30eb\n pt_BR: Layout model\n zh_Hans: \u5e03\u5c40\u68c0\u6d4b\u6a21\u578b\n llm_description: '(For official API) Optional values: doclayout_yolo, layoutlmv3,\n default value is doclayout_yolo. doclayout_yolo is a self-developed model\n withbetter effect'\n max: null\n min: null\n name: layout_model\n options:\n - label:\n en_US: doclayout_yolo\n ja_JP: doclayout_yolo\n pt_BR: doclayout_yolo\n zh_Hans: doclayout_yolo\n value: doclayout_yolo\n - label:\n en_US: layoutlmv3\n ja_JP: layoutlmv3\n pt_BR: layoutlmv3\n zh_Hans: layoutlmv3\n value: layoutlmv3\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: select\n - auto_generate: null\n default: auto\n form: form\n human_description:\n en_US: '(For official API) Specify document language, default ch, can\n be set to auto, when auto, the model will automatically identify document\n language, other optional value list see: https:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/ppocr\/blog\/multi_languages.html#5'\n ja_JP: \uff08\u516c\u5f0fAPI\u7528\uff09\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u8a00\u8a9e\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fch\u3067\u3001auto\u306b\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002auto\u306e\u5834\u5408\u3001\u30e2\u30c7\u30eb\u306f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u8a00\u8a9e\u3092\u81ea\u52d5\u7684\u306b\u8b58\u5225\u3057\u307e\u3059\u3002\u4ed6\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u5024\u30ea\u30b9\u30c8\u306b\u3064\u3044\u3066\u306f\u3001\u6b21\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff1ahttps:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/ppocr\/blog\/multi_languages.html#5\n pt_BR: '(For official API) Specify document language, default ch, can\n be set to auto, when auto, the model will automatically identify document\n language, other optional value list see: https:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/ppocr\/blog\/multi_languages.html#5'\n zh_Hans: \uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u6307\u5b9a\u6587\u6863\u8bed\u8a00\uff0c\u9ed8\u8ba4 ch\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e3aauto\uff0c\u5f53\u4e3aauto\u65f6\u6a21\u578b\u4f1a\u81ea\u52a8\u8bc6\u522b\u6587\u6863\u8bed\u8a00\uff0c\u5176\u4ed6\u53ef\u9009\u503c\u5217\u8868\u8be6\u89c1\uff1ahttps:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/ppocr\/blog\/multi_languages.html#5\n label:\n en_US: Document language\n ja_JP: \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u8a00\u8a9e\n pt_BR: Document language\n zh_Hans: \u6587\u6863\u8bed\u8a00\n llm_description: '(For official API) Specify document language, default\n ch, can be set to auto, when auto, the model will automatically identify\n document language, other optional value list see: https:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/ppocr\/blog\/multi_languages.html#5'\n max: null\n min: null\n name: language\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: 0\n form: form\n human_description:\n en_US: (For official API) Whether to enable OCR recognition\n ja_JP: \uff08\u516c\u5f0fAPI\u7528\uff09OCR\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\u3069\u3046\u304b\n pt_BR: (For official API) Whether to enable OCR recognition\n zh_Hans: \uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u662f\u5426\u5f00\u542fOCR\u8bc6\u522b\n label:\n en_US: Enable OCR recognition\n ja_JP: OCR\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\n pt_BR: Enable OCR recognition\n zh_Hans: \u5f00\u542fOCR\u8bc6\u522b\n llm_description: (For official API) Whether to enable OCR recognition\n max: null\n min: null\n name: enable_ocr\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n - auto_generate: null\n default: '[]'\n form: form\n human_description:\n en_US: '(For official API) Example: [\"docx\",\"html\"], markdown, json are\n the default export formats, no need to set, this parameter only supports\n one or more of docx, html, latex'\n ja_JP: \uff08\u516c\u5f0fAPI\u7528\uff09\u4f8b\uff1a[\"docx\",\"html\"]\u3001markdown\u3001json\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u5f62\u5f0f\u3067\u3042\u308a\u3001\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3053\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u3001docx\u3001html\u3001latex\u306e3\u3064\u306e\u5f62\u5f0f\u306e\u3044\u305a\u308c\u304b\u307e\u305f\u306f\u8907\u6570\u306e\u307f\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u307e\u3059\n pt_BR: '(For official API) Example: [\"docx\",\"html\"], markdown, json are\n the default export formats, no need to set, this parameter only supports\n one or more of docx, html, latex'\n zh_Hans: \uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u793a\u4f8b\uff1a[\"docx\",\"html\"],markdown\u3001json\u4e3a\u9ed8\u8ba4\u5bfc\u51fa\u683c\u5f0f\uff0c\u65e0\u987b\u8bbe\u7f6e\uff0c\u8be5\u53c2\u6570\u4ec5\u652f\u6301docx\u3001html\u3001latex\u4e09\u79cd\u683c\u5f0f\u4e2d\u7684\u4e00\u4e2a\u6216\u591a\u4e2a\n label:\n en_US: Extra export formats\n ja_JP: \u8ffd\u52a0\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u5f62\u5f0f\n pt_BR: Extra export formats\n zh_Hans: \u989d\u5916\u5bfc\u51fa\u683c\u5f0f\n llm_description: '(For official API) Example: [\"docx\",\"html\"], markdown,\n json are the default export formats, no need to set, this parameter only\n supports one or more of docx, html, latex'\n max: null\n min: null\n name: extra_formats\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: string\n params:\n enable_formula: ''\n enable_ocr: ''\n enable_table: ''\n extra_formats: ''\n file: ''\n language: ''\n layout_model: ''\n parse_method: ''\n provider_id: langgenius\/mineru\/mineru\n provider_name: langgenius\/mineru\/mineru\n provider_type: builtin\n selected: false\n title: MinerU\n tool_configurations:\n enable_formula:\n type: constant\n value: 1\n enable_ocr:\n type: constant\n value: 0\n enable_table:\n type: constant\n value: 1\n extra_formats:\n type: constant\n value: '[]'\n language:\n type: constant\n value: auto\n layout_model:\n type: constant\n value: doclayout_yolo\n parse_method:\n type: constant\n value: auto\n tool_description: a tool for parsing text, tables, and images, supporting\n multiple formats such as pdf, pptx, docx, etc. supporting multiple languages\n such as English, Chinese, etc.\n tool_label: Parse File\n tool_name: parse-file\n tool_node_version: '2'\n tool_parameters:\n file:\n type: variable\n value:\n - '1750400203722'\n - file\n type: tool\n height: 244\n id: '1751281136356'\n position:\n x: -263.7680017647218\n y: 282\n positionAbsolute:\n x: -263.7680017647218\n y: 282\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n - data:\n is_team_authorization: true\n output_schema:\n properties:\n result:\n description: Parent child chunks result\n items:\n type: object\n type: array\n type: object\n paramSchemas:\n - auto_generate: null\n default: null\n form: llm\n human_description:\n en_US: ''\n ja_JP: ''\n pt_BR: ''\n zh_Hans: ''\n label:\n en_US: Input Content\n ja_JP: Input Content\n pt_BR: Conte\u00fado de Entrada\n zh_Hans: \u8f93\u5165\u6587\u672c\n llm_description: The text you want to chunk.\n max: null\n min: null\n name: input_text\n options: []\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: paragraph\n form: llm\n human_description:\n en_US: Split text into paragraphs based on separator and maximum chunk\n length, using split text as parent block or entire document as parent\n block and directly retrieve.\n ja_JP: Split text into paragraphs based on separator and maximum chunk\n length, using split text as parent block or entire document as parent\n block and directly retrieve.\n pt_BR: Dividir texto em par\u00e1grafos com base no separador e no comprimento\n m\u00e1ximo do bloco, usando o texto dividido como bloco pai ou documento\n completo como bloco pai e diretamente recuper\u00e1-lo.\n zh_Hans: \u6839\u636e\u5206\u9694\u7b26\u548c\u6700\u5927\u5757\u957f\u5ea6\u5c06\u6587\u672c\u62c6\u5206\u4e3a\u6bb5\u843d\uff0c\u4f7f\u7528\u62c6\u5206\u6587\u672c\u4f5c\u4e3a\u68c0\u7d22\u7684\u7236\u5757\u6216\u6574\u4e2a\u6587\u6863\u7528\u4f5c\u7236\u5757\u5e76\u76f4\u63a5\u68c0\u7d22\u3002\n label:\n en_US: Parent Mode\n ja_JP: Parent Mode\n pt_BR: Modo Pai\n zh_Hans: \u7236\u5757\u6a21\u5f0f\n llm_description: Split text into paragraphs based on separator and maximum\n chunk length, using split text as parent block or entire document as parent\n block and directly retrieve.\n max: null\n min: null\n name: parent_mode\n options:\n - label:\n en_US: Paragraph\n ja_JP: Paragraph\n pt_BR: Par\u00e1grafo\n zh_Hans: \u6bb5\u843d\n value: paragraph\n - label:\n en_US: Full Document\n ja_JP: Full Document\n pt_BR: Documento Completo\n zh_Hans: \u5168\u6587\n value: full_doc\n placeholder: null\n precision: null\n required: true\n scope: null\n template: null\n type: select\n - auto_generate: null\n default: '\n\n\n '\n form: llm\n human_description:\n en_US: Separator used for chunking\n ja_JP: Separator used for chunking\n pt_BR: Separador usado para divis\u00e3o\n zh_Hans: \u7528\u4e8e\u5206\u5757\u7684\u5206\u9694\u7b26\n label:\n en_US: Parent Delimiter\n ja_JP: Parent Delimiter\n pt_BR: Separador de Pai\n zh_Hans: \u7236\u5757\u5206\u9694\u7b26\n llm_description: The separator used to split chunks\n max: null\n min: null\n name: separator\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: 1024\n form: llm\n human_description:\n en_US: Maximum length for chunking\n ja_JP: Maximum length for chunking\n pt_BR: Comprimento m\u00e1ximo para divis\u00e3o\n zh_Hans: \u7528\u4e8e\u5206\u5757\u7684\u6700\u5927\u957f\u5ea6\n label:\n en_US: Maximum Parent Chunk Length\n ja_JP: Maximum Parent Chunk Length\n pt_BR: Comprimento M\u00e1ximo do Bloco Pai\n zh_Hans: \u6700\u5927\u7236\u5757\u957f\u5ea6\n llm_description: Maximum length allowed per chunk\n max: null\n min: null\n name: max_length\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: number\n - auto_generate: null\n default: '. '\n form: llm\n human_description:\n en_US: Separator used for subchunking\n ja_JP: Separator used for subchunking\n pt_BR: Separador usado para subdivis\u00e3o\n zh_Hans: \u7528\u4e8e\u5b50\u5206\u5757\u7684\u5206\u9694\u7b26\n label:\n en_US: Child Delimiter\n ja_JP: Child Delimiter\n pt_BR: Separador de Subdivis\u00e3o\n zh_Hans: \u5b50\u5206\u5757\u5206\u9694\u7b26\n llm_description: The separator used to split subchunks\n max: null\n min: null\n name: subchunk_separator\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: string\n - auto_generate: null\n default: 512\n form: llm\n human_description:\n en_US: Maximum length for subchunking\n ja_JP: Maximum length for subchunking\n pt_BR: Comprimento m\u00e1ximo para subdivis\u00e3o\n zh_Hans: \u7528\u4e8e\u5b50\u5206\u5757\u7684\u6700\u5927\u957f\u5ea6\n label:\n en_US: Maximum Child Chunk Length\n ja_JP: Maximum Child Chunk Length\n pt_BR: Comprimento M\u00e1ximo de Subdivis\u00e3o\n zh_Hans: \u5b50\u5206\u5757\u6700\u5927\u957f\u5ea6\n llm_description: Maximum length allowed per subchunk\n max: null\n min: null\n name: subchunk_max_length\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: number\n - auto_generate: null\n default: 0\n form: llm\n human_description:\n en_US: Whether to remove consecutive spaces, newlines and tabs\n ja_JP: Whether to remove consecutive spaces, newlines and tabs\n pt_BR: Se deve remover espa\u00e7os extras no texto\n zh_Hans: \u662f\u5426\u79fb\u9664\u6587\u672c\u4e2d\u7684\u8fde\u7eed\u7a7a\u683c\u3001\u6362\u884c\u7b26\u548c\u5236\u8868\u7b26\n label:\n en_US: Replace consecutive spaces, newlines and tabs\n ja_JP: Replace consecutive spaces, newlines and tabs\n pt_BR: Substituir espa\u00e7os consecutivos, novas linhas e guias\n zh_Hans: \u66ff\u6362\u8fde\u7eed\u7a7a\u683c\u3001\u6362\u884c\u7b26\u548c\u5236\u8868\u7b26\n llm_description: Whether to remove consecutive spaces, newlines and tabs\n max: null\n min: null\n name: remove_extra_spaces\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n - auto_generate: null\n default: 0\n form: llm\n human_description:\n en_US: Whether to remove URLs and emails in the text\n ja_JP: Whether to remove URLs and emails in the text\n pt_BR: Se deve remover URLs e e-mails no texto\n zh_Hans: \u662f\u5426\u79fb\u9664\u6587\u672c\u4e2d\u7684URL\u548c\u7535\u5b50\u90ae\u4ef6\u5730\u5740\n label:\n en_US: Delete all URLs and email addresses\n ja_JP: Delete all URLs and email addresses\n pt_BR: Remover todas as URLs e e-mails\n zh_Hans: \u5220\u9664\u6240\u6709URL\u548c\u7535\u5b50\u90ae\u4ef6\u5730\u5740\n llm_description: Whether to remove URLs and emails in the text\n max: null\n min: null\n name: remove_urls_emails\n options: []\n placeholder: null\n precision: null\n required: false\n scope: null\n template: null\n type: boolean\n params:\n input_text: ''\n max_length: ''\n parent_mode: ''\n remove_extra_spaces: ''\n remove_urls_emails: ''\n separator: ''\n subchunk_max_length: ''\n subchunk_separator: ''\n provider_id: langgenius\/parentchild_chunker\/parentchild_chunker\n provider_name: langgenius\/parentchild_chunker\/parentchild_chunker\n provider_type: builtin\n selected: false\n title: Parent-child Chunker\n tool_configurations: {}\n tool_description: Process documents into parent-child chunk structures\n tool_label: Parent-child Chunker\n tool_name: parentchild_chunker\n tool_node_version: '2'\n tool_parameters:\n input_text:\n type: mixed\n value: '{{#1751281136356.text#}}'\n max_length:\n type: variable\n value:\n - rag\n - shared\n - Maximum_Parent_Length\n parent_mode:\n type: variable\n value:\n - rag\n - shared\n - Parent_Mode\n remove_extra_spaces:\n type: variable\n value:\n - rag\n - shared\n - clean_1\n remove_urls_emails:\n type: variable\n value:\n - rag\n - shared\n - clean_2\n separator:\n type: mixed\n value: '{{#rag.shared.Parent_Delimiter#}}'\n subchunk_max_length:\n type: variable\n value:\n - rag\n - shared\n - Maximum_Child_Length\n subchunk_separator:\n type: mixed\n value: '{{#rag.shared.Child_Delimiter#}}'\n type: tool\n height: 52\n id: '1751338398711'\n position:\n x: 42.95253988413964\n y: 282\n positionAbsolute:\n x: 42.95253988413964\n y: 282\n selected: false\n sourcePosition: right\n targetPosition: left\n type: custom\n width: 242\n viewport:\n x: 628.3302331655243\n y: 120.08894361588159\n zoom: 0.7027501395646496\n rag_pipeline_variables:\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: paragraph\n label: Parent Mode\n max_length: 48\n options:\n - paragraph\n - full_doc\n placeholder: null\n required: true\n tooltips: 'Parent Mode provides two options: paragraph mode splits text into paragraphs\n as parent chunks for retrieval, while full_doc mode uses the entire document\n as a single parent chunk (text beyond 10,000 tokens will be truncated).'\n type: select\n unit: null\n variable: Parent_Mode\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: \\n\\n\n label: Parent Delimiter\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: A delimiter is the character used to separate text. \\n\\n is recommended\n for splitting the original document into large parent chunks. You can also use\n special delimiters defined by yourself.\n type: text-input\n unit: null\n variable: Parent_Delimiter\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: 1024\n label: Maximum Parent Length\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: number\n unit: tokens\n variable: Maximum_Parent_Length\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: \\n\n label: Child Delimiter\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: A delimiter is the character used to separate text. \\n is recommended\n for splitting parent chunks into small child chunks. You can also use special\n delimiters defined by yourself.\n type: text-input\n unit: null\n variable: Child_Delimiter\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: 256\n label: Maximum Child Length\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: number\n unit: tokens\n variable: Maximum_Child_Length\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: true\n label: Replace consecutive spaces, newlines and tabs.\n max_length: 48\n options: []\n placeholder: null\n required: true\n tooltips: null\n type: checkbox\n unit: null\n variable: clean_1\n - allow_file_extension: null\n allow_file_upload_methods: null\n allowed_file_types: null\n belong_to_node_id: shared\n default_value: null\n label: Delete all URLs and email addresses.\n max_length: 48\n options: []\n placeholder: null\n required: false\n tooltips: null\n type: checkbox\n unit: null\n variable: clean_2\n", + "graph": { + "edges": [ + { + "data": { + "isInLoop": false, + "sourceType": "datasource", + "targetType": "tool" + }, + "id": "1750400203722-source-1751281136356-target", + "selected": false, + "source": "1750400203722", + "sourceHandle": "source", + "target": "1751281136356", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "tool", + "targetType": "knowledge-index" + }, + "id": "1751338398711-source-1750400198569-target", + "selected": false, + "source": "1751338398711", + "sourceHandle": "source", + "target": "1750400198569", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + }, + { + "data": { + "isInLoop": false, + "sourceType": "tool", + "targetType": "tool" + }, + "id": "1751281136356-source-1751338398711-target", + "selected": false, + "source": "1751281136356", + "sourceHandle": "source", + "target": "1751338398711", + "targetHandle": "target", + "type": "custom", + "zIndex": 0 + } + ], + "nodes": [ + { + "data": { + "chunk_structure": "hierarchical_model", + "embedding_model": "jina-embeddings-v2-base-en", + "embedding_model_provider": "langgenius\/jina\/jina", + "index_chunk_variable_selector": [ + "1751338398711", + "result" + ], + "indexing_technique": "high_quality", + "keyword_number": 10, + "retrieval_model": { + "reranking_enable": true, + "reranking_mode": "reranking_model", + "reranking_model": { + "reranking_model_name": "jina-reranker-v1-base-en", + "reranking_provider_name": "langgenius\/jina\/jina" + }, + "score_threshold": 0, + "score_threshold_enabled": false, + "search_method": "hybrid_search", + "top_k": 3, + "weights": null + }, + "selected": true, + "title": "Knowledge Base", + "type": "knowledge-index" + }, + "height": 114, + "id": "1750400198569", + "position": { + "x": 355.92518399555183, + "y": 282 + }, + "positionAbsolute": { + "x": 355.92518399555183, + "y": 282 + }, + "selected": true, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "datasource_configurations": {}, + "datasource_label": "File", + "datasource_name": "upload-file", + "datasource_parameters": {}, + "fileExtensions": [ + "txt", + "markdown", + "mdx", + "pdf", + "html", + "xlsx", + "xls", + "vtt", + "properties", + "doc", + "docx", + "csv", + "eml", + "msg", + "pptx", + "xml", + "epub", + "ppt", + "md" + ], + "plugin_id": "langgenius\/file", + "provider_name": "file", + "provider_type": "local_file", + "selected": false, + "title": "File Upload", + "type": "datasource" + }, + "height": 52, + "id": "1750400203722", + "position": { + "x": -579, + "y": 282 + }, + "positionAbsolute": { + "x": -579, + "y": 282 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 337, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Currently we support 4 types of \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Data Sources\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\": File Upload, Online Drive, Online Doc, and Web Crawler. Different types of Data Sources have different input and output types. The output of File Upload and Online Drive are files, while the output of Online Doc and WebCrawler are pages. You can find more Data Sources on our Marketplace.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A Knowledge Pipeline can have multiple data sources. Each data source can be selected more than once with different settings. Each added data source is a tab on the add file interface. However, each time the user can only select one data source to import the file and trigger its subsequent processing.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 358 + }, + "height": 337, + "id": "1751264451381", + "position": { + "x": -990.8091030156684, + "y": 282 + }, + "positionAbsolute": { + "x": -990.8091030156684, + "y": 282 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 358 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 260, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Knowledge Pipeline\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" starts with Data Source as the starting node and ends with the knowledge base node. The general steps are: import documents from the data source \u2192 use extractor to extract document content \u2192 split and clean content into structured chunks \u2192 store in the knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The user input variables required by the Knowledge Pipeline node must be predefined and managed via the Input Field section located in the top-right corner of the orchestration canvas. It determines what input fields the end users will see and need to fill in when importing files to the knowledge base through this pipeline.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Unique Inputs: Input fields defined here are only available to the selected data source and its downstream nodes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Global Inputs: These input fields are shared across all subsequent nodes after the data source and are typically set during the Process Documents step.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"For more information, see \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"https:\/\/docs.dify.ai\/en\/guides\/knowledge-base\/knowledge-pipeline\/knowledge-pipeline-orchestration.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":\"noreferrer\",\"target\":null,\"title\":null,\"url\":\"https:\/\/docs.dify.ai\/en\/guides\/knowledge-base\/knowledge-pipeline\/knowledge-pipeline-orchestration\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 1182 + }, + "height": 260, + "id": "1751266376760", + "position": { + "x": -579, + "y": -22.64803881585007 + }, + "positionAbsolute": { + "x": -579, + "y": -22.64803881585007 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 1182 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 541, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A document extractor for large language models (LLMs) like MinerU is a tool that preprocesses and converts diverse document types into structured, clean, and machine-readable data. This structured data can then be used to train or augment LLMs and retrieval-augmented generation (RAG) systems by providing them with accurate, well-organized content from varied sources. \",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"MinerU\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" is an advanced open-source document extractor designed specifically to convert complex, unstructured documents\u2014such as PDFs, Word files, and PPTs\u2014into high-quality, machine-readable formats like Markdown and JSON. MinerU addresses challenges in document parsing such as layout detection, formula recognition, and multi-language support, which are critical for generating high-quality training corpora for LLMs.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 541, + "id": "1751266402561", + "position": { + "x": -263.7680017647218, + "y": 558.328085421591 + }, + "positionAbsolute": { + "x": -263.7680017647218, + "y": 558.328085421591 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 554, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" addresses the dilemma of context and precision by leveraging a two-tier hierarchical approach that effectively balances the trade-off between accurate matching and comprehensive contextual information in RAG systems. \",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Here is the essential mechanism of this structured, two-level information access:\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"- Query Matching with Child Chunks: Small, focused pieces of information, often as concise as a single sentence within a paragraph, are used to match the user's query. These child chunks enable precise and relevant initial retrieval.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"- Contextual Enrichment with Parent Chunks: Larger, encompassing sections\u2014such as a paragraph, a section, or even an entire document\u2014that include the matched child chunks are then retrieved. These parent chunks provide comprehensive context for the Language Model (LLM).\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 554, + "id": "1751266447821", + "position": { + "x": 42.95253988413964, + "y": 366.1915342509804 + }, + "positionAbsolute": { + "x": 42.95253988413964, + "y": 366.1915342509804 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "author": "TenTen", + "desc": "", + "height": 411, + "selected": false, + "showAuthor": true, + "text": "{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The knowledge base provides two indexing methods:\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0and\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Economical\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", each with different retrieval strategies. High-Quality mode uses embeddings for vectorization and supports vector, full-text, and hybrid retrieval, offering more accurate results but higher resource usage. Economical mode uses keyword-based inverted indexing with no token consumption but lower accuracy; upgrading to High-Quality is possible, but downgrading requires creating a new knowledge base.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":null,\"format\":\"\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"* Parent-Child Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0and\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Q&A Mode\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0only support the\u00a0\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"High-Quality\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\u00a0indexing method.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"start\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1,\"textFormat\":1}}", + "theme": "blue", + "title": "", + "type": "", + "width": 240 + }, + "height": 411, + "id": "1751266580099", + "position": { + "x": 355.92518399555183, + "y": 434.6494699299023 + }, + "positionAbsolute": { + "x": 355.92518399555183, + "y": 434.6494699299023 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom-note", + "width": 240 + }, + { + "data": { + "credential_id": "fd1cbc33-1481-47ee-9af2-954b53d350e0", + "is_team_authorization": false, + "output_schema": { + "properties": { + "full_zip_url": { + "description": "The zip URL of the complete parsed result", + "type": "string" + }, + "images": { + "description": "The images extracted from the file", + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "paramSchemas": [ + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "ja_JP": "\u89e3\u6790\u3059\u308b\u30d5\u30a1\u30a4\u30eb(pdf\u3001ppt\u3001pptx\u3001doc\u3001docx\u3001png\u3001jpg\u3001jpeg\u3092\u30b5\u30dd\u30fc\u30c8)", + "pt_BR": "the file to be parsed(support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "zh_Hans": "\u7528\u4e8e\u89e3\u6790\u7684\u6587\u4ef6(\u652f\u6301 pdf, ppt, pptx, doc, docx, png, jpg, jpeg)" + }, + "label": { + "en_US": "file", + "ja_JP": "file", + "pt_BR": "file", + "zh_Hans": "file" + }, + "llm_description": "the file to be parsed (support pdf, ppt, pptx, doc, docx, png, jpg, jpeg)", + "max": null, + "min": null, + "name": "file", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "file" + }, + { + "auto_generate": null, + "default": "auto", + "form": "form", + "human_description": { + "en_US": "(For local deployment service)Parsing method, can be auto, ocr, or txt. Default is auto. If results are not satisfactory, try ocr", + "ja_JP": "\uff08\u30ed\u30fc\u30ab\u30eb\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u30b5\u30fc\u30d3\u30b9\u7528\uff09\u89e3\u6790\u65b9\u6cd5\u306f\u3001auto\u3001ocr\u3001\u307e\u305f\u306ftxt\u306e\u3044\u305a\u308c\u304b\u3067\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fauto\u3067\u3059\u3002\u7d50\u679c\u304c\u6e80\u8db3\u3067\u304d\u306a\u3044\u5834\u5408\u306f\u3001ocr\u3092\u8a66\u3057\u3066\u304f\u3060\u3055\u3044", + "pt_BR": "(For local deployment service)Parsing method, can be auto, ocr, or txt. Default is auto. If results are not satisfactory, try ocr", + "zh_Hans": "\uff08\u7528\u4e8e\u672c\u5730\u90e8\u7f72\u670d\u52a1\uff09\u89e3\u6790\u65b9\u6cd5\uff0c\u53ef\u4ee5\u662fauto, ocr, \u6216 txt\u3002\u9ed8\u8ba4\u662fauto\u3002\u5982\u679c\u7ed3\u679c\u4e0d\u7406\u60f3\uff0c\u8bf7\u5c1d\u8bd5ocr" + }, + "label": { + "en_US": "parse method", + "ja_JP": "\u89e3\u6790\u65b9\u6cd5", + "pt_BR": "parse method", + "zh_Hans": "\u89e3\u6790\u65b9\u6cd5" + }, + "llm_description": "Parsing method, can be auto, ocr, or txt. Default is auto. If results are not satisfactory, try ocr", + "max": null, + "min": null, + "name": "parse_method", + "options": [ + { + "label": { + "en_US": "auto", + "ja_JP": "auto", + "pt_BR": "auto", + "zh_Hans": "auto" + }, + "value": "auto" + }, + { + "label": { + "en_US": "ocr", + "ja_JP": "ocr", + "pt_BR": "ocr", + "zh_Hans": "ocr" + }, + "value": "ocr" + }, + { + "label": { + "en_US": "txt", + "ja_JP": "txt", + "pt_BR": "txt", + "zh_Hans": "txt" + }, + "value": "txt" + } + ], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "select" + }, + { + "auto_generate": null, + "default": 1, + "form": "form", + "human_description": { + "en_US": "(For official API) Whether to enable formula recognition", + "ja_JP": "\uff08\u516c\u5f0fAPI\u7528\uff09\u6570\u5f0f\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\u3069\u3046\u304b", + "pt_BR": "(For official API) Whether to enable formula recognition", + "zh_Hans": "\uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u662f\u5426\u5f00\u542f\u516c\u5f0f\u8bc6\u522b" + }, + "label": { + "en_US": "Enable formula recognition", + "ja_JP": "\u6570\u5f0f\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b", + "pt_BR": "Enable formula recognition", + "zh_Hans": "\u5f00\u542f\u516c\u5f0f\u8bc6\u522b" + }, + "llm_description": "(For official API) Whether to enable formula recognition", + "max": null, + "min": null, + "name": "enable_formula", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + }, + { + "auto_generate": null, + "default": 1, + "form": "form", + "human_description": { + "en_US": "(For official API) Whether to enable table recognition", + "ja_JP": "\uff08\u516c\u5f0fAPI\u7528\uff09\u8868\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\u3069\u3046\u304b", + "pt_BR": "(For official API) Whether to enable table recognition", + "zh_Hans": "\uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u662f\u5426\u5f00\u542f\u8868\u683c\u8bc6\u522b" + }, + "label": { + "en_US": "Enable table recognition", + "ja_JP": "\u8868\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b", + "pt_BR": "Enable table recognition", + "zh_Hans": "\u5f00\u542f\u8868\u683c\u8bc6\u522b" + }, + "llm_description": "(For official API) Whether to enable table recognition", + "max": null, + "min": null, + "name": "enable_table", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + }, + { + "auto_generate": null, + "default": "doclayout_yolo", + "form": "form", + "human_description": { + "en_US": "(For official API) Optional values: doclayout_yolo, layoutlmv3, default value is doclayout_yolo. doclayout_yolo is a self-developed model with better effect", + "ja_JP": "\uff08\u516c\u5f0fAPI\u7528\uff09\u30aa\u30d7\u30b7\u30e7\u30f3\u5024\uff1adoclayout_yolo\u3001layoutlmv3\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f doclayout_yolo\u3002doclayout_yolo \u306f\u81ea\u5df1\u958b\u767a\u30e2\u30c7\u30eb\u3067\u3001\u52b9\u679c\u304c\u3088\u308a\u826f\u3044", + "pt_BR": "(For official API) Optional values: doclayout_yolo, layoutlmv3, default value is doclayout_yolo. doclayout_yolo is a self-developed model with better effect", + "zh_Hans": "\uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u53ef\u9009\u503c\uff1adoclayout_yolo\u3001layoutlmv3\uff0c\u9ed8\u8ba4\u503c\u4e3a doclayout_yolo\u3002doclayout_yolo \u4e3a\u81ea\u7814\u6a21\u578b\uff0c\u6548\u679c\u66f4\u597d" + }, + "label": { + "en_US": "Layout model", + "ja_JP": "\u30ec\u30a4\u30a2\u30a6\u30c8\u691c\u51fa\u30e2\u30c7\u30eb", + "pt_BR": "Layout model", + "zh_Hans": "\u5e03\u5c40\u68c0\u6d4b\u6a21\u578b" + }, + "llm_description": "(For official API) Optional values: doclayout_yolo, layoutlmv3, default value is doclayout_yolo. doclayout_yolo is a self-developed model withbetter effect", + "max": null, + "min": null, + "name": "layout_model", + "options": [ + { + "label": { + "en_US": "doclayout_yolo", + "ja_JP": "doclayout_yolo", + "pt_BR": "doclayout_yolo", + "zh_Hans": "doclayout_yolo" + }, + "value": "doclayout_yolo" + }, + { + "label": { + "en_US": "layoutlmv3", + "ja_JP": "layoutlmv3", + "pt_BR": "layoutlmv3", + "zh_Hans": "layoutlmv3" + }, + "value": "layoutlmv3" + } + ], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "select" + }, + { + "auto_generate": null, + "default": "auto", + "form": "form", + "human_description": { + "en_US": "(For official API) Specify document language, default ch, can be set to auto, when auto, the model will automatically identify document language, other optional value list see: https:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/ppocr\/blog\/multi_languages.html#5", + "ja_JP": "\uff08\u516c\u5f0fAPI\u7528\uff09\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u8a00\u8a9e\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306fch\u3067\u3001auto\u306b\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002auto\u306e\u5834\u5408\u3001\u30e2\u30c7\u30eb\u306f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u8a00\u8a9e\u3092\u81ea\u52d5\u7684\u306b\u8b58\u5225\u3057\u307e\u3059\u3002\u4ed6\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u5024\u30ea\u30b9\u30c8\u306b\u3064\u3044\u3066\u306f\u3001\u6b21\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\uff1ahttps:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/ppocr\/blog\/multi_languages.html#5", + "pt_BR": "(For official API) Specify document language, default ch, can be set to auto, when auto, the model will automatically identify document language, other optional value list see: https:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/ppocr\/blog\/multi_languages.html#5", + "zh_Hans": "\uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u6307\u5b9a\u6587\u6863\u8bed\u8a00\uff0c\u9ed8\u8ba4 ch\uff0c\u53ef\u4ee5\u8bbe\u7f6e\u4e3aauto\uff0c\u5f53\u4e3aauto\u65f6\u6a21\u578b\u4f1a\u81ea\u52a8\u8bc6\u522b\u6587\u6863\u8bed\u8a00\uff0c\u5176\u4ed6\u53ef\u9009\u503c\u5217\u8868\u8be6\u89c1\uff1ahttps:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/ppocr\/blog\/multi_languages.html#5" + }, + "label": { + "en_US": "Document language", + "ja_JP": "\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u8a00\u8a9e", + "pt_BR": "Document language", + "zh_Hans": "\u6587\u6863\u8bed\u8a00" + }, + "llm_description": "(For official API) Specify document language, default ch, can be set to auto, when auto, the model will automatically identify document language, other optional value list see: https:\/\/paddlepaddle.github.io\/PaddleOCR\/latest\/ppocr\/blog\/multi_languages.html#5", + "max": null, + "min": null, + "name": "language", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": 0, + "form": "form", + "human_description": { + "en_US": "(For official API) Whether to enable OCR recognition", + "ja_JP": "\uff08\u516c\u5f0fAPI\u7528\uff09OCR\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b\u304b\u3069\u3046\u304b", + "pt_BR": "(For official API) Whether to enable OCR recognition", + "zh_Hans": "\uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u662f\u5426\u5f00\u542fOCR\u8bc6\u522b" + }, + "label": { + "en_US": "Enable OCR recognition", + "ja_JP": "OCR\u8a8d\u8b58\u3092\u6709\u52b9\u306b\u3059\u308b", + "pt_BR": "Enable OCR recognition", + "zh_Hans": "\u5f00\u542fOCR\u8bc6\u522b" + }, + "llm_description": "(For official API) Whether to enable OCR recognition", + "max": null, + "min": null, + "name": "enable_ocr", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + }, + { + "auto_generate": null, + "default": "[]", + "form": "form", + "human_description": { + "en_US": "(For official API) Example: [\"docx\",\"html\"], markdown, json are the default export formats, no need to set, this parameter only supports one or more of docx, html, latex", + "ja_JP": "\uff08\u516c\u5f0fAPI\u7528\uff09\u4f8b\uff1a[\"docx\",\"html\"]\u3001markdown\u3001json\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u5f62\u5f0f\u3067\u3042\u308a\u3001\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u3053\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u3001docx\u3001html\u3001latex\u306e3\u3064\u306e\u5f62\u5f0f\u306e\u3044\u305a\u308c\u304b\u307e\u305f\u306f\u8907\u6570\u306e\u307f\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u307e\u3059", + "pt_BR": "(For official API) Example: [\"docx\",\"html\"], markdown, json are the default export formats, no need to set, this parameter only supports one or more of docx, html, latex", + "zh_Hans": "\uff08\u7528\u4e8e\u5b98\u65b9API\uff09\u793a\u4f8b\uff1a[\"docx\",\"html\"],markdown\u3001json\u4e3a\u9ed8\u8ba4\u5bfc\u51fa\u683c\u5f0f\uff0c\u65e0\u987b\u8bbe\u7f6e\uff0c\u8be5\u53c2\u6570\u4ec5\u652f\u6301docx\u3001html\u3001latex\u4e09\u79cd\u683c\u5f0f\u4e2d\u7684\u4e00\u4e2a\u6216\u591a\u4e2a" + }, + "label": { + "en_US": "Extra export formats", + "ja_JP": "\u8ffd\u52a0\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u5f62\u5f0f", + "pt_BR": "Extra export formats", + "zh_Hans": "\u989d\u5916\u5bfc\u51fa\u683c\u5f0f" + }, + "llm_description": "(For official API) Example: [\"docx\",\"html\"], markdown, json are the default export formats, no need to set, this parameter only supports one or more of docx, html, latex", + "max": null, + "min": null, + "name": "extra_formats", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "string" + } + ], + "params": { + "enable_formula": "", + "enable_ocr": "", + "enable_table": "", + "extra_formats": "", + "file": "", + "language": "", + "layout_model": "", + "parse_method": "" + }, + "provider_id": "langgenius\/mineru\/mineru", + "provider_name": "langgenius\/mineru\/mineru", + "provider_type": "builtin", + "selected": false, + "title": "MinerU", + "tool_configurations": { + "enable_formula": { + "type": "constant", + "value": 1 + }, + "enable_ocr": { + "type": "constant", + "value": 0 + }, + "enable_table": { + "type": "constant", + "value": 1 + }, + "extra_formats": { + "type": "constant", + "value": "[]" + }, + "language": { + "type": "constant", + "value": "auto" + }, + "layout_model": { + "type": "constant", + "value": "doclayout_yolo" + }, + "parse_method": { + "type": "constant", + "value": "auto" + } + }, + "tool_description": "a tool for parsing text, tables, and images, supporting multiple formats such as pdf, pptx, docx, etc. supporting multiple languages such as English, Chinese, etc.", + "tool_label": "Parse File", + "tool_name": "parse-file", + "tool_node_version": "2", + "tool_parameters": { + "file": { + "type": "variable", + "value": [ + "1750400203722", + "file" + ] + } + }, + "type": "tool" + }, + "height": 244, + "id": "1751281136356", + "position": { + "x": -263.7680017647218, + "y": 282 + }, + "positionAbsolute": { + "x": -263.7680017647218, + "y": 282 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + }, + { + "data": { + "is_team_authorization": true, + "output_schema": { + "properties": { + "result": { + "description": "Parent child chunks result", + "items": { + "type": "object" + }, + "type": "array" + } + }, + "type": "object" + }, + "paramSchemas": [ + { + "auto_generate": null, + "default": null, + "form": "llm", + "human_description": { + "en_US": "", + "ja_JP": "", + "pt_BR": "", + "zh_Hans": "" + }, + "label": { + "en_US": "Input Content", + "ja_JP": "Input Content", + "pt_BR": "Conte\u00fado de Entrada", + "zh_Hans": "\u8f93\u5165\u6587\u672c" + }, + "llm_description": "The text you want to chunk.", + "max": null, + "min": null, + "name": "input_text", + "options": [], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": "paragraph", + "form": "llm", + "human_description": { + "en_US": "Split text into paragraphs based on separator and maximum chunk length, using split text as parent block or entire document as parent block and directly retrieve.", + "ja_JP": "Split text into paragraphs based on separator and maximum chunk length, using split text as parent block or entire document as parent block and directly retrieve.", + "pt_BR": "Dividir texto em par\u00e1grafos com base no separador e no comprimento m\u00e1ximo do bloco, usando o texto dividido como bloco pai ou documento completo como bloco pai e diretamente recuper\u00e1-lo.", + "zh_Hans": "\u6839\u636e\u5206\u9694\u7b26\u548c\u6700\u5927\u5757\u957f\u5ea6\u5c06\u6587\u672c\u62c6\u5206\u4e3a\u6bb5\u843d\uff0c\u4f7f\u7528\u62c6\u5206\u6587\u672c\u4f5c\u4e3a\u68c0\u7d22\u7684\u7236\u5757\u6216\u6574\u4e2a\u6587\u6863\u7528\u4f5c\u7236\u5757\u5e76\u76f4\u63a5\u68c0\u7d22\u3002" + }, + "label": { + "en_US": "Parent Mode", + "ja_JP": "Parent Mode", + "pt_BR": "Modo Pai", + "zh_Hans": "\u7236\u5757\u6a21\u5f0f" + }, + "llm_description": "Split text into paragraphs based on separator and maximum chunk length, using split text as parent block or entire document as parent block and directly retrieve.", + "max": null, + "min": null, + "name": "parent_mode", + "options": [ + { + "label": { + "en_US": "Paragraph", + "ja_JP": "Paragraph", + "pt_BR": "Par\u00e1grafo", + "zh_Hans": "\u6bb5\u843d" + }, + "value": "paragraph" + }, + { + "label": { + "en_US": "Full Document", + "ja_JP": "Full Document", + "pt_BR": "Documento Completo", + "zh_Hans": "\u5168\u6587" + }, + "value": "full_doc" + } + ], + "placeholder": null, + "precision": null, + "required": true, + "scope": null, + "template": null, + "type": "select" + }, + { + "auto_generate": null, + "default": "\n\n", + "form": "llm", + "human_description": { + "en_US": "Separator used for chunking", + "ja_JP": "Separator used for chunking", + "pt_BR": "Separador usado para divis\u00e3o", + "zh_Hans": "\u7528\u4e8e\u5206\u5757\u7684\u5206\u9694\u7b26" + }, + "label": { + "en_US": "Parent Delimiter", + "ja_JP": "Parent Delimiter", + "pt_BR": "Separador de Pai", + "zh_Hans": "\u7236\u5757\u5206\u9694\u7b26" + }, + "llm_description": "The separator used to split chunks", + "max": null, + "min": null, + "name": "separator", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": 1024, + "form": "llm", + "human_description": { + "en_US": "Maximum length for chunking", + "ja_JP": "Maximum length for chunking", + "pt_BR": "Comprimento m\u00e1ximo para divis\u00e3o", + "zh_Hans": "\u7528\u4e8e\u5206\u5757\u7684\u6700\u5927\u957f\u5ea6" + }, + "label": { + "en_US": "Maximum Parent Chunk Length", + "ja_JP": "Maximum Parent Chunk Length", + "pt_BR": "Comprimento M\u00e1ximo do Bloco Pai", + "zh_Hans": "\u6700\u5927\u7236\u5757\u957f\u5ea6" + }, + "llm_description": "Maximum length allowed per chunk", + "max": null, + "min": null, + "name": "max_length", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "number" + }, + { + "auto_generate": null, + "default": ". ", + "form": "llm", + "human_description": { + "en_US": "Separator used for subchunking", + "ja_JP": "Separator used for subchunking", + "pt_BR": "Separador usado para subdivis\u00e3o", + "zh_Hans": "\u7528\u4e8e\u5b50\u5206\u5757\u7684\u5206\u9694\u7b26" + }, + "label": { + "en_US": "Child Delimiter", + "ja_JP": "Child Delimiter", + "pt_BR": "Separador de Subdivis\u00e3o", + "zh_Hans": "\u5b50\u5206\u5757\u5206\u9694\u7b26" + }, + "llm_description": "The separator used to split subchunks", + "max": null, + "min": null, + "name": "subchunk_separator", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "string" + }, + { + "auto_generate": null, + "default": 512, + "form": "llm", + "human_description": { + "en_US": "Maximum length for subchunking", + "ja_JP": "Maximum length for subchunking", + "pt_BR": "Comprimento m\u00e1ximo para subdivis\u00e3o", + "zh_Hans": "\u7528\u4e8e\u5b50\u5206\u5757\u7684\u6700\u5927\u957f\u5ea6" + }, + "label": { + "en_US": "Maximum Child Chunk Length", + "ja_JP": "Maximum Child Chunk Length", + "pt_BR": "Comprimento M\u00e1ximo de Subdivis\u00e3o", + "zh_Hans": "\u5b50\u5206\u5757\u6700\u5927\u957f\u5ea6" + }, + "llm_description": "Maximum length allowed per subchunk", + "max": null, + "min": null, + "name": "subchunk_max_length", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "number" + }, + { + "auto_generate": null, + "default": 0, + "form": "llm", + "human_description": { + "en_US": "Whether to remove consecutive spaces, newlines and tabs", + "ja_JP": "Whether to remove consecutive spaces, newlines and tabs", + "pt_BR": "Se deve remover espa\u00e7os extras no texto", + "zh_Hans": "\u662f\u5426\u79fb\u9664\u6587\u672c\u4e2d\u7684\u8fde\u7eed\u7a7a\u683c\u3001\u6362\u884c\u7b26\u548c\u5236\u8868\u7b26" + }, + "label": { + "en_US": "Replace consecutive spaces, newlines and tabs", + "ja_JP": "Replace consecutive spaces, newlines and tabs", + "pt_BR": "Substituir espa\u00e7os consecutivos, novas linhas e guias", + "zh_Hans": "\u66ff\u6362\u8fde\u7eed\u7a7a\u683c\u3001\u6362\u884c\u7b26\u548c\u5236\u8868\u7b26" + }, + "llm_description": "Whether to remove consecutive spaces, newlines and tabs", + "max": null, + "min": null, + "name": "remove_extra_spaces", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + }, + { + "auto_generate": null, + "default": 0, + "form": "llm", + "human_description": { + "en_US": "Whether to remove URLs and emails in the text", + "ja_JP": "Whether to remove URLs and emails in the text", + "pt_BR": "Se deve remover URLs e e-mails no texto", + "zh_Hans": "\u662f\u5426\u79fb\u9664\u6587\u672c\u4e2d\u7684URL\u548c\u7535\u5b50\u90ae\u4ef6\u5730\u5740" + }, + "label": { + "en_US": "Delete all URLs and email addresses", + "ja_JP": "Delete all URLs and email addresses", + "pt_BR": "Remover todas as URLs e e-mails", + "zh_Hans": "\u5220\u9664\u6240\u6709URL\u548c\u7535\u5b50\u90ae\u4ef6\u5730\u5740" + }, + "llm_description": "Whether to remove URLs and emails in the text", + "max": null, + "min": null, + "name": "remove_urls_emails", + "options": [], + "placeholder": null, + "precision": null, + "required": false, + "scope": null, + "template": null, + "type": "boolean" + } + ], + "params": { + "input_text": "", + "max_length": "", + "parent_mode": "", + "remove_extra_spaces": "", + "remove_urls_emails": "", + "separator": "", + "subchunk_max_length": "", + "subchunk_separator": "" + }, + "provider_id": "langgenius\/parentchild_chunker\/parentchild_chunker", + "provider_name": "langgenius\/parentchild_chunker\/parentchild_chunker", + "provider_type": "builtin", + "selected": false, + "title": "Parent-child Chunker", + "tool_configurations": {}, + "tool_description": "Process documents into parent-child chunk structures", + "tool_label": "Parent-child Chunker", + "tool_name": "parentchild_chunker", + "tool_node_version": "2", + "tool_parameters": { + "input_text": { + "type": "mixed", + "value": "{{#1751281136356.text#}}" + }, + "max_length": { + "type": "variable", + "value": [ + "rag", + "shared", + "Maximum_Parent_Length" + ] + }, + "parent_mode": { + "type": "variable", + "value": [ + "rag", + "shared", + "Parent_Mode" + ] + }, + "remove_extra_spaces": { + "type": "variable", + "value": [ + "rag", + "shared", + "clean_1" + ] + }, + "remove_urls_emails": { + "type": "variable", + "value": [ + "rag", + "shared", + "clean_2" + ] + }, + "separator": { + "type": "mixed", + "value": "{{#rag.shared.Parent_Delimiter#}}" + }, + "subchunk_max_length": { + "type": "variable", + "value": [ + "rag", + "shared", + "Maximum_Child_Length" + ] + }, + "subchunk_separator": { + "type": "mixed", + "value": "{{#rag.shared.Child_Delimiter#}}" + } + }, + "type": "tool" + }, + "height": 52, + "id": "1751338398711", + "position": { + "x": 42.95253988413964, + "y": 282 + }, + "positionAbsolute": { + "x": 42.95253988413964, + "y": 282 + }, + "selected": false, + "sourcePosition": "right", + "targetPosition": "left", + "type": "custom", + "width": 242 + } + ], + "viewport": { + "x": 628.3302331655243, + "y": 120.08894361588159, + "zoom": 0.7027501395646496 + } + }, + "icon_info": { + "icon": "87426868-91d6-4774-a535-5fd4595a77b3", + "icon_background": null, + "icon_type": "image", + "icon_url": "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAACgCAYAAACLz2ctAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAoKADAAQAAAABAAAAoAAAAACn7BmJAAARwElEQVR4Ae1dvXPcxhVfLMAP0RR1pL7MGVu8G7sXXdszotNYne1x6kgpktZSiiRNIrtMilgqnNZSb4\/lzm4i5i8w1TvDE+UZyZIlnihKOvIAbN5v7\/aIw93xPvBBHPDezBHYBbC7+O2Pb9++\/YAlMiIPHjwoO65btpQqK6VKVKySsqwV9fQpSliy6IcTubhYxrFTrJJqXe+Mz2+I8KgJoeh3IIRBTW1vt+MoXLWWlgRheo\/uqlmWVSVMa67jVJeXl6sHTx7dGb1HurK9uVnybHtNKXFBWAKEW1XCKvcrhb+tCdi+LBeX2ud80o3AaHipDUGkFErdJXJu2J63vliptAncnXr8MakQ8PH9+2tU9Av0omtCCZx3iZSSsLCE49j6iHPE+U+fCEnnCEOmTp\/uehbXzPWuizmNoFaC4CQdFxCE3V9\/bcd4vk8txpLwW\/f6FPZ9RT8c\/fZ9nSdESmGtK1veOvPGG3SerCRGQGg6V8rLxIwPg6QDUWzb1kTDcXrKaROu16v6T550RMuTJzvCHOhEYBS8PM8TIGmj4QrX9ejndiRG5Kj6lvj8zLlzNzsuxBiInYCaeI7zqeWrK8YuA+lmZqbF9PSUcIh0o2irUQCNEZeJTSoqXg0i4d7evial0ZIgopLWzdNvvvl53MDESsBfNrc+sqX6wth0juOIublZMUXHcSUqoOPmO6nPxYkXiFinn9GMIGLcGjEWApLWK7u2\/ZVpauMgniFAnICaNPN8TAIvaMXd3ZcHdqMlbjve1NXFSvSetIxaGU\/u3\/\/Uk\/aPIB+a1rm5Y+LEwnwkrRe1TPx8vAigBVssLYj51+Z0x5Dq+iNXNn58tLV1OWpOYxMQtt7jra0vqFd1HbYe7DsU8tjsTNQy8fMZRQB2PJQLjiQlS4mvwIEoxR2rCdZNrpTfUnd9FVrv2LHZxIiXRJMSBbCsP5sWXvX6nnj1qq5dPOQQ33D86Y\/HaZJH1oAgnyflHZAPfrrSieOJkS\/rlV3k8s1SS3eC6h4cABc82bizvfmgPComIxHQkA+9XPjwoI6bBRg1W74\/Dwig7sEBuNbIDCPFNDoJhyYgky8PlIn\/HUDChQgkHIqAvcg3ijM5\/tfmFLOEALgwLgmHIiANqX0bbHaZfFmq\/myUJUxCV+5\/S4qrNKh0AwnY7GY3OxwLx18baRhtUOZ8PV8IgITHiSOmY0KDE9cGveGhBHy0SY5GJa4gYe5wDIKSrwMB0zHBDCZw5+G9e1cOQ6YvAWH3kX2pnYzw8zVZfVhSfI0RaCIAroAzEJp6cu0w90xfApL6pEkFogSvN49uNIHlv8MjAD8hRsdISq7d+Krfkz0J2Gp6PwKT51pM7pcAxzMC\/RDQY8fNpnjtV5op1eu+ngSUUmnjEeTjprcXbBw3DALoO5imWJA516tX3EVAmt1yDS4XEK816DxMXnwPI9ATATTFmJ5H5lx5X8quDkkXAZXvX0ZK8\/NzPRPkSEZgVAQwKRlCq34+DWvBDgLC9oP2w\/yvKLOYdW78hxFoIQAuQQuSNNcJBZDpIKCx\/bjpDSDEp7EgYLQgjWR8GEywTcBHmz\/r9bls+wXh4fO4EIAWbDmn1x5v3l8z6bYJKKV3GZFTtEyShRFIAoHp5kxq4Ut\/zaTfJqAS8gIiufk10PAxbgRajmloQs01pK+n5KNn4kp7GxEnlwZOYMBtqUl4inlqGeckoywt5MfODbXajp7G7\/jeIrYB0RoQe7UAb+755oR1GX0NOKYlzZ6GGM5pAhIzVxFp074sLIxAkghg7x8I7VezhmPTBrSs8wiwBgQKLEkigLVEEIyM4Njs8iqLAtQNsdt9ElzLhGTJhskEIBNeCGxG9YLegaZpaaXXYlyzCcbqJhZGIEkEYAdCjAaUD2jiKSJ41gtQYEkaAd0RoYkuEOyKK2mMroyA3YrEOQsjkCQCRgs6dbcsaYtc7fizZFM1Jpkxp80IAAHTE7ZsVZbkgikjkptgoMCSBgJGAxL3SmiMmxqwZRymUQDOo9gIGAKCe9L0RgKRxUaH3z5xBExrS5xbaTv+9FSZxLPmDBiBTgSId9YKorLohO4sKofygoBRdp5Si20NmJeX4\/fIPgLG40JEPMEEzH595bqEtF7Ool4wLUWa0F7wr+\/\/JlMVdOrOfzrKY8p3\/C9\/FjMXL3ZcK2rADHrQHtPkiBa+dsOYdrmooCT93s\/\/8U+x9\/33SWczcelzE5xilYGEjY2NFHPMflZMwJTraOdvfxfuTz+lnGt2s3O8bb0URPheA+NxsZeU5\/N1Qqp2d8Wzq38SJ774l3DefrvzYgZDSazJ0V\/r3Hmu3xZTEHgoLuWKNyT0Hj5MOedsZBfo8OqhOCbgEdQLSLhDmrCIJOwg4BFgz1m2EAD5ikpCQwIHX9SGyJjWAydhM5jC5vFoSLhANqH9+uuZf8W4bHppNZd\/xN\/ryDyE2SugIWERm2MmYEb4aEgI27BIwgTMUG2DhDXqmBSJhEzADBEQRfHISV0kEjIBM0ZAQ0KMmBRBmIAZrWWMGWPsOO\/CBMxwDWP2TN5JyATMMAFRNJBw98t\/Z7yU4xePCTg+dqk9Wf\/6a\/Hy1q3U8kszIyZgmmhHyOvlzVu5JCETMAIp0n40jyRkAqbNooj55Y2ETMCIhDiKx0HCV19\/cxRZx54nEzB2SNNJ8MWXX+ZikRMTMB2+JJJLHnyE\/FmkRKhxkGh4nfDBFT4DAqwBmQdHigAT8Ejh58yZgMyBI0WAbcCY4Td7wcScbN\/kJt3GZA3Yt2r5QhoIMAHTQJnz6IsAE7AvNHwhDQSYgGmgzHn0RYAJ2BcavpAGAkzANFDmPPoiwATsCw1fSAOBifcDTrofLI1KznIerAGzXDsFKBsTsACVnOVXZAJmuXYKUDYmYAEqOcuvyATMcu0UoGxMwAJUcpZfkQmY5dopQNkmzg846nw7m77Fge9xzH7wgZhaPT+wSodN35qf1+kibef8eTHz3rsD0+51w7D59Xq2V9yk+UUnjoC9QD8sDhs+4odNfqZWV8U8fTQwjs3AsYsptlDTn96ivVt2iZDT770n5i79Lpb0D3unPF0rVBMMstT+8MdEPpUFQoLkSD8vi8bTIHqhCAhAQRR8KiupHemRPhaN53lLtTiJOfFN8CCbp7FxV9RJM+398EMbN5Bkl3YfxffaBkm\/9P2Hv2gSI2337t0uQmNLNeSD7wSPIv3yGyWNSbp34gk4CGx0PPCD3RfcY8\/Yb7ALxxH5+lmBn+nY7H3\/g04\/qFnRJDtvvSWO\/faTcbIoxDOFaYLnLl\/SnZBgrYI0ccnMxQ9Er68doTnmz7P2R7kwBAQE6KEGpUFNZ5wCLdubhPndYjcqfoUiYPj7vMHmMiqQ5nmQEK6eoKC5hz3I0o1AoQgI53EaArsybFvWY2zu03iHtPIoFAHRIw5KWCMGr0U9n363c2QEznCWbgQKRcB6wBUDKOTZs92IxBRjescmubjtTZPupB9z74YxFQQXDNwiQZm9eDEYjPU8PNznD2kDjjo2POl+w1wTEIa\/+9P\/tH9Oj9kGKAaCTI85gSCQTN\/TsL3JnZDeUE08AUfVGIAB5IC7hOXoESiUDQi4QT4MwYWbyLirIqzxwhox7vwmNb2J14CjAB\/ndKxB+aLpD8qwhJ90my74zsOc556Akmy9GXKJYK5euGc6DEDj3hMefkuyxz1uGbPw3MQTMKsao\/5N54dkZugfgKUbgcLZgN0QxB+DSQ7hYT5niOUA8Zck+yk6\/vZTXUpfedkv7QSUEMQLTvtCkWdoPcqwNmDWX9F\/8iSWIvq1Zzod1oCxwNlMBOTb6THbGlPBWHoj4FhC1JQQJaWUsCwKsYyFwCuy+fARwbD7Ze7Spdxov7GA6fEQuNaSmkOnNQowAQ0kQx4xJb9BEwwwHR\/T8sPEQzJoeln7dQPaQUB7cVGQ7hOytCCk5BY5DNc4Iy2GfMf\/+pdwchMXlidPxl9m3xfSniLWCTHxbpj40YmWIkY80OzyOpDhcGQCDofTwLtAvGOffKKJx8NuA+Fq38AEbEMx2glIBtfKFG3LgVEW5+239DjzaKkU826\/1QlRQtWsx1tbd8gIXFtYmBdTDvOxmJRI960brit2dmiNjCXWudeRLvacWwgBEBBuGKH8tm8mdAsHGYHkEJDkk9FjIgHfTHK5ccqMACHgeb7GgdwwVW6CmRLpI3AwEiIkWIgSeOQcZGEE0kCg3QtW6t6BDRhgZRqF4DyKi0DA3KtJy7eanRAmYHEZkfKb+8YGtKyqVI5VRf6uy\/MBU66HwmbXboI9qyZd160CiYBaLCww\/OLpIOC3+hvurFOVy5VKFdkikn2B6VRA0XMxBFxeXm66YSyhqgCFxuaKjg2\/f8IIuJ4x9dQGstKDv8qyaAM7UW40XDEzM51wEUZLPq41CKPlmp+7E5nPFwEe0wEhp989JKMd0Rb5YxA4YCdCLIxA\/AhgIgKEiKc1YHMkxLLWEelxTxgwsCSIgPG20PqjAwLanreOPKEBuSOSIPqcNLn7mhrQcE7bgIuVSo3mBa6TK2bN9T0xJbM7LzBrNk3WOJVlm9k0v9Td3QDngF2zCcaZUv\/FYX+\/gQMLIxA7Anv1fZ0m+Vo01xA4IKAv1xGxt9e8CecsjECcCLQ1oO\/fNOm2CXi68uY6pkhjRKR9o7mLj4xARASg2PRgB82+OlOp6A4IkmwTUKev1Hc4vnpZ10H+wwjEhUDdtKyW+DyYZgcBnaZqrEEDshYMwsTnURAAl9D7JduveubcuZvBtDoI2OyZqBu4gbVgECY+j4LA7u5L\/Ti5+G6F0+kgIC6SFrxOY8JVsLZe3wvfz2FGYCQEgrbf2crKZ+GHuwgILSh96ypufPmqzo7pMGIcHhoBLPMAh7SEbD+TSBcBceFU5dxt0yPefdFUn+YBPjICwyIAM05PvbLE7bDtZ9LoSUBcpGG539Ohtt9ocFNs0OLj0AjAfNvb1z7lmutN6Ra118N9CagnqvpKd5mhRnnVXC\/4OK4XAsGmV1ni6nJludrrPsT1JSAunq6sXKfJqjfgnMZeHkxCoMJyGALgCLgCzlCv90a\/ptekcSgBcZPt+59h8Bht+fPnL7hTYpDjYxcCIB040hzxUBtnKitXum4KRQwkIHrFru9\/DNeMR9O1nj0ndvM+MiEYOQjyPUMriSl95HD2\/OmPh0FlIAGRCOxBUq3vMwmHgbR493STb+r9w+y+IEJDERAP9CIh24RBKIt5Dg50ar7hyQfEhiYgbg6TkDsmQKW4YjocB83uaOQDciMREA8YEpqOybNnz9lPCGAKJvDzoe5Nh8PzRycfIBuZgHgIJDy9svKOcdG8ePlKYMCZm2Sgk28xPV3UOc7hanlB\/YNhbb4wOmMR0CRyamXlivKFHjGB1xtNMs+oNujk7witt13bERgdI6kJX12Fq6XSWt8xzhtHIiAyPFM5d5MWMr1DY8e3oY4xdoxC8nzCcaojm8+gLqFcjNbDPAHXn3oHAxVRS2xFTSD4\/KPNrctCqmuWsMqIx6772Gkhym4L4VVevCoOyPaXOPEC8TChwCgT+Peoxbt6FpNVYpJYCWjK9Hjz3mdKikuGiPgEmCbj7PTIn4KIE1BTvjwfo+AFmw5rw7EyEqYUwi1Bc3tjV\/jXozS3JrHgMRECmgzCGtHEg4y2Y2sySlsKx7bNpa5jFEC7EitAxLB46Q4EEWyf9gOCGwW7YuiNCQ5Ip7\/jQSz8bpeWasRNPFMViRLQZPJo8+dV2vjjsiXFBXorOu8WaEmbfvhkLEipj3SOD2oj3oh96hRtbN1ZbNyLX5HEECj8zo3Hj3UUrmMjSLl0sukqoXPEYWsMfY3s9Z5C9p3wsEZcruuVkj1vii8y9Vrb3NwsHRf2mpJqlVhzntAo9yMlXtN80d28slxcMqd87IHAKHhhWz7sjKY8bBZurT8X3npSmq5HUXVU6gTsV5AHmw\/KjnDLBEqJyFmm+0oEzop6+pQ6XQJhLdbiYonCJRPGkT43i3BHXPB6Ts9rhFUt\/G7+9nYVcWS94VrNWloSrd3PatgPnLCqusKpjuu3Q9pxyv8BVb3XBNS3Vn0AAAAASUVORK5CYII=" + }, + "id": "629cb5b8-490a-48bc-808b-ffc13085cb4f", + "name": "Complex PDF with Images & Tables" +} + } +} \ No newline at end of file diff --git a/api/controllers/console/app/advanced_prompt_template.py b/api/controllers/console/app/advanced_prompt_template.py index 5885d7b447..075345d860 100644 --- a/api/controllers/console/app/advanced_prompt_template.py +++ b/api/controllers/console/app/advanced_prompt_template.py @@ -5,18 +5,20 @@ from controllers.console.wraps import account_initialization_required, setup_req from libs.login import login_required from services.advanced_prompt_template_service import AdvancedPromptTemplateService +parser = ( + reqparse.RequestParser() + .add_argument("app_mode", type=str, required=True, location="args", help="Application mode") + .add_argument("model_mode", type=str, required=True, location="args", help="Model mode") + .add_argument("has_context", type=str, required=False, default="true", location="args", help="Whether has context") + .add_argument("model_name", type=str, required=True, location="args", help="Model name") +) + @console_ns.route("/app/prompt-templates") class AdvancedPromptTemplateList(Resource): @api.doc("get_advanced_prompt_templates") @api.doc(description="Get advanced prompt templates based on app mode and model configuration") - @api.expect( - api.parser() - .add_argument("app_mode", type=str, required=True, location="args", help="Application mode") - .add_argument("model_mode", type=str, required=True, location="args", help="Model mode") - .add_argument("has_context", type=str, default="true", location="args", help="Whether has context") - .add_argument("model_name", type=str, required=True, location="args", help="Model name") - ) + @api.expect(parser) @api.response( 200, "Prompt templates retrieved successfully", fields.List(fields.Raw(description="Prompt template data")) ) @@ -25,13 +27,6 @@ class AdvancedPromptTemplateList(Resource): @login_required @account_initialization_required def get(self): - parser = ( - reqparse.RequestParser() - .add_argument("app_mode", type=str, required=True, location="args") - .add_argument("model_mode", type=str, required=True, location="args") - .add_argument("has_context", type=str, required=False, default="true", location="args") - .add_argument("model_name", type=str, required=True, location="args") - ) args = parser.parse_args() return AdvancedPromptTemplateService.get_prompt(args) diff --git a/api/controllers/console/app/agent.py b/api/controllers/console/app/agent.py index 717263a74d..fde28fdb98 100644 --- a/api/controllers/console/app/agent.py +++ b/api/controllers/console/app/agent.py @@ -8,17 +8,19 @@ from libs.login import login_required from models.model import AppMode from services.agent_service import AgentService +parser = ( + reqparse.RequestParser() + .add_argument("message_id", type=uuid_value, required=True, location="args", help="Message UUID") + .add_argument("conversation_id", type=uuid_value, required=True, location="args", help="Conversation UUID") +) + @console_ns.route("/apps//agent/logs") class AgentLogApi(Resource): @api.doc("get_agent_logs") @api.doc(description="Get agent execution logs for an application") @api.doc(params={"app_id": "Application ID"}) - @api.expect( - api.parser() - .add_argument("message_id", type=str, required=True, location="args", help="Message UUID") - .add_argument("conversation_id", type=str, required=True, location="args", help="Conversation UUID") - ) + @api.expect(parser) @api.response(200, "Agent logs retrieved successfully", fields.List(fields.Raw(description="Agent log entries"))) @api.response(400, "Invalid request parameters") @setup_required @@ -27,12 +29,6 @@ class AgentLogApi(Resource): @get_app_model(mode=[AppMode.AGENT_CHAT]) def get(self, app_model): """Get agent logs""" - parser = ( - reqparse.RequestParser() - .add_argument("message_id", type=uuid_value, required=True, location="args") - .add_argument("conversation_id", type=uuid_value, required=True, location="args") - ) - args = parser.parse_args() return AgentService.get_agent_logs(app_model, args["conversation_id"], args["message_id"]) diff --git a/api/controllers/console/app/annotation.py b/api/controllers/console/app/annotation.py index 23b6809aa5..bc4113b5c7 100644 --- a/api/controllers/console/app/annotation.py +++ b/api/controllers/console/app/annotation.py @@ -251,6 +251,13 @@ class AnnotationExportApi(Resource): return response, 200 +parser = ( + reqparse.RequestParser() + .add_argument("question", required=True, type=str, location="json") + .add_argument("answer", required=True, type=str, location="json") +) + + @console_ns.route("/apps//annotations/") class AnnotationUpdateDeleteApi(Resource): @api.doc("update_delete_annotation") @@ -259,6 +266,7 @@ class AnnotationUpdateDeleteApi(Resource): @api.response(200, "Annotation updated successfully", annotation_fields) @api.response(204, "Annotation deleted successfully") @api.response(403, "Insufficient permissions") + @api.expect(parser) @setup_required @login_required @account_initialization_required @@ -268,11 +276,6 @@ class AnnotationUpdateDeleteApi(Resource): def post(self, app_id, annotation_id): app_id = str(app_id) annotation_id = str(annotation_id) - parser = ( - reqparse.RequestParser() - .add_argument("question", required=True, type=str, location="json") - .add_argument("answer", required=True, type=str, location="json") - ) args = parser.parse_args() annotation = AppAnnotationService.update_app_annotation_directly(args, app_id, annotation_id) return annotation diff --git a/api/controllers/console/app/app.py b/api/controllers/console/app/app.py index 17505d69b2..0724a6355d 100644 --- a/api/controllers/console/app/app.py +++ b/api/controllers/console/app/app.py @@ -15,11 +15,12 @@ from controllers.console.wraps import ( setup_required, ) from core.ops.ops_trace_manager import OpsTraceManager +from core.workflow.enums import NodeType from extensions.ext_database import db from fields.app_fields import app_detail_fields, app_detail_fields_with_site, app_pagination_fields from libs.login import current_account_with_tenant, login_required from libs.validators import validate_description_length -from models import App +from models import App, Workflow from services.app_dsl_service import AppDslService, ImportMode from services.app_service import AppService from services.enterprise.enterprise_service import EnterpriseService @@ -106,6 +107,35 @@ class AppListApi(Resource): if str(app.id) in res: app.access_mode = res[str(app.id)].access_mode + workflow_capable_app_ids = [ + str(app.id) for app in app_pagination.items if app.mode in {"workflow", "advanced-chat"} + ] + draft_trigger_app_ids: set[str] = set() + if workflow_capable_app_ids: + draft_workflows = ( + db.session.execute( + select(Workflow).where( + Workflow.version == Workflow.VERSION_DRAFT, + Workflow.app_id.in_(workflow_capable_app_ids), + ) + ) + .scalars() + .all() + ) + trigger_node_types = { + NodeType.TRIGGER_WEBHOOK, + NodeType.TRIGGER_SCHEDULE, + NodeType.TRIGGER_PLUGIN, + } + for workflow in draft_workflows: + for _, node_data in workflow.walk_nodes(): + if node_data.get("type") in trigger_node_types: + draft_trigger_app_ids.add(str(workflow.app_id)) + break + + for app in app_pagination.items: + app.has_draft_trigger = str(app.id) in draft_trigger_app_ids + return marshal(app_pagination, app_pagination_fields), 200 @api.doc("create_app") @@ -353,12 +383,15 @@ class AppExportApi(Resource): } +parser = reqparse.RequestParser().add_argument("name", type=str, required=True, location="json", help="Name to check") + + @console_ns.route("/apps//name") class AppNameApi(Resource): @api.doc("check_app_name") @api.doc(description="Check if app name is available") @api.doc(params={"app_id": "Application ID"}) - @api.expect(api.parser().add_argument("name", type=str, required=True, location="args", help="Name to check")) + @api.expect(parser) @api.response(200, "Name availability checked") @setup_required @login_required @@ -367,7 +400,6 @@ class AppNameApi(Resource): @marshal_with(app_detail_fields) @edit_permission_required def post(self, app_model): - parser = reqparse.RequestParser().add_argument("name", type=str, required=True, location="json") args = parser.parse_args() app_service = AppService() diff --git a/api/controllers/console/app/app_import.py b/api/controllers/console/app/app_import.py index d902c129ad..02dbd42515 100644 --- a/api/controllers/console/app/app_import.py +++ b/api/controllers/console/app/app_import.py @@ -1,6 +1,7 @@ from flask_restx import Resource, marshal_with, reqparse from sqlalchemy.orm import Session +from controllers.console import api from controllers.console.app.wraps import get_app_model from controllers.console.wraps import ( account_initialization_required, @@ -18,9 +19,23 @@ from services.feature_service import FeatureService from .. import console_ns +parser = ( + reqparse.RequestParser() + .add_argument("mode", type=str, required=True, location="json") + .add_argument("yaml_content", type=str, location="json") + .add_argument("yaml_url", type=str, location="json") + .add_argument("name", type=str, location="json") + .add_argument("description", type=str, location="json") + .add_argument("icon_type", type=str, location="json") + .add_argument("icon", type=str, location="json") + .add_argument("icon_background", type=str, location="json") + .add_argument("app_id", type=str, location="json") +) + @console_ns.route("/apps/imports") class AppImportApi(Resource): + @api.expect(parser) @setup_required @login_required @account_initialization_required @@ -30,18 +45,6 @@ class AppImportApi(Resource): def post(self): # Check user role first current_user, _ = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("mode", type=str, required=True, location="json") - .add_argument("yaml_content", type=str, location="json") - .add_argument("yaml_url", type=str, location="json") - .add_argument("name", type=str, location="json") - .add_argument("description", type=str, location="json") - .add_argument("icon_type", type=str, location="json") - .add_argument("icon", type=str, location="json") - .add_argument("icon_background", type=str, location="json") - .add_argument("app_id", type=str, location="json") - ) args = parser.parse_args() # Create service with session diff --git a/api/controllers/console/app/statistic.py b/api/controllers/console/app/statistic.py index 8c8253b786..37ed3d9e27 100644 --- a/api/controllers/console/app/statistic.py +++ b/api/controllers/console/app/statistic.py @@ -80,16 +80,19 @@ WHERE return jsonify({"data": response_data}) +parser = ( + reqparse.RequestParser() + .add_argument("start", type=DatetimeString("%Y-%m-%d %H:%M"), location="args", help="Start date (YYYY-MM-DD HH:MM)") + .add_argument("end", type=DatetimeString("%Y-%m-%d %H:%M"), location="args", help="End date (YYYY-MM-DD HH:MM)") +) + + @console_ns.route("/apps//statistics/daily-conversations") class DailyConversationStatistic(Resource): @api.doc("get_daily_conversation_statistics") @api.doc(description="Get daily conversation statistics for an application") @api.doc(params={"app_id": "Application ID"}) - @api.expect( - api.parser() - .add_argument("start", type=str, location="args", help="Start date (YYYY-MM-DD HH:MM)") - .add_argument("end", type=str, location="args", help="End date (YYYY-MM-DD HH:MM)") - ) + @api.expect(parser) @api.response( 200, "Daily conversation statistics retrieved successfully", @@ -102,11 +105,6 @@ class DailyConversationStatistic(Resource): def get(self, app_model): account, _ = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("start", type=DatetimeString("%Y-%m-%d %H:%M"), location="args") - .add_argument("end", type=DatetimeString("%Y-%m-%d %H:%M"), location="args") - ) args = parser.parse_args() assert account.timezone is not None @@ -148,11 +146,7 @@ class DailyTerminalsStatistic(Resource): @api.doc("get_daily_terminals_statistics") @api.doc(description="Get daily terminal/end-user statistics for an application") @api.doc(params={"app_id": "Application ID"}) - @api.expect( - api.parser() - .add_argument("start", type=str, location="args", help="Start date (YYYY-MM-DD HH:MM)") - .add_argument("end", type=str, location="args", help="End date (YYYY-MM-DD HH:MM)") - ) + @api.expect(parser) @api.response( 200, "Daily terminal statistics retrieved successfully", @@ -165,11 +159,6 @@ class DailyTerminalsStatistic(Resource): def get(self, app_model): account, _ = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("start", type=DatetimeString("%Y-%m-%d %H:%M"), location="args") - .add_argument("end", type=DatetimeString("%Y-%m-%d %H:%M"), location="args") - ) args = parser.parse_args() sql_query = """SELECT @@ -213,11 +202,7 @@ class DailyTokenCostStatistic(Resource): @api.doc("get_daily_token_cost_statistics") @api.doc(description="Get daily token cost statistics for an application") @api.doc(params={"app_id": "Application ID"}) - @api.expect( - api.parser() - .add_argument("start", type=str, location="args", help="Start date (YYYY-MM-DD HH:MM)") - .add_argument("end", type=str, location="args", help="End date (YYYY-MM-DD HH:MM)") - ) + @api.expect(parser) @api.response( 200, "Daily token cost statistics retrieved successfully", @@ -230,11 +215,6 @@ class DailyTokenCostStatistic(Resource): def get(self, app_model): account, _ = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("start", type=DatetimeString("%Y-%m-%d %H:%M"), location="args") - .add_argument("end", type=DatetimeString("%Y-%m-%d %H:%M"), location="args") - ) args = parser.parse_args() sql_query = """SELECT @@ -281,11 +261,7 @@ class AverageSessionInteractionStatistic(Resource): @api.doc("get_average_session_interaction_statistics") @api.doc(description="Get average session interaction statistics for an application") @api.doc(params={"app_id": "Application ID"}) - @api.expect( - api.parser() - .add_argument("start", type=str, location="args", help="Start date (YYYY-MM-DD HH:MM)") - .add_argument("end", type=str, location="args", help="End date (YYYY-MM-DD HH:MM)") - ) + @api.expect(parser) @api.response( 200, "Average session interaction statistics retrieved successfully", @@ -298,11 +274,6 @@ class AverageSessionInteractionStatistic(Resource): def get(self, app_model): account, _ = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("start", type=DatetimeString("%Y-%m-%d %H:%M"), location="args") - .add_argument("end", type=DatetimeString("%Y-%m-%d %H:%M"), location="args") - ) args = parser.parse_args() sql_query = """SELECT @@ -365,11 +336,7 @@ class UserSatisfactionRateStatistic(Resource): @api.doc("get_user_satisfaction_rate_statistics") @api.doc(description="Get user satisfaction rate statistics for an application") @api.doc(params={"app_id": "Application ID"}) - @api.expect( - api.parser() - .add_argument("start", type=str, location="args", help="Start date (YYYY-MM-DD HH:MM)") - .add_argument("end", type=str, location="args", help="End date (YYYY-MM-DD HH:MM)") - ) + @api.expect(parser) @api.response( 200, "User satisfaction rate statistics retrieved successfully", @@ -382,11 +349,6 @@ class UserSatisfactionRateStatistic(Resource): def get(self, app_model): account, _ = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("start", type=DatetimeString("%Y-%m-%d %H:%M"), location="args") - .add_argument("end", type=DatetimeString("%Y-%m-%d %H:%M"), location="args") - ) args = parser.parse_args() sql_query = """SELECT @@ -439,11 +401,7 @@ class AverageResponseTimeStatistic(Resource): @api.doc("get_average_response_time_statistics") @api.doc(description="Get average response time statistics for an application") @api.doc(params={"app_id": "Application ID"}) - @api.expect( - api.parser() - .add_argument("start", type=str, location="args", help="Start date (YYYY-MM-DD HH:MM)") - .add_argument("end", type=str, location="args", help="End date (YYYY-MM-DD HH:MM)") - ) + @api.expect(parser) @api.response( 200, "Average response time statistics retrieved successfully", @@ -456,11 +414,6 @@ class AverageResponseTimeStatistic(Resource): def get(self, app_model): account, _ = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("start", type=DatetimeString("%Y-%m-%d %H:%M"), location="args") - .add_argument("end", type=DatetimeString("%Y-%m-%d %H:%M"), location="args") - ) args = parser.parse_args() sql_query = """SELECT @@ -504,11 +457,7 @@ class TokensPerSecondStatistic(Resource): @api.doc("get_tokens_per_second_statistics") @api.doc(description="Get tokens per second statistics for an application") @api.doc(params={"app_id": "Application ID"}) - @api.expect( - api.parser() - .add_argument("start", type=str, location="args", help="Start date (YYYY-MM-DD HH:MM)") - .add_argument("end", type=str, location="args", help="End date (YYYY-MM-DD HH:MM)") - ) + @api.expect(parser) @api.response( 200, "Tokens per second statistics retrieved successfully", @@ -520,12 +469,6 @@ class TokensPerSecondStatistic(Resource): @account_initialization_required def get(self, app_model): account, _ = current_account_with_tenant() - - parser = ( - reqparse.RequestParser() - .add_argument("start", type=DatetimeString("%Y-%m-%d %H:%M"), location="args") - .add_argument("end", type=DatetimeString("%Y-%m-%d %H:%M"), location="args") - ) args = parser.parse_args() sql_query = """SELECT diff --git a/api/controllers/console/app/workflow.py b/api/controllers/console/app/workflow.py index 8c451cd08c..31077e371b 100644 --- a/api/controllers/console/app/workflow.py +++ b/api/controllers/console/app/workflow.py @@ -586,6 +586,13 @@ class DraftWorkflowNodeRunApi(Resource): return workflow_node_execution +parser_publish = ( + reqparse.RequestParser() + .add_argument("marked_name", type=str, required=False, default="", location="json") + .add_argument("marked_comment", type=str, required=False, default="", location="json") +) + + @console_ns.route("/apps//workflows/publish") class PublishedWorkflowApi(Resource): @api.doc("get_published_workflow") @@ -610,6 +617,7 @@ class PublishedWorkflowApi(Resource): # return workflow, if not found, return None return workflow + @api.expect(parser_publish) @setup_required @login_required @account_initialization_required @@ -620,12 +628,8 @@ class PublishedWorkflowApi(Resource): Publish workflow """ current_user, _ = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("marked_name", type=str, required=False, default="", location="json") - .add_argument("marked_comment", type=str, required=False, default="", location="json") - ) - args = parser.parse_args() + + args = parser_publish.parse_args() # Validate name and comment length if args.marked_name and len(args.marked_name) > 20: @@ -680,6 +684,9 @@ class DefaultBlockConfigsApi(Resource): return workflow_service.get_default_block_configs() +parser_block = reqparse.RequestParser().add_argument("q", type=str, location="args") + + @console_ns.route("/apps//workflows/default-workflow-block-configs/") class DefaultBlockConfigApi(Resource): @api.doc("get_default_block_config") @@ -687,6 +694,7 @@ class DefaultBlockConfigApi(Resource): @api.doc(params={"app_id": "Application ID", "block_type": "Block type"}) @api.response(200, "Default block configuration retrieved successfully") @api.response(404, "Block type not found") + @api.expect(parser_block) @setup_required @login_required @account_initialization_required @@ -696,8 +704,7 @@ class DefaultBlockConfigApi(Resource): """ Get default block config """ - parser = reqparse.RequestParser().add_argument("q", type=str, location="args") - args = parser.parse_args() + args = parser_block.parse_args() q = args.get("q") @@ -713,8 +720,18 @@ class DefaultBlockConfigApi(Resource): return workflow_service.get_default_block_config(node_type=block_type, filters=filters) +parser_convert = ( + reqparse.RequestParser() + .add_argument("name", type=str, required=False, nullable=True, location="json") + .add_argument("icon_type", type=str, required=False, nullable=True, location="json") + .add_argument("icon", type=str, required=False, nullable=True, location="json") + .add_argument("icon_background", type=str, required=False, nullable=True, location="json") +) + + @console_ns.route("/apps//convert-to-workflow") class ConvertToWorkflowApi(Resource): + @api.expect(parser_convert) @api.doc("convert_to_workflow") @api.doc(description="Convert application to workflow mode") @api.doc(params={"app_id": "Application ID"}) @@ -735,14 +752,7 @@ class ConvertToWorkflowApi(Resource): current_user, _ = current_account_with_tenant() if request.data: - parser = ( - reqparse.RequestParser() - .add_argument("name", type=str, required=False, nullable=True, location="json") - .add_argument("icon_type", type=str, required=False, nullable=True, location="json") - .add_argument("icon", type=str, required=False, nullable=True, location="json") - .add_argument("icon_background", type=str, required=False, nullable=True, location="json") - ) - args = parser.parse_args() + args = parser_convert.parse_args() else: args = {} @@ -756,8 +766,18 @@ class ConvertToWorkflowApi(Resource): } +parser_workflows = ( + reqparse.RequestParser() + .add_argument("page", type=inputs.int_range(1, 99999), required=False, default=1, location="args") + .add_argument("limit", type=inputs.int_range(1, 100), required=False, default=10, location="args") + .add_argument("user_id", type=str, required=False, location="args") + .add_argument("named_only", type=inputs.boolean, required=False, default=False, location="args") +) + + @console_ns.route("/apps//workflows") class PublishedAllWorkflowApi(Resource): + @api.expect(parser_workflows) @api.doc("get_all_published_workflows") @api.doc(description="Get all published workflows for an application") @api.doc(params={"app_id": "Application ID"}) @@ -774,16 +794,9 @@ class PublishedAllWorkflowApi(Resource): """ current_user, _ = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("page", type=inputs.int_range(1, 99999), required=False, default=1, location="args") - .add_argument("limit", type=inputs.int_range(1, 100), required=False, default=20, location="args") - .add_argument("user_id", type=str, required=False, location="args") - .add_argument("named_only", type=inputs.boolean, required=False, default=False, location="args") - ) - args = parser.parse_args() - page = int(args.get("page", 1)) - limit = int(args.get("limit", 10)) + args = parser_workflows.parse_args() + page = args["page"] + limit = args["limit"] user_id = args.get("user_id") named_only = args.get("named_only", False) diff --git a/api/controllers/console/app/workflow_run.py b/api/controllers/console/app/workflow_run.py index 311aa81279..23c228efbe 100644 --- a/api/controllers/console/app/workflow_run.py +++ b/api/controllers/console/app/workflow_run.py @@ -30,23 +30,25 @@ def _parse_workflow_run_list_args(): Returns: Parsed arguments containing last_id, limit, status, and triggered_from filters """ - parser = reqparse.RequestParser() - parser.add_argument("last_id", type=uuid_value, location="args") - parser.add_argument("limit", type=int_range(1, 100), required=False, default=20, location="args") - parser.add_argument( - "status", - type=str, - choices=WORKFLOW_RUN_STATUS_CHOICES, - location="args", - required=False, - ) - parser.add_argument( - "triggered_from", - type=str, - choices=["debugging", "app-run"], - location="args", - required=False, - help="Filter by trigger source: debugging or app-run", + parser = ( + reqparse.RequestParser() + .add_argument("last_id", type=uuid_value, location="args") + .add_argument("limit", type=int_range(1, 100), required=False, default=20, location="args") + .add_argument( + "status", + type=str, + choices=WORKFLOW_RUN_STATUS_CHOICES, + location="args", + required=False, + ) + .add_argument( + "triggered_from", + type=str, + choices=["debugging", "app-run"], + location="args", + required=False, + help="Filter by trigger source: debugging or app-run", + ) ) return parser.parse_args() @@ -58,28 +60,30 @@ def _parse_workflow_run_count_args(): Returns: Parsed arguments containing status, time_range, and triggered_from filters """ - parser = reqparse.RequestParser() - parser.add_argument( - "status", - type=str, - choices=WORKFLOW_RUN_STATUS_CHOICES, - location="args", - required=False, - ) - parser.add_argument( - "time_range", - type=time_duration, - location="args", - required=False, - help="Time range filter (e.g., 7d, 4h, 30m, 30s)", - ) - parser.add_argument( - "triggered_from", - type=str, - choices=["debugging", "app-run"], - location="args", - required=False, - help="Filter by trigger source: debugging or app-run", + parser = ( + reqparse.RequestParser() + .add_argument( + "status", + type=str, + choices=WORKFLOW_RUN_STATUS_CHOICES, + location="args", + required=False, + ) + .add_argument( + "time_range", + type=time_duration, + location="args", + required=False, + help="Time range filter (e.g., 7d, 4h, 30m, 30s)", + ) + .add_argument( + "triggered_from", + type=str, + choices=["debugging", "app-run"], + location="args", + required=False, + help="Filter by trigger source: debugging or app-run", + ) ) return parser.parse_args() diff --git a/api/controllers/console/datasets/rag_pipeline/datasource_auth.py b/api/controllers/console/datasets/rag_pipeline/datasource_auth.py index 2111ee2ecf..f83ee69beb 100644 --- a/api/controllers/console/datasets/rag_pipeline/datasource_auth.py +++ b/api/controllers/console/datasets/rag_pipeline/datasource_auth.py @@ -3,7 +3,7 @@ from flask_restx import Resource, reqparse from werkzeug.exceptions import Forbidden, NotFound from configs import dify_config -from controllers.console import console_ns +from controllers.console import api, console_ns from controllers.console.wraps import account_initialization_required, edit_permission_required, setup_required from core.model_runtime.errors.validate import CredentialsValidateFailedError from core.model_runtime.utils.encoders import jsonable_encoder @@ -121,8 +121,16 @@ class DatasourceOAuthCallback(Resource): return redirect(f"{dify_config.CONSOLE_WEB_URL}/oauth-callback") +parser_datasource = ( + reqparse.RequestParser() + .add_argument("name", type=StrLen(max_length=100), required=False, nullable=True, location="json", default=None) + .add_argument("credentials", type=dict, required=True, nullable=False, location="json") +) + + @console_ns.route("/auth/plugin/datasource/") class DatasourceAuth(Resource): + @api.expect(parser_datasource) @setup_required @login_required @account_initialization_required @@ -130,14 +138,7 @@ class DatasourceAuth(Resource): def post(self, provider_id: str): _, current_tenant_id = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument( - "name", type=StrLen(max_length=100), required=False, nullable=True, location="json", default=None - ) - .add_argument("credentials", type=dict, required=True, nullable=False, location="json") - ) - args = parser.parse_args() + args = parser_datasource.parse_args() datasource_provider_id = DatasourceProviderID(provider_id) datasource_provider_service = DatasourceProviderService() @@ -168,8 +169,14 @@ class DatasourceAuth(Resource): return {"result": datasources}, 200 +parser_datasource_delete = reqparse.RequestParser().add_argument( + "credential_id", type=str, required=True, nullable=False, location="json" +) + + @console_ns.route("/auth/plugin/datasource//delete") class DatasourceAuthDeleteApi(Resource): + @api.expect(parser_datasource_delete) @setup_required @login_required @account_initialization_required @@ -181,10 +188,7 @@ class DatasourceAuthDeleteApi(Resource): plugin_id = datasource_provider_id.plugin_id provider_name = datasource_provider_id.provider_name - parser = reqparse.RequestParser().add_argument( - "credential_id", type=str, required=True, nullable=False, location="json" - ) - args = parser.parse_args() + args = parser_datasource_delete.parse_args() datasource_provider_service = DatasourceProviderService() datasource_provider_service.remove_datasource_credentials( tenant_id=current_tenant_id, @@ -195,8 +199,17 @@ class DatasourceAuthDeleteApi(Resource): return {"result": "success"}, 200 +parser_datasource_update = ( + reqparse.RequestParser() + .add_argument("credentials", type=dict, required=False, nullable=True, location="json") + .add_argument("name", type=StrLen(max_length=100), required=False, nullable=True, location="json") + .add_argument("credential_id", type=str, required=True, nullable=False, location="json") +) + + @console_ns.route("/auth/plugin/datasource//update") class DatasourceAuthUpdateApi(Resource): + @api.expect(parser_datasource_update) @setup_required @login_required @account_initialization_required @@ -205,13 +218,7 @@ class DatasourceAuthUpdateApi(Resource): _, current_tenant_id = current_account_with_tenant() datasource_provider_id = DatasourceProviderID(provider_id) - parser = ( - reqparse.RequestParser() - .add_argument("credentials", type=dict, required=False, nullable=True, location="json") - .add_argument("name", type=StrLen(max_length=100), required=False, nullable=True, location="json") - .add_argument("credential_id", type=str, required=True, nullable=False, location="json") - ) - args = parser.parse_args() + args = parser_datasource_update.parse_args() datasource_provider_service = DatasourceProviderService() datasource_provider_service.update_datasource_credentials( @@ -251,8 +258,16 @@ class DatasourceHardCodeAuthListApi(Resource): return {"result": jsonable_encoder(datasources)}, 200 +parser_datasource_custom = ( + reqparse.RequestParser() + .add_argument("client_params", type=dict, required=False, nullable=True, location="json") + .add_argument("enable_oauth_custom_client", type=bool, required=False, nullable=True, location="json") +) + + @console_ns.route("/auth/plugin/datasource//custom-client") class DatasourceAuthOauthCustomClient(Resource): + @api.expect(parser_datasource_custom) @setup_required @login_required @account_initialization_required @@ -260,12 +275,7 @@ class DatasourceAuthOauthCustomClient(Resource): def post(self, provider_id: str): _, current_tenant_id = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("client_params", type=dict, required=False, nullable=True, location="json") - .add_argument("enable_oauth_custom_client", type=bool, required=False, nullable=True, location="json") - ) - args = parser.parse_args() + args = parser_datasource_custom.parse_args() datasource_provider_id = DatasourceProviderID(provider_id) datasource_provider_service = DatasourceProviderService() datasource_provider_service.setup_oauth_custom_client_params( @@ -291,8 +301,12 @@ class DatasourceAuthOauthCustomClient(Resource): return {"result": "success"}, 200 +parser_default = reqparse.RequestParser().add_argument("id", type=str, required=True, nullable=False, location="json") + + @console_ns.route("/auth/plugin/datasource//default") class DatasourceAuthDefaultApi(Resource): + @api.expect(parser_default) @setup_required @login_required @account_initialization_required @@ -300,8 +314,7 @@ class DatasourceAuthDefaultApi(Resource): def post(self, provider_id: str): _, current_tenant_id = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument("id", type=str, required=True, nullable=False, location="json") - args = parser.parse_args() + args = parser_default.parse_args() datasource_provider_id = DatasourceProviderID(provider_id) datasource_provider_service = DatasourceProviderService() datasource_provider_service.set_default_datasource_provider( @@ -312,8 +325,16 @@ class DatasourceAuthDefaultApi(Resource): return {"result": "success"}, 200 +parser_update_name = ( + reqparse.RequestParser() + .add_argument("name", type=StrLen(max_length=100), required=True, nullable=False, location="json") + .add_argument("credential_id", type=str, required=True, nullable=False, location="json") +) + + @console_ns.route("/auth/plugin/datasource//update-name") class DatasourceUpdateProviderNameApi(Resource): + @api.expect(parser_update_name) @setup_required @login_required @account_initialization_required @@ -321,12 +342,7 @@ class DatasourceUpdateProviderNameApi(Resource): def post(self, provider_id: str): _, current_tenant_id = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("name", type=StrLen(max_length=100), required=True, nullable=False, location="json") - .add_argument("credential_id", type=str, required=True, nullable=False, location="json") - ) - args = parser.parse_args() + args = parser_update_name.parse_args() datasource_provider_id = DatasourceProviderID(provider_id) datasource_provider_service = DatasourceProviderService() datasource_provider_service.update_datasource_provider_name( diff --git a/api/controllers/console/datasets/rag_pipeline/rag_pipeline_workflow.py b/api/controllers/console/datasets/rag_pipeline/rag_pipeline_workflow.py index 5fe8572dfa..1e77a988bd 100644 --- a/api/controllers/console/datasets/rag_pipeline/rag_pipeline_workflow.py +++ b/api/controllers/console/datasets/rag_pipeline/rag_pipeline_workflow.py @@ -9,7 +9,7 @@ from sqlalchemy.orm import Session from werkzeug.exceptions import Forbidden, InternalServerError, NotFound import services -from controllers.console import console_ns +from controllers.console import api, console_ns from controllers.console.app.error import ( ConversationCompletedError, DraftWorkflowNotExist, @@ -148,8 +148,12 @@ class DraftRagPipelineApi(Resource): } +parser_run = reqparse.RequestParser().add_argument("inputs", type=dict, location="json") + + @console_ns.route("/rag/pipelines//workflows/draft/iteration/nodes//run") class RagPipelineDraftRunIterationNodeApi(Resource): + @api.expect(parser_run) @setup_required @login_required @account_initialization_required @@ -162,8 +166,7 @@ class RagPipelineDraftRunIterationNodeApi(Resource): # The role of the current user in the ta table must be admin, owner, or editor current_user, _ = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument("inputs", type=dict, location="json") - args = parser.parse_args() + args = parser_run.parse_args() try: response = PipelineGenerateService.generate_single_iteration( @@ -184,6 +187,7 @@ class RagPipelineDraftRunIterationNodeApi(Resource): @console_ns.route("/rag/pipelines//workflows/draft/loop/nodes//run") class RagPipelineDraftRunLoopNodeApi(Resource): + @api.expect(parser_run) @setup_required @login_required @account_initialization_required @@ -197,8 +201,7 @@ class RagPipelineDraftRunLoopNodeApi(Resource): if not current_user.has_edit_permission: raise Forbidden() - parser = reqparse.RequestParser().add_argument("inputs", type=dict, location="json") - args = parser.parse_args() + args = parser_run.parse_args() try: response = PipelineGenerateService.generate_single_loop( @@ -217,8 +220,18 @@ class RagPipelineDraftRunLoopNodeApi(Resource): raise InternalServerError() +parser_draft_run = ( + reqparse.RequestParser() + .add_argument("inputs", type=dict, required=True, nullable=False, location="json") + .add_argument("datasource_type", type=str, required=True, location="json") + .add_argument("datasource_info_list", type=list, required=True, location="json") + .add_argument("start_node_id", type=str, required=True, location="json") +) + + @console_ns.route("/rag/pipelines//workflows/draft/run") class DraftRagPipelineRunApi(Resource): + @api.expect(parser_draft_run) @setup_required @login_required @account_initialization_required @@ -232,14 +245,7 @@ class DraftRagPipelineRunApi(Resource): if not current_user.has_edit_permission: raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument("inputs", type=dict, required=True, nullable=False, location="json") - .add_argument("datasource_type", type=str, required=True, location="json") - .add_argument("datasource_info_list", type=list, required=True, location="json") - .add_argument("start_node_id", type=str, required=True, location="json") - ) - args = parser.parse_args() + args = parser_draft_run.parse_args() try: response = PipelineGenerateService.generate( @@ -255,8 +261,21 @@ class DraftRagPipelineRunApi(Resource): raise InvokeRateLimitHttpError(ex.description) +parser_published_run = ( + reqparse.RequestParser() + .add_argument("inputs", type=dict, required=True, nullable=False, location="json") + .add_argument("datasource_type", type=str, required=True, location="json") + .add_argument("datasource_info_list", type=list, required=True, location="json") + .add_argument("start_node_id", type=str, required=True, location="json") + .add_argument("is_preview", type=bool, required=True, location="json", default=False) + .add_argument("response_mode", type=str, required=True, location="json", default="streaming") + .add_argument("original_document_id", type=str, required=False, location="json") +) + + @console_ns.route("/rag/pipelines//workflows/published/run") class PublishedRagPipelineRunApi(Resource): + @api.expect(parser_published_run) @setup_required @login_required @account_initialization_required @@ -270,17 +289,7 @@ class PublishedRagPipelineRunApi(Resource): if not current_user.has_edit_permission: raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument("inputs", type=dict, required=True, nullable=False, location="json") - .add_argument("datasource_type", type=str, required=True, location="json") - .add_argument("datasource_info_list", type=list, required=True, location="json") - .add_argument("start_node_id", type=str, required=True, location="json") - .add_argument("is_preview", type=bool, required=True, location="json", default=False) - .add_argument("response_mode", type=str, required=True, location="json", default="streaming") - .add_argument("original_document_id", type=str, required=False, location="json") - ) - args = parser.parse_args() + args = parser_published_run.parse_args() streaming = args["response_mode"] == "streaming" @@ -381,8 +390,17 @@ class PublishedRagPipelineRunApi(Resource): # # return result # +parser_rag_run = ( + reqparse.RequestParser() + .add_argument("inputs", type=dict, required=True, nullable=False, location="json") + .add_argument("datasource_type", type=str, required=True, location="json") + .add_argument("credential_id", type=str, required=False, location="json") +) + + @console_ns.route("/rag/pipelines//workflows/published/datasource/nodes//run") class RagPipelinePublishedDatasourceNodeRunApi(Resource): + @api.expect(parser_rag_run) @setup_required @login_required @account_initialization_required @@ -396,13 +414,7 @@ class RagPipelinePublishedDatasourceNodeRunApi(Resource): if not current_user.has_edit_permission: raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument("inputs", type=dict, required=True, nullable=False, location="json") - .add_argument("datasource_type", type=str, required=True, location="json") - .add_argument("credential_id", type=str, required=False, location="json") - ) - args = parser.parse_args() + args = parser_rag_run.parse_args() inputs = args.get("inputs") if inputs is None: @@ -429,6 +441,7 @@ class RagPipelinePublishedDatasourceNodeRunApi(Resource): @console_ns.route("/rag/pipelines//workflows/draft/datasource/nodes//run") class RagPipelineDraftDatasourceNodeRunApi(Resource): + @api.expect(parser_rag_run) @setup_required @login_required @account_initialization_required @@ -442,13 +455,7 @@ class RagPipelineDraftDatasourceNodeRunApi(Resource): if not current_user.has_edit_permission: raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument("inputs", type=dict, required=True, nullable=False, location="json") - .add_argument("datasource_type", type=str, required=True, location="json") - .add_argument("credential_id", type=str, required=False, location="json") - ) - args = parser.parse_args() + args = parser_rag_run.parse_args() inputs = args.get("inputs") if inputs is None: @@ -473,8 +480,14 @@ class RagPipelineDraftDatasourceNodeRunApi(Resource): ) +parser_run_api = reqparse.RequestParser().add_argument( + "inputs", type=dict, required=True, nullable=False, location="json" +) + + @console_ns.route("/rag/pipelines//workflows/draft/nodes//run") class RagPipelineDraftNodeRunApi(Resource): + @api.expect(parser_run_api) @setup_required @login_required @account_initialization_required @@ -489,10 +502,7 @@ class RagPipelineDraftNodeRunApi(Resource): if not current_user.has_edit_permission: raise Forbidden() - parser = reqparse.RequestParser().add_argument( - "inputs", type=dict, required=True, nullable=False, location="json" - ) - args = parser.parse_args() + args = parser_run_api.parse_args() inputs = args.get("inputs") if inputs == None: @@ -607,8 +617,12 @@ class DefaultRagPipelineBlockConfigsApi(Resource): return rag_pipeline_service.get_default_block_configs() +parser_default = reqparse.RequestParser().add_argument("q", type=str, location="args") + + @console_ns.route("/rag/pipelines//workflows/default-workflow-block-configs/") class DefaultRagPipelineBlockConfigApi(Resource): + @api.expect(parser_default) @setup_required @login_required @account_initialization_required @@ -622,8 +636,7 @@ class DefaultRagPipelineBlockConfigApi(Resource): if not current_user.has_edit_permission: raise Forbidden() - parser = reqparse.RequestParser().add_argument("q", type=str, location="args") - args = parser.parse_args() + args = parser_default.parse_args() q = args.get("q") @@ -639,8 +652,18 @@ class DefaultRagPipelineBlockConfigApi(Resource): return rag_pipeline_service.get_default_block_config(node_type=block_type, filters=filters) +parser_wf = ( + reqparse.RequestParser() + .add_argument("page", type=inputs.int_range(1, 99999), required=False, default=1, location="args") + .add_argument("limit", type=inputs.int_range(1, 100), required=False, default=10, location="args") + .add_argument("user_id", type=str, required=False, location="args") + .add_argument("named_only", type=inputs.boolean, required=False, default=False, location="args") +) + + @console_ns.route("/rag/pipelines//workflows") class PublishedAllRagPipelineApi(Resource): + @api.expect(parser_wf) @setup_required @login_required @account_initialization_required @@ -654,16 +677,9 @@ class PublishedAllRagPipelineApi(Resource): if not current_user.has_edit_permission: raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument("page", type=inputs.int_range(1, 99999), required=False, default=1, location="args") - .add_argument("limit", type=inputs.int_range(1, 100), required=False, default=20, location="args") - .add_argument("user_id", type=str, required=False, location="args") - .add_argument("named_only", type=inputs.boolean, required=False, default=False, location="args") - ) - args = parser.parse_args() - page = int(args.get("page", 1)) - limit = int(args.get("limit", 10)) + args = parser_wf.parse_args() + page = args["page"] + limit = args["limit"] user_id = args.get("user_id") named_only = args.get("named_only", False) @@ -691,8 +707,16 @@ class PublishedAllRagPipelineApi(Resource): } +parser_wf_id = ( + reqparse.RequestParser() + .add_argument("marked_name", type=str, required=False, location="json") + .add_argument("marked_comment", type=str, required=False, location="json") +) + + @console_ns.route("/rag/pipelines//workflows/") class RagPipelineByIdApi(Resource): + @api.expect(parser_wf_id) @setup_required @login_required @account_initialization_required @@ -707,19 +731,13 @@ class RagPipelineByIdApi(Resource): if not current_user.has_edit_permission: raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument("marked_name", type=str, required=False, location="json") - .add_argument("marked_comment", type=str, required=False, location="json") - ) - args = parser.parse_args() + args = parser_wf_id.parse_args() # Validate name and comment length if args.marked_name and len(args.marked_name) > 20: raise ValueError("Marked name cannot exceed 20 characters") if args.marked_comment and len(args.marked_comment) > 100: raise ValueError("Marked comment cannot exceed 100 characters") - args = parser.parse_args() # Prepare update data update_data = {} @@ -752,8 +770,12 @@ class RagPipelineByIdApi(Resource): return workflow +parser_parameters = reqparse.RequestParser().add_argument("node_id", type=str, required=True, location="args") + + @console_ns.route("/rag/pipelines//workflows/published/processing/parameters") class PublishedRagPipelineSecondStepApi(Resource): + @api.expect(parser_parameters) @setup_required @login_required @account_initialization_required @@ -763,8 +785,7 @@ class PublishedRagPipelineSecondStepApi(Resource): """ Get second step parameters of rag pipeline """ - parser = reqparse.RequestParser().add_argument("node_id", type=str, required=True, location="args") - args = parser.parse_args() + args = parser_parameters.parse_args() node_id = args.get("node_id") if not node_id: raise ValueError("Node ID is required") @@ -777,6 +798,7 @@ class PublishedRagPipelineSecondStepApi(Resource): @console_ns.route("/rag/pipelines//workflows/published/pre-processing/parameters") class PublishedRagPipelineFirstStepApi(Resource): + @api.expect(parser_parameters) @setup_required @login_required @account_initialization_required @@ -786,8 +808,7 @@ class PublishedRagPipelineFirstStepApi(Resource): """ Get first step parameters of rag pipeline """ - parser = reqparse.RequestParser().add_argument("node_id", type=str, required=True, location="args") - args = parser.parse_args() + args = parser_parameters.parse_args() node_id = args.get("node_id") if not node_id: raise ValueError("Node ID is required") @@ -800,6 +821,7 @@ class PublishedRagPipelineFirstStepApi(Resource): @console_ns.route("/rag/pipelines//workflows/draft/pre-processing/parameters") class DraftRagPipelineFirstStepApi(Resource): + @api.expect(parser_parameters) @setup_required @login_required @account_initialization_required @@ -809,8 +831,7 @@ class DraftRagPipelineFirstStepApi(Resource): """ Get first step parameters of rag pipeline """ - parser = reqparse.RequestParser().add_argument("node_id", type=str, required=True, location="args") - args = parser.parse_args() + args = parser_parameters.parse_args() node_id = args.get("node_id") if not node_id: raise ValueError("Node ID is required") @@ -823,6 +844,7 @@ class DraftRagPipelineFirstStepApi(Resource): @console_ns.route("/rag/pipelines//workflows/draft/processing/parameters") class DraftRagPipelineSecondStepApi(Resource): + @api.expect(parser_parameters) @setup_required @login_required @account_initialization_required @@ -832,8 +854,7 @@ class DraftRagPipelineSecondStepApi(Resource): """ Get second step parameters of rag pipeline """ - parser = reqparse.RequestParser().add_argument("node_id", type=str, required=True, location="args") - args = parser.parse_args() + args = parser_parameters.parse_args() node_id = args.get("node_id") if not node_id: raise ValueError("Node ID is required") @@ -845,8 +866,16 @@ class DraftRagPipelineSecondStepApi(Resource): } +parser_wf_run = ( + reqparse.RequestParser() + .add_argument("last_id", type=uuid_value, location="args") + .add_argument("limit", type=int_range(1, 100), required=False, default=20, location="args") +) + + @console_ns.route("/rag/pipelines//workflow-runs") class RagPipelineWorkflowRunListApi(Resource): + @api.expect(parser_wf_run) @setup_required @login_required @account_initialization_required @@ -856,12 +885,7 @@ class RagPipelineWorkflowRunListApi(Resource): """ Get workflow run list """ - parser = ( - reqparse.RequestParser() - .add_argument("last_id", type=uuid_value, location="args") - .add_argument("limit", type=int_range(1, 100), required=False, default=20, location="args") - ) - args = parser.parse_args() + args = parser_wf_run.parse_args() rag_pipeline_service = RagPipelineService() result = rag_pipeline_service.get_rag_pipeline_paginate_workflow_runs(pipeline=pipeline, args=args) @@ -961,8 +985,18 @@ class RagPipelineTransformApi(Resource): return result +parser_var = ( + reqparse.RequestParser() + .add_argument("datasource_type", type=str, required=True, location="json") + .add_argument("datasource_info", type=dict, required=True, location="json") + .add_argument("start_node_id", type=str, required=True, location="json") + .add_argument("start_node_title", type=str, required=True, location="json") +) + + @console_ns.route("/rag/pipelines//workflows/draft/datasource/variables-inspect") class RagPipelineDatasourceVariableApi(Resource): + @api.expect(parser_var) @setup_required @login_required @account_initialization_required @@ -974,14 +1008,7 @@ class RagPipelineDatasourceVariableApi(Resource): Set datasource variables """ current_user, _ = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("datasource_type", type=str, required=True, location="json") - .add_argument("datasource_info", type=dict, required=True, location="json") - .add_argument("start_node_id", type=str, required=True, location="json") - .add_argument("start_node_title", type=str, required=True, location="json") - ) - args = parser.parse_args() + args = parser_var.parse_args() rag_pipeline_service = RagPipelineService() workflow_node_execution = rag_pipeline_service.set_datasource_variables( diff --git a/api/controllers/console/explore/recommended_app.py b/api/controllers/console/explore/recommended_app.py index 751012757a..11c7a1bc18 100644 --- a/api/controllers/console/explore/recommended_app.py +++ b/api/controllers/console/explore/recommended_app.py @@ -1,7 +1,7 @@ from flask_restx import Resource, fields, marshal_with, reqparse from constants.languages import languages -from controllers.console import console_ns +from controllers.console import api, console_ns from controllers.console.wraps import account_initialization_required from libs.helper import AppIconUrlField from libs.login import current_user, login_required @@ -35,15 +35,18 @@ recommended_app_list_fields = { } +parser_apps = reqparse.RequestParser().add_argument("language", type=str, location="args") + + @console_ns.route("/explore/apps") class RecommendedAppListApi(Resource): + @api.expect(parser_apps) @login_required @account_initialization_required @marshal_with(recommended_app_list_fields) def get(self): # language args - parser = reqparse.RequestParser().add_argument("language", type=str, location="args") - args = parser.parse_args() + args = parser_apps.parse_args() language = args.get("language") if language and language in languages: diff --git a/api/controllers/console/remote_files.py b/api/controllers/console/remote_files.py index 96c86dc0db..47c7ecde9a 100644 --- a/api/controllers/console/remote_files.py +++ b/api/controllers/console/remote_files.py @@ -10,6 +10,7 @@ from controllers.common.errors import ( RemoteFileUploadError, UnsupportedFileTypeError, ) +from controllers.console import api from core.file import helpers as file_helpers from core.helper import ssrf_proxy from extensions.ext_database import db @@ -36,12 +37,15 @@ class RemoteFileInfoApi(Resource): } +parser_upload = reqparse.RequestParser().add_argument("url", type=str, required=True, help="URL is required") + + @console_ns.route("/remote-files/upload") class RemoteFileUploadApi(Resource): + @api.expect(parser_upload) @marshal_with(file_fields_with_signed_url) def post(self): - parser = reqparse.RequestParser().add_argument("url", type=str, required=True, help="URL is required") - args = parser.parse_args() + args = parser_upload.parse_args() url = args["url"] diff --git a/api/controllers/console/setup.py b/api/controllers/console/setup.py index 1200349e2d..22929c851e 100644 --- a/api/controllers/console/setup.py +++ b/api/controllers/console/setup.py @@ -49,6 +49,7 @@ class SetupApi(Resource): "email": fields.String(required=True, description="Admin email address"), "name": fields.String(required=True, description="Admin name (max 30 characters)"), "password": fields.String(required=True, description="Admin password"), + "language": fields.String(required=False, description="Admin language"), }, ) ) diff --git a/api/controllers/console/tag/tags.py b/api/controllers/console/tag/tags.py index 40ae7fb4d0..ca8259238b 100644 --- a/api/controllers/console/tag/tags.py +++ b/api/controllers/console/tag/tags.py @@ -2,7 +2,7 @@ from flask import request from flask_restx import Resource, marshal_with, reqparse from werkzeug.exceptions import Forbidden -from controllers.console import console_ns +from controllers.console import api, console_ns from controllers.console.wraps import account_initialization_required, setup_required from fields.tag_fields import dataset_tag_fields from libs.login import current_account_with_tenant, login_required @@ -16,6 +16,19 @@ def _validate_name(name): return name +parser_tags = ( + reqparse.RequestParser() + .add_argument( + "name", + nullable=False, + required=True, + help="Name must be between 1 to 50 characters.", + type=_validate_name, + ) + .add_argument("type", type=str, location="json", choices=Tag.TAG_TYPE_LIST, nullable=True, help="Invalid tag type.") +) + + @console_ns.route("/tags") class TagListApi(Resource): @setup_required @@ -30,6 +43,7 @@ class TagListApi(Resource): return tags, 200 + @api.expect(parser_tags) @setup_required @login_required @account_initialization_required @@ -39,20 +53,7 @@ class TagListApi(Resource): if not (current_user.has_edit_permission or current_user.is_dataset_editor): raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument( - "name", - nullable=False, - required=True, - help="Name must be between 1 to 50 characters.", - type=_validate_name, - ) - .add_argument( - "type", type=str, location="json", choices=Tag.TAG_TYPE_LIST, nullable=True, help="Invalid tag type." - ) - ) - args = parser.parse_args() + args = parser_tags.parse_args() tag = TagService.save_tags(args) response = {"id": tag.id, "name": tag.name, "type": tag.type, "binding_count": 0} @@ -60,8 +61,14 @@ class TagListApi(Resource): return response, 200 +parser_tag_id = reqparse.RequestParser().add_argument( + "name", nullable=False, required=True, help="Name must be between 1 to 50 characters.", type=_validate_name +) + + @console_ns.route("/tags/") class TagUpdateDeleteApi(Resource): + @api.expect(parser_tag_id) @setup_required @login_required @account_initialization_required @@ -72,10 +79,7 @@ class TagUpdateDeleteApi(Resource): if not (current_user.has_edit_permission or current_user.is_dataset_editor): raise Forbidden() - parser = reqparse.RequestParser().add_argument( - "name", nullable=False, required=True, help="Name must be between 1 to 50 characters.", type=_validate_name - ) - args = parser.parse_args() + args = parser_tag_id.parse_args() tag = TagService.update_tags(args, tag_id) binding_count = TagService.get_tag_binding_count(tag_id) @@ -99,8 +103,17 @@ class TagUpdateDeleteApi(Resource): return 204 +parser_create = ( + reqparse.RequestParser() + .add_argument("tag_ids", type=list, nullable=False, required=True, location="json", help="Tag IDs is required.") + .add_argument("target_id", type=str, nullable=False, required=True, location="json", help="Target ID is required.") + .add_argument("type", type=str, location="json", choices=Tag.TAG_TYPE_LIST, nullable=True, help="Invalid tag type.") +) + + @console_ns.route("/tag-bindings/create") class TagBindingCreateApi(Resource): + @api.expect(parser_create) @setup_required @login_required @account_initialization_required @@ -110,26 +123,23 @@ class TagBindingCreateApi(Resource): if not (current_user.has_edit_permission or current_user.is_dataset_editor): raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument( - "tag_ids", type=list, nullable=False, required=True, location="json", help="Tag IDs is required." - ) - .add_argument( - "target_id", type=str, nullable=False, required=True, location="json", help="Target ID is required." - ) - .add_argument( - "type", type=str, location="json", choices=Tag.TAG_TYPE_LIST, nullable=True, help="Invalid tag type." - ) - ) - args = parser.parse_args() + args = parser_create.parse_args() TagService.save_tag_binding(args) return {"result": "success"}, 200 +parser_remove = ( + reqparse.RequestParser() + .add_argument("tag_id", type=str, nullable=False, required=True, help="Tag ID is required.") + .add_argument("target_id", type=str, nullable=False, required=True, help="Target ID is required.") + .add_argument("type", type=str, location="json", choices=Tag.TAG_TYPE_LIST, nullable=True, help="Invalid tag type.") +) + + @console_ns.route("/tag-bindings/remove") class TagBindingDeleteApi(Resource): + @api.expect(parser_remove) @setup_required @login_required @account_initialization_required @@ -139,15 +149,7 @@ class TagBindingDeleteApi(Resource): if not (current_user.has_edit_permission or current_user.is_dataset_editor): raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument("tag_id", type=str, nullable=False, required=True, help="Tag ID is required.") - .add_argument("target_id", type=str, nullable=False, required=True, help="Target ID is required.") - .add_argument( - "type", type=str, location="json", choices=Tag.TAG_TYPE_LIST, nullable=True, help="Invalid tag type." - ) - ) - args = parser.parse_args() + args = parser_remove.parse_args() TagService.delete_tag_binding(args) return {"result": "success"}, 200 diff --git a/api/controllers/console/version.py b/api/controllers/console/version.py index 417486f59e..104a205fc8 100644 --- a/api/controllers/console/version.py +++ b/api/controllers/console/version.py @@ -11,16 +11,16 @@ from . import api, console_ns logger = logging.getLogger(__name__) +parser = reqparse.RequestParser().add_argument( + "current_version", type=str, required=True, location="args", help="Current application version" +) + @console_ns.route("/version") class VersionApi(Resource): @api.doc("check_version_update") @api.doc(description="Check for application version updates") - @api.expect( - api.parser().add_argument( - "current_version", type=str, required=True, location="args", help="Current application version" - ) - ) + @api.expect(parser) @api.response( 200, "Success", @@ -37,7 +37,6 @@ class VersionApi(Resource): ) def get(self): """Check for application version updates""" - parser = reqparse.RequestParser().add_argument("current_version", type=str, required=True, location="args") args = parser.parse_args() check_update_url = dify_config.CHECK_UPDATE_URL diff --git a/api/controllers/console/workspace/account.py b/api/controllers/console/workspace/account.py index 499a52370f..0833b39f41 100644 --- a/api/controllers/console/workspace/account.py +++ b/api/controllers/console/workspace/account.py @@ -8,7 +8,7 @@ from sqlalchemy.orm import Session from configs import dify_config from constants.languages import supported_language -from controllers.console import console_ns +from controllers.console import api, console_ns from controllers.console.auth.error import ( EmailAlreadyInUseError, EmailChangeLimitError, @@ -43,8 +43,19 @@ from services.billing_service import BillingService from services.errors.account import CurrentPasswordIncorrectError as ServiceCurrentPasswordIncorrectError +def _init_parser(): + parser = reqparse.RequestParser() + if dify_config.EDITION == "CLOUD": + parser.add_argument("invitation_code", type=str, location="json") + parser.add_argument("interface_language", type=supported_language, required=True, location="json").add_argument( + "timezone", type=timezone, required=True, location="json" + ) + return parser + + @console_ns.route("/account/init") class AccountInitApi(Resource): + @api.expect(_init_parser()) @setup_required @login_required def post(self): @@ -53,14 +64,7 @@ class AccountInitApi(Resource): if account.status == "active": raise AccountAlreadyInitedError() - parser = reqparse.RequestParser() - - if dify_config.EDITION == "CLOUD": - parser.add_argument("invitation_code", type=str, location="json") - parser.add_argument("interface_language", type=supported_language, required=True, location="json").add_argument( - "timezone", type=timezone, required=True, location="json" - ) - args = parser.parse_args() + args = _init_parser().parse_args() if dify_config.EDITION == "CLOUD": if not args["invitation_code"]: @@ -106,16 +110,19 @@ class AccountProfileApi(Resource): return current_user +parser_name = reqparse.RequestParser().add_argument("name", type=str, required=True, location="json") + + @console_ns.route("/account/name") class AccountNameApi(Resource): + @api.expect(parser_name) @setup_required @login_required @account_initialization_required @marshal_with(account_fields) def post(self): current_user, _ = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument("name", type=str, required=True, location="json") - args = parser.parse_args() + args = parser_name.parse_args() # Validate account name length if len(args["name"]) < 3 or len(args["name"]) > 30: @@ -126,68 +133,80 @@ class AccountNameApi(Resource): return updated_account +parser_avatar = reqparse.RequestParser().add_argument("avatar", type=str, required=True, location="json") + + @console_ns.route("/account/avatar") class AccountAvatarApi(Resource): + @api.expect(parser_avatar) @setup_required @login_required @account_initialization_required @marshal_with(account_fields) def post(self): current_user, _ = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument("avatar", type=str, required=True, location="json") - args = parser.parse_args() + args = parser_avatar.parse_args() updated_account = AccountService.update_account(current_user, avatar=args["avatar"]) return updated_account +parser_interface = reqparse.RequestParser().add_argument( + "interface_language", type=supported_language, required=True, location="json" +) + + @console_ns.route("/account/interface-language") class AccountInterfaceLanguageApi(Resource): + @api.expect(parser_interface) @setup_required @login_required @account_initialization_required @marshal_with(account_fields) def post(self): current_user, _ = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument( - "interface_language", type=supported_language, required=True, location="json" - ) - args = parser.parse_args() + args = parser_interface.parse_args() updated_account = AccountService.update_account(current_user, interface_language=args["interface_language"]) return updated_account +parser_theme = reqparse.RequestParser().add_argument( + "interface_theme", type=str, choices=["light", "dark"], required=True, location="json" +) + + @console_ns.route("/account/interface-theme") class AccountInterfaceThemeApi(Resource): + @api.expect(parser_theme) @setup_required @login_required @account_initialization_required @marshal_with(account_fields) def post(self): current_user, _ = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument( - "interface_theme", type=str, choices=["light", "dark"], required=True, location="json" - ) - args = parser.parse_args() + args = parser_theme.parse_args() updated_account = AccountService.update_account(current_user, interface_theme=args["interface_theme"]) return updated_account +parser_timezone = reqparse.RequestParser().add_argument("timezone", type=str, required=True, location="json") + + @console_ns.route("/account/timezone") class AccountTimezoneApi(Resource): + @api.expect(parser_timezone) @setup_required @login_required @account_initialization_required @marshal_with(account_fields) def post(self): current_user, _ = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument("timezone", type=str, required=True, location="json") - args = parser.parse_args() + args = parser_timezone.parse_args() # Validate timezone string, e.g. America/New_York, Asia/Shanghai if args["timezone"] not in pytz.all_timezones: @@ -198,21 +217,24 @@ class AccountTimezoneApi(Resource): return updated_account +parser_pw = ( + reqparse.RequestParser() + .add_argument("password", type=str, required=False, location="json") + .add_argument("new_password", type=str, required=True, location="json") + .add_argument("repeat_new_password", type=str, required=True, location="json") +) + + @console_ns.route("/account/password") class AccountPasswordApi(Resource): + @api.expect(parser_pw) @setup_required @login_required @account_initialization_required @marshal_with(account_fields) def post(self): current_user, _ = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("password", type=str, required=False, location="json") - .add_argument("new_password", type=str, required=True, location="json") - .add_argument("repeat_new_password", type=str, required=True, location="json") - ) - args = parser.parse_args() + args = parser_pw.parse_args() if args["new_password"] != args["repeat_new_password"]: raise RepeatPasswordNotMatchError() @@ -294,20 +316,23 @@ class AccountDeleteVerifyApi(Resource): return {"result": "success", "data": token} +parser_delete = ( + reqparse.RequestParser() + .add_argument("token", type=str, required=True, location="json") + .add_argument("code", type=str, required=True, location="json") +) + + @console_ns.route("/account/delete") class AccountDeleteApi(Resource): + @api.expect(parser_delete) @setup_required @login_required @account_initialization_required def post(self): account, _ = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("token", type=str, required=True, location="json") - .add_argument("code", type=str, required=True, location="json") - ) - args = parser.parse_args() + args = parser_delete.parse_args() if not AccountService.verify_account_deletion_code(args["token"], args["code"]): raise InvalidAccountDeletionCodeError() @@ -317,16 +342,19 @@ class AccountDeleteApi(Resource): return {"result": "success"} +parser_feedback = ( + reqparse.RequestParser() + .add_argument("email", type=str, required=True, location="json") + .add_argument("feedback", type=str, required=True, location="json") +) + + @console_ns.route("/account/delete/feedback") class AccountDeleteUpdateFeedbackApi(Resource): + @api.expect(parser_feedback) @setup_required def post(self): - parser = ( - reqparse.RequestParser() - .add_argument("email", type=str, required=True, location="json") - .add_argument("feedback", type=str, required=True, location="json") - ) - args = parser.parse_args() + args = parser_feedback.parse_args() BillingService.update_account_deletion_feedback(args["email"], args["feedback"]) @@ -351,6 +379,14 @@ class EducationVerifyApi(Resource): return BillingService.EducationIdentity.verify(account.id, account.email) +parser_edu = ( + reqparse.RequestParser() + .add_argument("token", type=str, required=True, location="json") + .add_argument("institution", type=str, required=True, location="json") + .add_argument("role", type=str, required=True, location="json") +) + + @console_ns.route("/account/education") class EducationApi(Resource): status_fields = { @@ -360,6 +396,7 @@ class EducationApi(Resource): "allow_refresh": fields.Boolean, } + @api.expect(parser_edu) @setup_required @login_required @account_initialization_required @@ -368,13 +405,7 @@ class EducationApi(Resource): def post(self): account, _ = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("token", type=str, required=True, location="json") - .add_argument("institution", type=str, required=True, location="json") - .add_argument("role", type=str, required=True, location="json") - ) - args = parser.parse_args() + args = parser_edu.parse_args() return BillingService.EducationIdentity.activate(account, args["token"], args["institution"], args["role"]) @@ -394,6 +425,14 @@ class EducationApi(Resource): return res +parser_autocomplete = ( + reqparse.RequestParser() + .add_argument("keywords", type=str, required=True, location="args") + .add_argument("page", type=int, required=False, location="args", default=0) + .add_argument("limit", type=int, required=False, location="args", default=20) +) + + @console_ns.route("/account/education/autocomplete") class EducationAutoCompleteApi(Resource): data_fields = { @@ -402,6 +441,7 @@ class EducationAutoCompleteApi(Resource): "has_next": fields.Boolean, } + @api.expect(parser_autocomplete) @setup_required @login_required @account_initialization_required @@ -409,33 +449,30 @@ class EducationAutoCompleteApi(Resource): @cloud_edition_billing_enabled @marshal_with(data_fields) def get(self): - parser = ( - reqparse.RequestParser() - .add_argument("keywords", type=str, required=True, location="args") - .add_argument("page", type=int, required=False, location="args", default=0) - .add_argument("limit", type=int, required=False, location="args", default=20) - ) - args = parser.parse_args() + args = parser_autocomplete.parse_args() return BillingService.EducationIdentity.autocomplete(args["keywords"], args["page"], args["limit"]) +parser_change_email = ( + reqparse.RequestParser() + .add_argument("email", type=email, required=True, location="json") + .add_argument("language", type=str, required=False, location="json") + .add_argument("phase", type=str, required=False, location="json") + .add_argument("token", type=str, required=False, location="json") +) + + @console_ns.route("/account/change-email") class ChangeEmailSendEmailApi(Resource): + @api.expect(parser_change_email) @enable_change_email @setup_required @login_required @account_initialization_required def post(self): current_user, _ = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("email", type=email, required=True, location="json") - .add_argument("language", type=str, required=False, location="json") - .add_argument("phase", type=str, required=False, location="json") - .add_argument("token", type=str, required=False, location="json") - ) - args = parser.parse_args() + args = parser_change_email.parse_args() ip_address = extract_remote_ip(request) if AccountService.is_email_send_ip_limit(ip_address): @@ -470,20 +507,23 @@ class ChangeEmailSendEmailApi(Resource): return {"result": "success", "data": token} +parser_validity = ( + reqparse.RequestParser() + .add_argument("email", type=email, required=True, location="json") + .add_argument("code", type=str, required=True, location="json") + .add_argument("token", type=str, required=True, nullable=False, location="json") +) + + @console_ns.route("/account/change-email/validity") class ChangeEmailCheckApi(Resource): + @api.expect(parser_validity) @enable_change_email @setup_required @login_required @account_initialization_required def post(self): - parser = ( - reqparse.RequestParser() - .add_argument("email", type=email, required=True, location="json") - .add_argument("code", type=str, required=True, location="json") - .add_argument("token", type=str, required=True, nullable=False, location="json") - ) - args = parser.parse_args() + args = parser_validity.parse_args() user_email = args["email"] @@ -514,20 +554,23 @@ class ChangeEmailCheckApi(Resource): return {"is_valid": True, "email": token_data.get("email"), "token": new_token} +parser_reset = ( + reqparse.RequestParser() + .add_argument("new_email", type=email, required=True, location="json") + .add_argument("token", type=str, required=True, nullable=False, location="json") +) + + @console_ns.route("/account/change-email/reset") class ChangeEmailResetApi(Resource): + @api.expect(parser_reset) @enable_change_email @setup_required @login_required @account_initialization_required @marshal_with(account_fields) def post(self): - parser = ( - reqparse.RequestParser() - .add_argument("new_email", type=email, required=True, location="json") - .add_argument("token", type=str, required=True, nullable=False, location="json") - ) - args = parser.parse_args() + args = parser_reset.parse_args() if AccountService.is_account_in_freeze(args["new_email"]): raise AccountInFreezeError() @@ -555,12 +598,15 @@ class ChangeEmailResetApi(Resource): return updated_account +parser_check = reqparse.RequestParser().add_argument("email", type=email, required=True, location="json") + + @console_ns.route("/account/change-email/check-email-unique") class CheckEmailUnique(Resource): + @api.expect(parser_check) @setup_required def post(self): - parser = reqparse.RequestParser().add_argument("email", type=email, required=True, location="json") - args = parser.parse_args() + args = parser_check.parse_args() if AccountService.is_account_in_freeze(args["email"]): raise AccountInFreezeError() if not AccountService.check_email_unique(args["email"]): diff --git a/api/controllers/console/workspace/members.py b/api/controllers/console/workspace/members.py index d66f861799..3ca453f1da 100644 --- a/api/controllers/console/workspace/members.py +++ b/api/controllers/console/workspace/members.py @@ -5,7 +5,7 @@ from flask_restx import Resource, marshal_with, reqparse import services from configs import dify_config -from controllers.console import console_ns +from controllers.console import api, console_ns from controllers.console.auth.error import ( CannotTransferOwnerToSelfError, EmailCodeError, @@ -48,22 +48,25 @@ class MemberListApi(Resource): return {"result": "success", "accounts": members}, 200 +parser_invite = ( + reqparse.RequestParser() + .add_argument("emails", type=list, required=True, location="json") + .add_argument("role", type=str, required=True, default="admin", location="json") + .add_argument("language", type=str, required=False, location="json") +) + + @console_ns.route("/workspaces/current/members/invite-email") class MemberInviteEmailApi(Resource): """Invite a new member by email.""" + @api.expect(parser_invite) @setup_required @login_required @account_initialization_required @cloud_edition_billing_resource_check("members") def post(self): - parser = ( - reqparse.RequestParser() - .add_argument("emails", type=list, required=True, location="json") - .add_argument("role", type=str, required=True, default="admin", location="json") - .add_argument("language", type=str, required=False, location="json") - ) - args = parser.parse_args() + args = parser_invite.parse_args() invitee_emails = args["emails"] invitee_role = args["role"] @@ -143,16 +146,19 @@ class MemberCancelInviteApi(Resource): }, 200 +parser_update = reqparse.RequestParser().add_argument("role", type=str, required=True, location="json") + + @console_ns.route("/workspaces/current/members//update-role") class MemberUpdateRoleApi(Resource): """Update member role.""" + @api.expect(parser_update) @setup_required @login_required @account_initialization_required def put(self, member_id): - parser = reqparse.RequestParser().add_argument("role", type=str, required=True, location="json") - args = parser.parse_args() + args = parser_update.parse_args() new_role = args["role"] if not TenantAccountRole.is_valid_role(new_role): @@ -191,17 +197,20 @@ class DatasetOperatorMemberListApi(Resource): return {"result": "success", "accounts": members}, 200 +parser_send = reqparse.RequestParser().add_argument("language", type=str, required=False, location="json") + + @console_ns.route("/workspaces/current/members/send-owner-transfer-confirm-email") class SendOwnerTransferEmailApi(Resource): """Send owner transfer email.""" + @api.expect(parser_send) @setup_required @login_required @account_initialization_required @is_allow_transfer_owner def post(self): - parser = reqparse.RequestParser().add_argument("language", type=str, required=False, location="json") - args = parser.parse_args() + args = parser_send.parse_args() ip_address = extract_remote_ip(request) if AccountService.is_email_send_ip_limit(ip_address): raise EmailSendIpLimitError() @@ -229,19 +238,22 @@ class SendOwnerTransferEmailApi(Resource): return {"result": "success", "data": token} +parser_owner = ( + reqparse.RequestParser() + .add_argument("code", type=str, required=True, location="json") + .add_argument("token", type=str, required=True, nullable=False, location="json") +) + + @console_ns.route("/workspaces/current/members/owner-transfer-check") class OwnerTransferCheckApi(Resource): + @api.expect(parser_owner) @setup_required @login_required @account_initialization_required @is_allow_transfer_owner def post(self): - parser = ( - reqparse.RequestParser() - .add_argument("code", type=str, required=True, location="json") - .add_argument("token", type=str, required=True, nullable=False, location="json") - ) - args = parser.parse_args() + args = parser_owner.parse_args() # check if the current user is the owner of the workspace current_user, _ = current_account_with_tenant() if not current_user.current_tenant: @@ -276,17 +288,20 @@ class OwnerTransferCheckApi(Resource): return {"is_valid": True, "email": token_data.get("email"), "token": new_token} +parser_owner_transfer = reqparse.RequestParser().add_argument( + "token", type=str, required=True, nullable=False, location="json" +) + + @console_ns.route("/workspaces/current/members//owner-transfer") class OwnerTransfer(Resource): + @api.expect(parser_owner_transfer) @setup_required @login_required @account_initialization_required @is_allow_transfer_owner def post(self, member_id): - parser = reqparse.RequestParser().add_argument( - "token", type=str, required=True, nullable=False, location="json" - ) - args = parser.parse_args() + args = parser_owner_transfer.parse_args() # check if the current user is the owner of the workspace current_user, _ = current_account_with_tenant() diff --git a/api/controllers/console/workspace/model_providers.py b/api/controllers/console/workspace/model_providers.py index 04db975fc2..832ec8af0f 100644 --- a/api/controllers/console/workspace/model_providers.py +++ b/api/controllers/console/workspace/model_providers.py @@ -4,7 +4,7 @@ from flask import send_file from flask_restx import Resource, reqparse from werkzeug.exceptions import Forbidden -from controllers.console import console_ns +from controllers.console import api, console_ns from controllers.console.wraps import account_initialization_required, setup_required from core.model_runtime.entities.model_entities import ModelType from core.model_runtime.errors.validate import CredentialsValidateFailedError @@ -14,9 +14,19 @@ from libs.login import current_account_with_tenant, login_required from services.billing_service import BillingService from services.model_provider_service import ModelProviderService +parser_model = reqparse.RequestParser().add_argument( + "model_type", + type=str, + required=False, + nullable=True, + choices=[mt.value for mt in ModelType], + location="args", +) + @console_ns.route("/workspaces/current/model-providers") class ModelProviderListApi(Resource): + @api.expect(parser_model) @setup_required @login_required @account_initialization_required @@ -24,15 +34,7 @@ class ModelProviderListApi(Resource): _, current_tenant_id = current_account_with_tenant() tenant_id = current_tenant_id - parser = reqparse.RequestParser().add_argument( - "model_type", - type=str, - required=False, - nullable=True, - choices=[mt.value for mt in ModelType], - location="args", - ) - args = parser.parse_args() + args = parser_model.parse_args() model_provider_service = ModelProviderService() provider_list = model_provider_service.get_provider_list(tenant_id=tenant_id, model_type=args.get("model_type")) @@ -40,8 +42,30 @@ class ModelProviderListApi(Resource): return jsonable_encoder({"data": provider_list}) +parser_cred = reqparse.RequestParser().add_argument( + "credential_id", type=uuid_value, required=False, nullable=True, location="args" +) +parser_post_cred = ( + reqparse.RequestParser() + .add_argument("credentials", type=dict, required=True, nullable=False, location="json") + .add_argument("name", type=StrLen(30), required=False, nullable=True, location="json") +) + +parser_put_cred = ( + reqparse.RequestParser() + .add_argument("credential_id", type=uuid_value, required=True, nullable=False, location="json") + .add_argument("credentials", type=dict, required=True, nullable=False, location="json") + .add_argument("name", type=StrLen(30), required=False, nullable=True, location="json") +) + +parser_delete_cred = reqparse.RequestParser().add_argument( + "credential_id", type=uuid_value, required=True, nullable=False, location="json" +) + + @console_ns.route("/workspaces/current/model-providers//credentials") class ModelProviderCredentialApi(Resource): + @api.expect(parser_cred) @setup_required @login_required @account_initialization_required @@ -49,10 +73,7 @@ class ModelProviderCredentialApi(Resource): _, current_tenant_id = current_account_with_tenant() tenant_id = current_tenant_id # if credential_id is not provided, return current used credential - parser = reqparse.RequestParser().add_argument( - "credential_id", type=uuid_value, required=False, nullable=True, location="args" - ) - args = parser.parse_args() + args = parser_cred.parse_args() model_provider_service = ModelProviderService() credentials = model_provider_service.get_provider_credential( @@ -61,6 +82,7 @@ class ModelProviderCredentialApi(Resource): return {"credentials": credentials} + @api.expect(parser_post_cred) @setup_required @login_required @account_initialization_required @@ -69,12 +91,7 @@ class ModelProviderCredentialApi(Resource): if not current_user.is_admin_or_owner: raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument("credentials", type=dict, required=True, nullable=False, location="json") - .add_argument("name", type=StrLen(30), required=False, nullable=True, location="json") - ) - args = parser.parse_args() + args = parser_post_cred.parse_args() model_provider_service = ModelProviderService() @@ -90,6 +107,7 @@ class ModelProviderCredentialApi(Resource): return {"result": "success"}, 201 + @api.expect(parser_put_cred) @setup_required @login_required @account_initialization_required @@ -98,13 +116,7 @@ class ModelProviderCredentialApi(Resource): if not current_user.is_admin_or_owner: raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument("credential_id", type=uuid_value, required=True, nullable=False, location="json") - .add_argument("credentials", type=dict, required=True, nullable=False, location="json") - .add_argument("name", type=StrLen(30), required=False, nullable=True, location="json") - ) - args = parser.parse_args() + args = parser_put_cred.parse_args() model_provider_service = ModelProviderService() @@ -121,6 +133,7 @@ class ModelProviderCredentialApi(Resource): return {"result": "success"} + @api.expect(parser_delete_cred) @setup_required @login_required @account_initialization_required @@ -128,10 +141,8 @@ class ModelProviderCredentialApi(Resource): current_user, current_tenant_id = current_account_with_tenant() if not current_user.is_admin_or_owner: raise Forbidden() - parser = reqparse.RequestParser().add_argument( - "credential_id", type=uuid_value, required=True, nullable=False, location="json" - ) - args = parser.parse_args() + + args = parser_delete_cred.parse_args() model_provider_service = ModelProviderService() model_provider_service.remove_provider_credential( @@ -141,8 +152,14 @@ class ModelProviderCredentialApi(Resource): return {"result": "success"}, 204 +parser_switch = reqparse.RequestParser().add_argument( + "credential_id", type=str, required=True, nullable=False, location="json" +) + + @console_ns.route("/workspaces/current/model-providers//credentials/switch") class ModelProviderCredentialSwitchApi(Resource): + @api.expect(parser_switch) @setup_required @login_required @account_initialization_required @@ -150,10 +167,7 @@ class ModelProviderCredentialSwitchApi(Resource): current_user, current_tenant_id = current_account_with_tenant() if not current_user.is_admin_or_owner: raise Forbidden() - parser = reqparse.RequestParser().add_argument( - "credential_id", type=str, required=True, nullable=False, location="json" - ) - args = parser.parse_args() + args = parser_switch.parse_args() service = ModelProviderService() service.switch_active_provider_credential( @@ -164,17 +178,20 @@ class ModelProviderCredentialSwitchApi(Resource): return {"result": "success"} +parser_validate = reqparse.RequestParser().add_argument( + "credentials", type=dict, required=True, nullable=False, location="json" +) + + @console_ns.route("/workspaces/current/model-providers//credentials/validate") class ModelProviderValidateApi(Resource): + @api.expect(parser_validate) @setup_required @login_required @account_initialization_required def post(self, provider: str): _, current_tenant_id = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument( - "credentials", type=dict, required=True, nullable=False, location="json" - ) - args = parser.parse_args() + args = parser_validate.parse_args() tenant_id = current_tenant_id @@ -218,8 +235,19 @@ class ModelProviderIconApi(Resource): return send_file(io.BytesIO(icon), mimetype=mimetype) +parser_preferred = reqparse.RequestParser().add_argument( + "preferred_provider_type", + type=str, + required=True, + nullable=False, + choices=["system", "custom"], + location="json", +) + + @console_ns.route("/workspaces/current/model-providers//preferred-provider-type") class PreferredProviderTypeUpdateApi(Resource): + @api.expect(parser_preferred) @setup_required @login_required @account_initialization_required @@ -230,15 +258,7 @@ class PreferredProviderTypeUpdateApi(Resource): tenant_id = current_tenant_id - parser = reqparse.RequestParser().add_argument( - "preferred_provider_type", - type=str, - required=True, - nullable=False, - choices=["system", "custom"], - location="json", - ) - args = parser.parse_args() + args = parser_preferred.parse_args() model_provider_service = ModelProviderService() model_provider_service.switch_preferred_provider( diff --git a/api/controllers/console/workspace/models.py b/api/controllers/console/workspace/models.py index 5ab958d585..d6aad129a6 100644 --- a/api/controllers/console/workspace/models.py +++ b/api/controllers/console/workspace/models.py @@ -3,7 +3,7 @@ import logging from flask_restx import Resource, reqparse from werkzeug.exceptions import Forbidden -from controllers.console import console_ns +from controllers.console import api, console_ns from controllers.console.wraps import account_initialization_required, setup_required from core.model_runtime.entities.model_entities import ModelType from core.model_runtime.errors.validate import CredentialsValidateFailedError @@ -16,23 +16,29 @@ from services.model_provider_service import ModelProviderService logger = logging.getLogger(__name__) +parser_get_default = reqparse.RequestParser().add_argument( + "model_type", + type=str, + required=True, + nullable=False, + choices=[mt.value for mt in ModelType], + location="args", +) +parser_post_default = reqparse.RequestParser().add_argument( + "model_settings", type=list, required=True, nullable=False, location="json" +) + + @console_ns.route("/workspaces/current/default-model") class DefaultModelApi(Resource): + @api.expect(parser_get_default) @setup_required @login_required @account_initialization_required def get(self): _, tenant_id = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument( - "model_type", - type=str, - required=True, - nullable=False, - choices=[mt.value for mt in ModelType], - location="args", - ) - args = parser.parse_args() + args = parser_get_default.parse_args() model_provider_service = ModelProviderService() default_model_entity = model_provider_service.get_default_model_of_model_type( @@ -41,6 +47,7 @@ class DefaultModelApi(Resource): return jsonable_encoder({"data": default_model_entity}) + @api.expect(parser_post_default) @setup_required @login_required @account_initialization_required @@ -50,10 +57,7 @@ class DefaultModelApi(Resource): if not current_user.is_admin_or_owner: raise Forbidden() - parser = reqparse.RequestParser().add_argument( - "model_settings", type=list, required=True, nullable=False, location="json" - ) - args = parser.parse_args() + args = parser_post_default.parse_args() model_provider_service = ModelProviderService() model_settings = args["model_settings"] for model_setting in model_settings: @@ -84,6 +88,35 @@ class DefaultModelApi(Resource): return {"result": "success"} +parser_post_models = ( + reqparse.RequestParser() + .add_argument("model", type=str, required=True, nullable=False, location="json") + .add_argument( + "model_type", + type=str, + required=True, + nullable=False, + choices=[mt.value for mt in ModelType], + location="json", + ) + .add_argument("load_balancing", type=dict, required=False, nullable=True, location="json") + .add_argument("config_from", type=str, required=False, nullable=True, location="json") + .add_argument("credential_id", type=uuid_value, required=False, nullable=True, location="json") +) +parser_delete_models = ( + reqparse.RequestParser() + .add_argument("model", type=str, required=True, nullable=False, location="json") + .add_argument( + "model_type", + type=str, + required=True, + nullable=False, + choices=[mt.value for mt in ModelType], + location="json", + ) +) + + @console_ns.route("/workspaces/current/model-providers//models") class ModelProviderModelApi(Resource): @setup_required @@ -97,6 +130,7 @@ class ModelProviderModelApi(Resource): return jsonable_encoder({"data": models}) + @api.expect(parser_post_models) @setup_required @login_required @account_initialization_required @@ -106,23 +140,7 @@ class ModelProviderModelApi(Resource): if not current_user.is_admin_or_owner: raise Forbidden() - - parser = ( - reqparse.RequestParser() - .add_argument("model", type=str, required=True, nullable=False, location="json") - .add_argument( - "model_type", - type=str, - required=True, - nullable=False, - choices=[mt.value for mt in ModelType], - location="json", - ) - .add_argument("load_balancing", type=dict, required=False, nullable=True, location="json") - .add_argument("config_from", type=str, required=False, nullable=True, location="json") - .add_argument("credential_id", type=uuid_value, required=False, nullable=True, location="json") - ) - args = parser.parse_args() + args = parser_post_models.parse_args() if args.get("config_from", "") == "custom-model": if not args.get("credential_id"): @@ -160,6 +178,7 @@ class ModelProviderModelApi(Resource): return {"result": "success"}, 200 + @api.expect(parser_delete_models) @setup_required @login_required @account_initialization_required @@ -169,19 +188,7 @@ class ModelProviderModelApi(Resource): if not current_user.is_admin_or_owner: raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument("model", type=str, required=True, nullable=False, location="json") - .add_argument( - "model_type", - type=str, - required=True, - nullable=False, - choices=[mt.value for mt in ModelType], - location="json", - ) - ) - args = parser.parse_args() + args = parser_delete_models.parse_args() model_provider_service = ModelProviderService() model_provider_service.remove_model( @@ -191,29 +198,76 @@ class ModelProviderModelApi(Resource): return {"result": "success"}, 204 +parser_get_credentials = ( + reqparse.RequestParser() + .add_argument("model", type=str, required=True, nullable=False, location="args") + .add_argument( + "model_type", + type=str, + required=True, + nullable=False, + choices=[mt.value for mt in ModelType], + location="args", + ) + .add_argument("config_from", type=str, required=False, nullable=True, location="args") + .add_argument("credential_id", type=uuid_value, required=False, nullable=True, location="args") +) + + +parser_post_cred = ( + reqparse.RequestParser() + .add_argument("model", type=str, required=True, nullable=False, location="json") + .add_argument( + "model_type", + type=str, + required=True, + nullable=False, + choices=[mt.value for mt in ModelType], + location="json", + ) + .add_argument("name", type=StrLen(30), required=False, nullable=True, location="json") + .add_argument("credentials", type=dict, required=True, nullable=False, location="json") +) +parser_put_cred = ( + reqparse.RequestParser() + .add_argument("model", type=str, required=True, nullable=False, location="json") + .add_argument( + "model_type", + type=str, + required=True, + nullable=False, + choices=[mt.value for mt in ModelType], + location="json", + ) + .add_argument("credential_id", type=uuid_value, required=True, nullable=False, location="json") + .add_argument("credentials", type=dict, required=True, nullable=False, location="json") + .add_argument("name", type=StrLen(30), required=False, nullable=True, location="json") +) +parser_delete_cred = ( + reqparse.RequestParser() + .add_argument("model", type=str, required=True, nullable=False, location="json") + .add_argument( + "model_type", + type=str, + required=True, + nullable=False, + choices=[mt.value for mt in ModelType], + location="json", + ) + .add_argument("credential_id", type=uuid_value, required=True, nullable=False, location="json") +) + + @console_ns.route("/workspaces/current/model-providers//models/credentials") class ModelProviderModelCredentialApi(Resource): + @api.expect(parser_get_credentials) @setup_required @login_required @account_initialization_required def get(self, provider: str): _, tenant_id = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("model", type=str, required=True, nullable=False, location="args") - .add_argument( - "model_type", - type=str, - required=True, - nullable=False, - choices=[mt.value for mt in ModelType], - location="args", - ) - .add_argument("config_from", type=str, required=False, nullable=True, location="args") - .add_argument("credential_id", type=uuid_value, required=False, nullable=True, location="args") - ) - args = parser.parse_args() + args = parser_get_credentials.parse_args() model_provider_service = ModelProviderService() current_credential = model_provider_service.get_model_credential( @@ -257,6 +311,7 @@ class ModelProviderModelCredentialApi(Resource): } ) + @api.expect(parser_post_cred) @setup_required @login_required @account_initialization_required @@ -266,21 +321,7 @@ class ModelProviderModelCredentialApi(Resource): if not current_user.is_admin_or_owner: raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument("model", type=str, required=True, nullable=False, location="json") - .add_argument( - "model_type", - type=str, - required=True, - nullable=False, - choices=[mt.value for mt in ModelType], - location="json", - ) - .add_argument("name", type=StrLen(30), required=False, nullable=True, location="json") - .add_argument("credentials", type=dict, required=True, nullable=False, location="json") - ) - args = parser.parse_args() + args = parser_post_cred.parse_args() model_provider_service = ModelProviderService() @@ -304,6 +345,7 @@ class ModelProviderModelCredentialApi(Resource): return {"result": "success"}, 201 + @api.expect(parser_put_cred) @setup_required @login_required @account_initialization_required @@ -313,22 +355,7 @@ class ModelProviderModelCredentialApi(Resource): if not current_user.is_admin_or_owner: raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument("model", type=str, required=True, nullable=False, location="json") - .add_argument( - "model_type", - type=str, - required=True, - nullable=False, - choices=[mt.value for mt in ModelType], - location="json", - ) - .add_argument("credential_id", type=uuid_value, required=True, nullable=False, location="json") - .add_argument("credentials", type=dict, required=True, nullable=False, location="json") - .add_argument("name", type=StrLen(30), required=False, nullable=True, location="json") - ) - args = parser.parse_args() + args = parser_put_cred.parse_args() model_provider_service = ModelProviderService() @@ -347,6 +374,7 @@ class ModelProviderModelCredentialApi(Resource): return {"result": "success"} + @api.expect(parser_delete_cred) @setup_required @login_required @account_initialization_required @@ -355,20 +383,7 @@ class ModelProviderModelCredentialApi(Resource): if not current_user.is_admin_or_owner: raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument("model", type=str, required=True, nullable=False, location="json") - .add_argument( - "model_type", - type=str, - required=True, - nullable=False, - choices=[mt.value for mt in ModelType], - location="json", - ) - .add_argument("credential_id", type=uuid_value, required=True, nullable=False, location="json") - ) - args = parser.parse_args() + args = parser_delete_cred.parse_args() model_provider_service = ModelProviderService() model_provider_service.remove_model_credential( @@ -382,8 +397,24 @@ class ModelProviderModelCredentialApi(Resource): return {"result": "success"}, 204 +parser_switch = ( + reqparse.RequestParser() + .add_argument("model", type=str, required=True, nullable=False, location="json") + .add_argument( + "model_type", + type=str, + required=True, + nullable=False, + choices=[mt.value for mt in ModelType], + location="json", + ) + .add_argument("credential_id", type=str, required=True, nullable=False, location="json") +) + + @console_ns.route("/workspaces/current/model-providers//models/credentials/switch") class ModelProviderModelCredentialSwitchApi(Resource): + @api.expect(parser_switch) @setup_required @login_required @account_initialization_required @@ -392,20 +423,7 @@ class ModelProviderModelCredentialSwitchApi(Resource): if not current_user.is_admin_or_owner: raise Forbidden() - parser = ( - reqparse.RequestParser() - .add_argument("model", type=str, required=True, nullable=False, location="json") - .add_argument( - "model_type", - type=str, - required=True, - nullable=False, - choices=[mt.value for mt in ModelType], - location="json", - ) - .add_argument("credential_id", type=str, required=True, nullable=False, location="json") - ) - args = parser.parse_args() + args = parser_switch.parse_args() service = ModelProviderService() service.add_model_credential_to_model_list( @@ -418,29 +436,32 @@ class ModelProviderModelCredentialSwitchApi(Resource): return {"result": "success"} +parser_model_enable_disable = ( + reqparse.RequestParser() + .add_argument("model", type=str, required=True, nullable=False, location="json") + .add_argument( + "model_type", + type=str, + required=True, + nullable=False, + choices=[mt.value for mt in ModelType], + location="json", + ) +) + + @console_ns.route( "/workspaces/current/model-providers//models/enable", endpoint="model-provider-model-enable" ) class ModelProviderModelEnableApi(Resource): + @api.expect(parser_model_enable_disable) @setup_required @login_required @account_initialization_required def patch(self, provider: str): _, tenant_id = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("model", type=str, required=True, nullable=False, location="json") - .add_argument( - "model_type", - type=str, - required=True, - nullable=False, - choices=[mt.value for mt in ModelType], - location="json", - ) - ) - args = parser.parse_args() + args = parser_model_enable_disable.parse_args() model_provider_service = ModelProviderService() model_provider_service.enable_model( @@ -454,25 +475,14 @@ class ModelProviderModelEnableApi(Resource): "/workspaces/current/model-providers//models/disable", endpoint="model-provider-model-disable" ) class ModelProviderModelDisableApi(Resource): + @api.expect(parser_model_enable_disable) @setup_required @login_required @account_initialization_required def patch(self, provider: str): _, tenant_id = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("model", type=str, required=True, nullable=False, location="json") - .add_argument( - "model_type", - type=str, - required=True, - nullable=False, - choices=[mt.value for mt in ModelType], - location="json", - ) - ) - args = parser.parse_args() + args = parser_model_enable_disable.parse_args() model_provider_service = ModelProviderService() model_provider_service.disable_model( @@ -482,28 +492,31 @@ class ModelProviderModelDisableApi(Resource): return {"result": "success"} +parser_validate = ( + reqparse.RequestParser() + .add_argument("model", type=str, required=True, nullable=False, location="json") + .add_argument( + "model_type", + type=str, + required=True, + nullable=False, + choices=[mt.value for mt in ModelType], + location="json", + ) + .add_argument("credentials", type=dict, required=True, nullable=False, location="json") +) + + @console_ns.route("/workspaces/current/model-providers//models/credentials/validate") class ModelProviderModelValidateApi(Resource): + @api.expect(parser_validate) @setup_required @login_required @account_initialization_required def post(self, provider: str): _, tenant_id = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("model", type=str, required=True, nullable=False, location="json") - .add_argument( - "model_type", - type=str, - required=True, - nullable=False, - choices=[mt.value for mt in ModelType], - location="json", - ) - .add_argument("credentials", type=dict, required=True, nullable=False, location="json") - ) - args = parser.parse_args() + args = parser_validate.parse_args() model_provider_service = ModelProviderService() @@ -530,16 +543,19 @@ class ModelProviderModelValidateApi(Resource): return response +parser_parameter = reqparse.RequestParser().add_argument( + "model", type=str, required=True, nullable=False, location="args" +) + + @console_ns.route("/workspaces/current/model-providers//models/parameter-rules") class ModelProviderModelParameterRuleApi(Resource): + @api.expect(parser_parameter) @setup_required @login_required @account_initialization_required def get(self, provider: str): - parser = reqparse.RequestParser().add_argument( - "model", type=str, required=True, nullable=False, location="args" - ) - args = parser.parse_args() + args = parser_parameter.parse_args() _, tenant_id = current_account_with_tenant() model_provider_service = ModelProviderService() diff --git a/api/controllers/console/workspace/plugin.py b/api/controllers/console/workspace/plugin.py index 021dc96000..bb8c02b99a 100644 --- a/api/controllers/console/workspace/plugin.py +++ b/api/controllers/console/workspace/plugin.py @@ -5,7 +5,7 @@ from flask_restx import Resource, reqparse from werkzeug.exceptions import Forbidden from configs import dify_config -from controllers.console import console_ns +from controllers.console import api, console_ns from controllers.console.workspace import plugin_permission_required from controllers.console.wraps import account_initialization_required, setup_required from core.model_runtime.utils.encoders import jsonable_encoder @@ -37,19 +37,22 @@ class PluginDebuggingKeyApi(Resource): raise ValueError(e) +parser_list = ( + reqparse.RequestParser() + .add_argument("page", type=int, required=False, location="args", default=1) + .add_argument("page_size", type=int, required=False, location="args", default=256) +) + + @console_ns.route("/workspaces/current/plugin/list") class PluginListApi(Resource): + @api.expect(parser_list) @setup_required @login_required @account_initialization_required def get(self): _, tenant_id = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("page", type=int, required=False, location="args", default=1) - .add_argument("page_size", type=int, required=False, location="args", default=256) - ) - args = parser.parse_args() + args = parser_list.parse_args() try: plugins_with_total = PluginService.list_with_total(tenant_id, args["page"], args["page_size"]) except PluginDaemonClientSideError as e: @@ -58,14 +61,17 @@ class PluginListApi(Resource): return jsonable_encoder({"plugins": plugins_with_total.list, "total": plugins_with_total.total}) +parser_latest = reqparse.RequestParser().add_argument("plugin_ids", type=list, required=True, location="json") + + @console_ns.route("/workspaces/current/plugin/list/latest-versions") class PluginListLatestVersionsApi(Resource): + @api.expect(parser_latest) @setup_required @login_required @account_initialization_required def post(self): - req = reqparse.RequestParser().add_argument("plugin_ids", type=list, required=True, location="json") - args = req.parse_args() + args = parser_latest.parse_args() try: versions = PluginService.list_latest_versions(args["plugin_ids"]) @@ -75,16 +81,19 @@ class PluginListLatestVersionsApi(Resource): return jsonable_encoder({"versions": versions}) +parser_ids = reqparse.RequestParser().add_argument("plugin_ids", type=list, required=True, location="json") + + @console_ns.route("/workspaces/current/plugin/list/installations/ids") class PluginListInstallationsFromIdsApi(Resource): + @api.expect(parser_ids) @setup_required @login_required @account_initialization_required def post(self): _, tenant_id = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument("plugin_ids", type=list, required=True, location="json") - args = parser.parse_args() + args = parser_ids.parse_args() try: plugins = PluginService.list_installations_from_ids(tenant_id, args["plugin_ids"]) @@ -94,16 +103,19 @@ class PluginListInstallationsFromIdsApi(Resource): return jsonable_encoder({"plugins": plugins}) +parser_icon = ( + reqparse.RequestParser() + .add_argument("tenant_id", type=str, required=True, location="args") + .add_argument("filename", type=str, required=True, location="args") +) + + @console_ns.route("/workspaces/current/plugin/icon") class PluginIconApi(Resource): + @api.expect(parser_icon) @setup_required def get(self): - req = ( - reqparse.RequestParser() - .add_argument("tenant_id", type=str, required=True, location="args") - .add_argument("filename", type=str, required=True, location="args") - ) - args = req.parse_args() + args = parser_icon.parse_args() try: icon_bytes, mimetype = PluginService.get_asset(args["tenant_id"], args["filename"]) @@ -157,8 +169,17 @@ class PluginUploadFromPkgApi(Resource): return jsonable_encoder(response) +parser_github = ( + reqparse.RequestParser() + .add_argument("repo", type=str, required=True, location="json") + .add_argument("version", type=str, required=True, location="json") + .add_argument("package", type=str, required=True, location="json") +) + + @console_ns.route("/workspaces/current/plugin/upload/github") class PluginUploadFromGithubApi(Resource): + @api.expect(parser_github) @setup_required @login_required @account_initialization_required @@ -166,13 +187,7 @@ class PluginUploadFromGithubApi(Resource): def post(self): _, tenant_id = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("repo", type=str, required=True, location="json") - .add_argument("version", type=str, required=True, location="json") - .add_argument("package", type=str, required=True, location="json") - ) - args = parser.parse_args() + args = parser_github.parse_args() try: response = PluginService.upload_pkg_from_github(tenant_id, args["repo"], args["version"], args["package"]) @@ -206,19 +221,21 @@ class PluginUploadFromBundleApi(Resource): return jsonable_encoder(response) +parser_pkg = reqparse.RequestParser().add_argument( + "plugin_unique_identifiers", type=list, required=True, location="json" +) + + @console_ns.route("/workspaces/current/plugin/install/pkg") class PluginInstallFromPkgApi(Resource): + @api.expect(parser_pkg) @setup_required @login_required @account_initialization_required @plugin_permission_required(install_required=True) def post(self): _, tenant_id = current_account_with_tenant() - - parser = reqparse.RequestParser().add_argument( - "plugin_unique_identifiers", type=list, required=True, location="json" - ) - args = parser.parse_args() + args = parser_pkg.parse_args() # check if all plugin_unique_identifiers are valid string for plugin_unique_identifier in args["plugin_unique_identifiers"]: @@ -233,8 +250,18 @@ class PluginInstallFromPkgApi(Resource): return jsonable_encoder(response) +parser_githubapi = ( + reqparse.RequestParser() + .add_argument("repo", type=str, required=True, location="json") + .add_argument("version", type=str, required=True, location="json") + .add_argument("package", type=str, required=True, location="json") + .add_argument("plugin_unique_identifier", type=str, required=True, location="json") +) + + @console_ns.route("/workspaces/current/plugin/install/github") class PluginInstallFromGithubApi(Resource): + @api.expect(parser_githubapi) @setup_required @login_required @account_initialization_required @@ -242,14 +269,7 @@ class PluginInstallFromGithubApi(Resource): def post(self): _, tenant_id = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("repo", type=str, required=True, location="json") - .add_argument("version", type=str, required=True, location="json") - .add_argument("package", type=str, required=True, location="json") - .add_argument("plugin_unique_identifier", type=str, required=True, location="json") - ) - args = parser.parse_args() + args = parser_githubapi.parse_args() try: response = PluginService.install_from_github( @@ -265,8 +285,14 @@ class PluginInstallFromGithubApi(Resource): return jsonable_encoder(response) +parser_marketplace = reqparse.RequestParser().add_argument( + "plugin_unique_identifiers", type=list, required=True, location="json" +) + + @console_ns.route("/workspaces/current/plugin/install/marketplace") class PluginInstallFromMarketplaceApi(Resource): + @api.expect(parser_marketplace) @setup_required @login_required @account_initialization_required @@ -274,10 +300,7 @@ class PluginInstallFromMarketplaceApi(Resource): def post(self): _, tenant_id = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument( - "plugin_unique_identifiers", type=list, required=True, location="json" - ) - args = parser.parse_args() + args = parser_marketplace.parse_args() # check if all plugin_unique_identifiers are valid string for plugin_unique_identifier in args["plugin_unique_identifiers"]: @@ -292,19 +315,21 @@ class PluginInstallFromMarketplaceApi(Resource): return jsonable_encoder(response) +parser_pkgapi = reqparse.RequestParser().add_argument( + "plugin_unique_identifier", type=str, required=True, location="args" +) + + @console_ns.route("/workspaces/current/plugin/marketplace/pkg") class PluginFetchMarketplacePkgApi(Resource): + @api.expect(parser_pkgapi) @setup_required @login_required @account_initialization_required @plugin_permission_required(install_required=True) def get(self): _, tenant_id = current_account_with_tenant() - - parser = reqparse.RequestParser().add_argument( - "plugin_unique_identifier", type=str, required=True, location="args" - ) - args = parser.parse_args() + args = parser_pkgapi.parse_args() try: return jsonable_encoder( @@ -319,8 +344,14 @@ class PluginFetchMarketplacePkgApi(Resource): raise ValueError(e) +parser_fetch = reqparse.RequestParser().add_argument( + "plugin_unique_identifier", type=str, required=True, location="args" +) + + @console_ns.route("/workspaces/current/plugin/fetch-manifest") class PluginFetchManifestApi(Resource): + @api.expect(parser_fetch) @setup_required @login_required @account_initialization_required @@ -328,10 +359,7 @@ class PluginFetchManifestApi(Resource): def get(self): _, tenant_id = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument( - "plugin_unique_identifier", type=str, required=True, location="args" - ) - args = parser.parse_args() + args = parser_fetch.parse_args() try: return jsonable_encoder( @@ -345,8 +373,16 @@ class PluginFetchManifestApi(Resource): raise ValueError(e) +parser_tasks = ( + reqparse.RequestParser() + .add_argument("page", type=int, required=True, location="args") + .add_argument("page_size", type=int, required=True, location="args") +) + + @console_ns.route("/workspaces/current/plugin/tasks") class PluginFetchInstallTasksApi(Resource): + @api.expect(parser_tasks) @setup_required @login_required @account_initialization_required @@ -354,12 +390,7 @@ class PluginFetchInstallTasksApi(Resource): def get(self): _, tenant_id = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("page", type=int, required=True, location="args") - .add_argument("page_size", type=int, required=True, location="args") - ) - args = parser.parse_args() + args = parser_tasks.parse_args() try: return jsonable_encoder( @@ -429,8 +460,16 @@ class PluginDeleteInstallTaskItemApi(Resource): raise ValueError(e) +parser_marketplace_api = ( + reqparse.RequestParser() + .add_argument("original_plugin_unique_identifier", type=str, required=True, location="json") + .add_argument("new_plugin_unique_identifier", type=str, required=True, location="json") +) + + @console_ns.route("/workspaces/current/plugin/upgrade/marketplace") class PluginUpgradeFromMarketplaceApi(Resource): + @api.expect(parser_marketplace_api) @setup_required @login_required @account_initialization_required @@ -438,12 +477,7 @@ class PluginUpgradeFromMarketplaceApi(Resource): def post(self): _, tenant_id = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("original_plugin_unique_identifier", type=str, required=True, location="json") - .add_argument("new_plugin_unique_identifier", type=str, required=True, location="json") - ) - args = parser.parse_args() + args = parser_marketplace_api.parse_args() try: return jsonable_encoder( @@ -455,8 +489,19 @@ class PluginUpgradeFromMarketplaceApi(Resource): raise ValueError(e) +parser_github_post = ( + reqparse.RequestParser() + .add_argument("original_plugin_unique_identifier", type=str, required=True, location="json") + .add_argument("new_plugin_unique_identifier", type=str, required=True, location="json") + .add_argument("repo", type=str, required=True, location="json") + .add_argument("version", type=str, required=True, location="json") + .add_argument("package", type=str, required=True, location="json") +) + + @console_ns.route("/workspaces/current/plugin/upgrade/github") class PluginUpgradeFromGithubApi(Resource): + @api.expect(parser_github_post) @setup_required @login_required @account_initialization_required @@ -464,15 +509,7 @@ class PluginUpgradeFromGithubApi(Resource): def post(self): _, tenant_id = current_account_with_tenant() - parser = ( - reqparse.RequestParser() - .add_argument("original_plugin_unique_identifier", type=str, required=True, location="json") - .add_argument("new_plugin_unique_identifier", type=str, required=True, location="json") - .add_argument("repo", type=str, required=True, location="json") - .add_argument("version", type=str, required=True, location="json") - .add_argument("package", type=str, required=True, location="json") - ) - args = parser.parse_args() + args = parser_github_post.parse_args() try: return jsonable_encoder( @@ -489,15 +526,20 @@ class PluginUpgradeFromGithubApi(Resource): raise ValueError(e) +parser_uninstall = reqparse.RequestParser().add_argument( + "plugin_installation_id", type=str, required=True, location="json" +) + + @console_ns.route("/workspaces/current/plugin/uninstall") class PluginUninstallApi(Resource): + @api.expect(parser_uninstall) @setup_required @login_required @account_initialization_required @plugin_permission_required(install_required=True) def post(self): - req = reqparse.RequestParser().add_argument("plugin_installation_id", type=str, required=True, location="json") - args = req.parse_args() + args = parser_uninstall.parse_args() _, tenant_id = current_account_with_tenant() @@ -507,8 +549,16 @@ class PluginUninstallApi(Resource): raise ValueError(e) +parser_change_post = ( + reqparse.RequestParser() + .add_argument("install_permission", type=str, required=True, location="json") + .add_argument("debug_permission", type=str, required=True, location="json") +) + + @console_ns.route("/workspaces/current/plugin/permission/change") class PluginChangePermissionApi(Resource): + @api.expect(parser_change_post) @setup_required @login_required @account_initialization_required @@ -518,12 +568,7 @@ class PluginChangePermissionApi(Resource): if not user.is_admin_or_owner: raise Forbidden() - req = ( - reqparse.RequestParser() - .add_argument("install_permission", type=str, required=True, location="json") - .add_argument("debug_permission", type=str, required=True, location="json") - ) - args = req.parse_args() + args = parser_change_post.parse_args() install_permission = TenantPluginPermission.InstallPermission(args["install_permission"]) debug_permission = TenantPluginPermission.DebugPermission(args["debug_permission"]) @@ -558,8 +603,20 @@ class PluginFetchPermissionApi(Resource): ) +parser_dynamic = ( + reqparse.RequestParser() + .add_argument("plugin_id", type=str, required=True, location="args") + .add_argument("provider", type=str, required=True, location="args") + .add_argument("action", type=str, required=True, location="args") + .add_argument("parameter", type=str, required=True, location="args") + .add_argument("credential_id", type=str, required=False, location="args") + .add_argument("provider_type", type=str, required=True, location="args") +) + + @console_ns.route("/workspaces/current/plugin/parameters/dynamic-options") class PluginFetchDynamicSelectOptionsApi(Resource): + @api.expect(parser_dynamic) @setup_required @login_required @account_initialization_required @@ -571,16 +628,7 @@ class PluginFetchDynamicSelectOptionsApi(Resource): user_id = current_user.id - parser = ( - reqparse.RequestParser() - .add_argument("plugin_id", type=str, required=True, location="args") - .add_argument("provider", type=str, required=True, location="args") - .add_argument("action", type=str, required=True, location="args") - .add_argument("parameter", type=str, required=True, location="args") - .add_argument("credential_id", type=str, required=False, location="args") - .add_argument("provider_type", type=str, required=True, location="args") - ) - args = parser.parse_args() + args = parser_dynamic.parse_args() try: options = PluginParameterService.get_dynamic_select_options( @@ -599,8 +647,16 @@ class PluginFetchDynamicSelectOptionsApi(Resource): return jsonable_encoder({"options": options}) +parser_change = ( + reqparse.RequestParser() + .add_argument("permission", type=dict, required=True, location="json") + .add_argument("auto_upgrade", type=dict, required=True, location="json") +) + + @console_ns.route("/workspaces/current/plugin/preferences/change") class PluginChangePreferencesApi(Resource): + @api.expect(parser_change) @setup_required @login_required @account_initialization_required @@ -609,12 +665,7 @@ class PluginChangePreferencesApi(Resource): if not user.is_admin_or_owner: raise Forbidden() - req = ( - reqparse.RequestParser() - .add_argument("permission", type=dict, required=True, location="json") - .add_argument("auto_upgrade", type=dict, required=True, location="json") - ) - args = req.parse_args() + args = parser_change.parse_args() permission = args["permission"] @@ -694,8 +745,12 @@ class PluginFetchPreferencesApi(Resource): return jsonable_encoder({"permission": permission_dict, "auto_upgrade": auto_upgrade_dict}) +parser_exclude = reqparse.RequestParser().add_argument("plugin_id", type=str, required=True, location="json") + + @console_ns.route("/workspaces/current/plugin/preferences/autoupgrade/exclude") class PluginAutoUpgradeExcludePluginApi(Resource): + @api.expect(parser_exclude) @setup_required @login_required @account_initialization_required @@ -703,8 +758,7 @@ class PluginAutoUpgradeExcludePluginApi(Resource): # exclude one single plugin _, tenant_id = current_account_with_tenant() - req = reqparse.RequestParser().add_argument("plugin_id", type=str, required=True, location="json") - args = req.parse_args() + args = parser_exclude.parse_args() return jsonable_encoder({"success": PluginAutoUpgradeService.exclude_plugin(tenant_id, args["plugin_id"])}) diff --git a/api/controllers/console/workspace/tool_providers.py b/api/controllers/console/workspace/tool_providers.py index 2d123106f3..1c9d438ca6 100644 --- a/api/controllers/console/workspace/tool_providers.py +++ b/api/controllers/console/workspace/tool_providers.py @@ -10,7 +10,7 @@ from sqlalchemy.orm import Session from werkzeug.exceptions import Forbidden from configs import dify_config -from controllers.console import console_ns +from controllers.console import api, console_ns from controllers.console.wraps import ( account_initialization_required, enterprise_license_required, @@ -52,8 +52,19 @@ def is_valid_url(url: str) -> bool: return False +parser_tool = reqparse.RequestParser().add_argument( + "type", + type=str, + choices=["builtin", "model", "api", "workflow", "mcp"], + required=False, + nullable=True, + location="args", +) + + @console_ns.route("/workspaces/current/tool-providers") class ToolProviderListApi(Resource): + @api.expect(parser_tool) @setup_required @login_required @account_initialization_required @@ -62,15 +73,7 @@ class ToolProviderListApi(Resource): user_id = user.id - req = reqparse.RequestParser().add_argument( - "type", - type=str, - choices=["builtin", "model", "api", "workflow", "mcp"], - required=False, - nullable=True, - location="args", - ) - args = req.parse_args() + args = parser_tool.parse_args() return ToolCommonService.list_tool_providers(user_id, tenant_id, args.get("type", None)) @@ -102,8 +105,14 @@ class ToolBuiltinProviderInfoApi(Resource): return jsonable_encoder(BuiltinToolManageService.get_builtin_tool_provider_info(tenant_id, provider)) +parser_delete = reqparse.RequestParser().add_argument( + "credential_id", type=str, required=True, nullable=False, location="json" +) + + @console_ns.route("/workspaces/current/tool-provider/builtin//delete") class ToolBuiltinProviderDeleteApi(Resource): + @api.expect(parser_delete) @setup_required @login_required @account_initialization_required @@ -112,10 +121,7 @@ class ToolBuiltinProviderDeleteApi(Resource): if not user.is_admin_or_owner: raise Forbidden() - req = reqparse.RequestParser().add_argument( - "credential_id", type=str, required=True, nullable=False, location="json" - ) - args = req.parse_args() + args = parser_delete.parse_args() return BuiltinToolManageService.delete_builtin_tool_provider( tenant_id, @@ -124,8 +130,17 @@ class ToolBuiltinProviderDeleteApi(Resource): ) +parser_add = ( + reqparse.RequestParser() + .add_argument("credentials", type=dict, required=True, nullable=False, location="json") + .add_argument("name", type=StrLen(30), required=False, nullable=False, location="json") + .add_argument("type", type=str, required=True, nullable=False, location="json") +) + + @console_ns.route("/workspaces/current/tool-provider/builtin//add") class ToolBuiltinProviderAddApi(Resource): + @api.expect(parser_add) @setup_required @login_required @account_initialization_required @@ -134,13 +149,7 @@ class ToolBuiltinProviderAddApi(Resource): user_id = user.id - parser = ( - reqparse.RequestParser() - .add_argument("credentials", type=dict, required=True, nullable=False, location="json") - .add_argument("name", type=StrLen(30), required=False, nullable=False, location="json") - .add_argument("type", type=str, required=True, nullable=False, location="json") - ) - args = parser.parse_args() + args = parser_add.parse_args() if args["type"] not in CredentialType.values(): raise ValueError(f"Invalid credential type: {args['type']}") @@ -155,8 +164,17 @@ class ToolBuiltinProviderAddApi(Resource): ) +parser_update = ( + reqparse.RequestParser() + .add_argument("credential_id", type=str, required=True, nullable=False, location="json") + .add_argument("credentials", type=dict, required=False, nullable=True, location="json") + .add_argument("name", type=StrLen(30), required=False, nullable=True, location="json") +) + + @console_ns.route("/workspaces/current/tool-provider/builtin//update") class ToolBuiltinProviderUpdateApi(Resource): + @api.expect(parser_update) @setup_required @login_required @account_initialization_required @@ -168,14 +186,7 @@ class ToolBuiltinProviderUpdateApi(Resource): user_id = user.id - parser = ( - reqparse.RequestParser() - .add_argument("credential_id", type=str, required=True, nullable=False, location="json") - .add_argument("credentials", type=dict, required=False, nullable=True, location="json") - .add_argument("name", type=StrLen(30), required=False, nullable=True, location="json") - ) - - args = parser.parse_args() + args = parser_update.parse_args() result = BuiltinToolManageService.update_builtin_tool_provider( user_id=user_id, @@ -213,8 +224,22 @@ class ToolBuiltinProviderIconApi(Resource): return send_file(io.BytesIO(icon_bytes), mimetype=mimetype, max_age=icon_cache_max_age) +parser_api_add = ( + reqparse.RequestParser() + .add_argument("credentials", type=dict, required=True, nullable=False, location="json") + .add_argument("schema_type", type=str, required=True, nullable=False, location="json") + .add_argument("schema", type=str, required=True, nullable=False, location="json") + .add_argument("provider", type=str, required=True, nullable=False, location="json") + .add_argument("icon", type=dict, required=True, nullable=False, location="json") + .add_argument("privacy_policy", type=str, required=False, nullable=True, location="json") + .add_argument("labels", type=list[str], required=False, nullable=True, location="json", default=[]) + .add_argument("custom_disclaimer", type=str, required=False, nullable=True, location="json") +) + + @console_ns.route("/workspaces/current/tool-provider/api/add") class ToolApiProviderAddApi(Resource): + @api.expect(parser_api_add) @setup_required @login_required @account_initialization_required @@ -226,19 +251,7 @@ class ToolApiProviderAddApi(Resource): user_id = user.id - parser = ( - reqparse.RequestParser() - .add_argument("credentials", type=dict, required=True, nullable=False, location="json") - .add_argument("schema_type", type=str, required=True, nullable=False, location="json") - .add_argument("schema", type=str, required=True, nullable=False, location="json") - .add_argument("provider", type=str, required=True, nullable=False, location="json") - .add_argument("icon", type=dict, required=True, nullable=False, location="json") - .add_argument("privacy_policy", type=str, required=False, nullable=True, location="json") - .add_argument("labels", type=list[str], required=False, nullable=True, location="json", default=[]) - .add_argument("custom_disclaimer", type=str, required=False, nullable=True, location="json") - ) - - args = parser.parse_args() + args = parser_api_add.parse_args() return ApiToolManageService.create_api_tool_provider( user_id, @@ -254,8 +267,12 @@ class ToolApiProviderAddApi(Resource): ) +parser_remote = reqparse.RequestParser().add_argument("url", type=str, required=True, nullable=False, location="args") + + @console_ns.route("/workspaces/current/tool-provider/api/remote") class ToolApiProviderGetRemoteSchemaApi(Resource): + @api.expect(parser_remote) @setup_required @login_required @account_initialization_required @@ -264,9 +281,7 @@ class ToolApiProviderGetRemoteSchemaApi(Resource): user_id = user.id - parser = reqparse.RequestParser().add_argument("url", type=str, required=True, nullable=False, location="args") - - args = parser.parse_args() + args = parser_remote.parse_args() return ApiToolManageService.get_api_tool_provider_remote_schema( user_id, @@ -275,8 +290,14 @@ class ToolApiProviderGetRemoteSchemaApi(Resource): ) +parser_tools = reqparse.RequestParser().add_argument( + "provider", type=str, required=True, nullable=False, location="args" +) + + @console_ns.route("/workspaces/current/tool-provider/api/tools") class ToolApiProviderListToolsApi(Resource): + @api.expect(parser_tools) @setup_required @login_required @account_initialization_required @@ -285,11 +306,7 @@ class ToolApiProviderListToolsApi(Resource): user_id = user.id - parser = reqparse.RequestParser().add_argument( - "provider", type=str, required=True, nullable=False, location="args" - ) - - args = parser.parse_args() + args = parser_tools.parse_args() return jsonable_encoder( ApiToolManageService.list_api_tool_provider_tools( @@ -300,8 +317,23 @@ class ToolApiProviderListToolsApi(Resource): ) +parser_api_update = ( + reqparse.RequestParser() + .add_argument("credentials", type=dict, required=True, nullable=False, location="json") + .add_argument("schema_type", type=str, required=True, nullable=False, location="json") + .add_argument("schema", type=str, required=True, nullable=False, location="json") + .add_argument("provider", type=str, required=True, nullable=False, location="json") + .add_argument("original_provider", type=str, required=True, nullable=False, location="json") + .add_argument("icon", type=dict, required=True, nullable=False, location="json") + .add_argument("privacy_policy", type=str, required=True, nullable=True, location="json") + .add_argument("labels", type=list[str], required=False, nullable=True, location="json") + .add_argument("custom_disclaimer", type=str, required=True, nullable=True, location="json") +) + + @console_ns.route("/workspaces/current/tool-provider/api/update") class ToolApiProviderUpdateApi(Resource): + @api.expect(parser_api_update) @setup_required @login_required @account_initialization_required @@ -313,20 +345,7 @@ class ToolApiProviderUpdateApi(Resource): user_id = user.id - parser = ( - reqparse.RequestParser() - .add_argument("credentials", type=dict, required=True, nullable=False, location="json") - .add_argument("schema_type", type=str, required=True, nullable=False, location="json") - .add_argument("schema", type=str, required=True, nullable=False, location="json") - .add_argument("provider", type=str, required=True, nullable=False, location="json") - .add_argument("original_provider", type=str, required=True, nullable=False, location="json") - .add_argument("icon", type=dict, required=True, nullable=False, location="json") - .add_argument("privacy_policy", type=str, required=True, nullable=True, location="json") - .add_argument("labels", type=list[str], required=False, nullable=True, location="json") - .add_argument("custom_disclaimer", type=str, required=True, nullable=True, location="json") - ) - - args = parser.parse_args() + args = parser_api_update.parse_args() return ApiToolManageService.update_api_tool_provider( user_id, @@ -343,8 +362,14 @@ class ToolApiProviderUpdateApi(Resource): ) +parser_api_delete = reqparse.RequestParser().add_argument( + "provider", type=str, required=True, nullable=False, location="json" +) + + @console_ns.route("/workspaces/current/tool-provider/api/delete") class ToolApiProviderDeleteApi(Resource): + @api.expect(parser_api_delete) @setup_required @login_required @account_initialization_required @@ -356,11 +381,7 @@ class ToolApiProviderDeleteApi(Resource): user_id = user.id - parser = reqparse.RequestParser().add_argument( - "provider", type=str, required=True, nullable=False, location="json" - ) - - args = parser.parse_args() + args = parser_api_delete.parse_args() return ApiToolManageService.delete_api_tool_provider( user_id, @@ -369,8 +390,12 @@ class ToolApiProviderDeleteApi(Resource): ) +parser_get = reqparse.RequestParser().add_argument("provider", type=str, required=True, nullable=False, location="args") + + @console_ns.route("/workspaces/current/tool-provider/api/get") class ToolApiProviderGetApi(Resource): + @api.expect(parser_get) @setup_required @login_required @account_initialization_required @@ -379,11 +404,7 @@ class ToolApiProviderGetApi(Resource): user_id = user.id - parser = reqparse.RequestParser().add_argument( - "provider", type=str, required=True, nullable=False, location="args" - ) - - args = parser.parse_args() + args = parser_get.parse_args() return ApiToolManageService.get_api_tool_provider( user_id, @@ -407,40 +428,44 @@ class ToolBuiltinProviderCredentialsSchemaApi(Resource): ) +parser_schema = reqparse.RequestParser().add_argument( + "schema", type=str, required=True, nullable=False, location="json" +) + + @console_ns.route("/workspaces/current/tool-provider/api/schema") class ToolApiProviderSchemaApi(Resource): + @api.expect(parser_schema) @setup_required @login_required @account_initialization_required def post(self): - parser = reqparse.RequestParser().add_argument( - "schema", type=str, required=True, nullable=False, location="json" - ) - - args = parser.parse_args() + args = parser_schema.parse_args() return ApiToolManageService.parser_api_schema( schema=args["schema"], ) +parser_pre = ( + reqparse.RequestParser() + .add_argument("tool_name", type=str, required=True, nullable=False, location="json") + .add_argument("provider_name", type=str, required=False, nullable=False, location="json") + .add_argument("credentials", type=dict, required=True, nullable=False, location="json") + .add_argument("parameters", type=dict, required=True, nullable=False, location="json") + .add_argument("schema_type", type=str, required=True, nullable=False, location="json") + .add_argument("schema", type=str, required=True, nullable=False, location="json") +) + + @console_ns.route("/workspaces/current/tool-provider/api/test/pre") class ToolApiProviderPreviousTestApi(Resource): + @api.expect(parser_pre) @setup_required @login_required @account_initialization_required def post(self): - parser = ( - reqparse.RequestParser() - .add_argument("tool_name", type=str, required=True, nullable=False, location="json") - .add_argument("provider_name", type=str, required=False, nullable=False, location="json") - .add_argument("credentials", type=dict, required=True, nullable=False, location="json") - .add_argument("parameters", type=dict, required=True, nullable=False, location="json") - .add_argument("schema_type", type=str, required=True, nullable=False, location="json") - .add_argument("schema", type=str, required=True, nullable=False, location="json") - ) - - args = parser.parse_args() + args = parser_pre.parse_args() _, current_tenant_id = current_account_with_tenant() return ApiToolManageService.test_api_tool_preview( current_tenant_id, @@ -453,8 +478,22 @@ class ToolApiProviderPreviousTestApi(Resource): ) +parser_create = ( + reqparse.RequestParser() + .add_argument("workflow_app_id", type=uuid_value, required=True, nullable=False, location="json") + .add_argument("name", type=alphanumeric, required=True, nullable=False, location="json") + .add_argument("label", type=str, required=True, nullable=False, location="json") + .add_argument("description", type=str, required=True, nullable=False, location="json") + .add_argument("icon", type=dict, required=True, nullable=False, location="json") + .add_argument("parameters", type=list[dict], required=True, nullable=False, location="json") + .add_argument("privacy_policy", type=str, required=False, nullable=True, location="json", default="") + .add_argument("labels", type=list[str], required=False, nullable=True, location="json") +) + + @console_ns.route("/workspaces/current/tool-provider/workflow/create") class ToolWorkflowProviderCreateApi(Resource): + @api.expect(parser_create) @setup_required @login_required @account_initialization_required @@ -466,19 +505,7 @@ class ToolWorkflowProviderCreateApi(Resource): user_id = user.id - reqparser = ( - reqparse.RequestParser() - .add_argument("workflow_app_id", type=uuid_value, required=True, nullable=False, location="json") - .add_argument("name", type=alphanumeric, required=True, nullable=False, location="json") - .add_argument("label", type=str, required=True, nullable=False, location="json") - .add_argument("description", type=str, required=True, nullable=False, location="json") - .add_argument("icon", type=dict, required=True, nullable=False, location="json") - .add_argument("parameters", type=list[dict], required=True, nullable=False, location="json") - .add_argument("privacy_policy", type=str, required=False, nullable=True, location="json", default="") - .add_argument("labels", type=list[str], required=False, nullable=True, location="json") - ) - - args = reqparser.parse_args() + args = parser_create.parse_args() return WorkflowToolManageService.create_workflow_tool( user_id=user_id, @@ -494,8 +521,22 @@ class ToolWorkflowProviderCreateApi(Resource): ) +parser_workflow_update = ( + reqparse.RequestParser() + .add_argument("workflow_tool_id", type=uuid_value, required=True, nullable=False, location="json") + .add_argument("name", type=alphanumeric, required=True, nullable=False, location="json") + .add_argument("label", type=str, required=True, nullable=False, location="json") + .add_argument("description", type=str, required=True, nullable=False, location="json") + .add_argument("icon", type=dict, required=True, nullable=False, location="json") + .add_argument("parameters", type=list[dict], required=True, nullable=False, location="json") + .add_argument("privacy_policy", type=str, required=False, nullable=True, location="json", default="") + .add_argument("labels", type=list[str], required=False, nullable=True, location="json") +) + + @console_ns.route("/workspaces/current/tool-provider/workflow/update") class ToolWorkflowProviderUpdateApi(Resource): + @api.expect(parser_workflow_update) @setup_required @login_required @account_initialization_required @@ -507,19 +548,7 @@ class ToolWorkflowProviderUpdateApi(Resource): user_id = user.id - reqparser = ( - reqparse.RequestParser() - .add_argument("workflow_tool_id", type=uuid_value, required=True, nullable=False, location="json") - .add_argument("name", type=alphanumeric, required=True, nullable=False, location="json") - .add_argument("label", type=str, required=True, nullable=False, location="json") - .add_argument("description", type=str, required=True, nullable=False, location="json") - .add_argument("icon", type=dict, required=True, nullable=False, location="json") - .add_argument("parameters", type=list[dict], required=True, nullable=False, location="json") - .add_argument("privacy_policy", type=str, required=False, nullable=True, location="json", default="") - .add_argument("labels", type=list[str], required=False, nullable=True, location="json") - ) - - args = reqparser.parse_args() + args = parser_workflow_update.parse_args() if not args["workflow_tool_id"]: raise ValueError("incorrect workflow_tool_id") @@ -538,8 +567,14 @@ class ToolWorkflowProviderUpdateApi(Resource): ) +parser_workflow_delete = reqparse.RequestParser().add_argument( + "workflow_tool_id", type=uuid_value, required=True, nullable=False, location="json" +) + + @console_ns.route("/workspaces/current/tool-provider/workflow/delete") class ToolWorkflowProviderDeleteApi(Resource): + @api.expect(parser_workflow_delete) @setup_required @login_required @account_initialization_required @@ -551,11 +586,7 @@ class ToolWorkflowProviderDeleteApi(Resource): user_id = user.id - reqparser = reqparse.RequestParser().add_argument( - "workflow_tool_id", type=uuid_value, required=True, nullable=False, location="json" - ) - - args = reqparser.parse_args() + args = parser_workflow_delete.parse_args() return WorkflowToolManageService.delete_workflow_tool( user_id, @@ -564,8 +595,16 @@ class ToolWorkflowProviderDeleteApi(Resource): ) +parser_wf_get = ( + reqparse.RequestParser() + .add_argument("workflow_tool_id", type=uuid_value, required=False, nullable=True, location="args") + .add_argument("workflow_app_id", type=uuid_value, required=False, nullable=True, location="args") +) + + @console_ns.route("/workspaces/current/tool-provider/workflow/get") class ToolWorkflowProviderGetApi(Resource): + @api.expect(parser_wf_get) @setup_required @login_required @account_initialization_required @@ -574,13 +613,7 @@ class ToolWorkflowProviderGetApi(Resource): user_id = user.id - parser = ( - reqparse.RequestParser() - .add_argument("workflow_tool_id", type=uuid_value, required=False, nullable=True, location="args") - .add_argument("workflow_app_id", type=uuid_value, required=False, nullable=True, location="args") - ) - - args = parser.parse_args() + args = parser_wf_get.parse_args() if args.get("workflow_tool_id"): tool = WorkflowToolManageService.get_workflow_tool_by_tool_id( @@ -600,8 +633,14 @@ class ToolWorkflowProviderGetApi(Resource): return jsonable_encoder(tool) +parser_wf_tools = reqparse.RequestParser().add_argument( + "workflow_tool_id", type=uuid_value, required=True, nullable=False, location="args" +) + + @console_ns.route("/workspaces/current/tool-provider/workflow/tools") class ToolWorkflowProviderListToolApi(Resource): + @api.expect(parser_wf_tools) @setup_required @login_required @account_initialization_required @@ -610,11 +649,7 @@ class ToolWorkflowProviderListToolApi(Resource): user_id = user.id - parser = reqparse.RequestParser().add_argument( - "workflow_tool_id", type=uuid_value, required=True, nullable=False, location="args" - ) - - args = parser.parse_args() + args = parser_wf_tools.parse_args() return jsonable_encoder( WorkflowToolManageService.list_single_workflow_tools( @@ -790,32 +825,40 @@ class ToolOAuthCallback(Resource): return redirect(f"{dify_config.CONSOLE_WEB_URL}/oauth-callback") +parser_default_cred = reqparse.RequestParser().add_argument( + "id", type=str, required=True, nullable=False, location="json" +) + + @console_ns.route("/workspaces/current/tool-provider/builtin//default-credential") class ToolBuiltinProviderSetDefaultApi(Resource): + @api.expect(parser_default_cred) @setup_required @login_required @account_initialization_required def post(self, provider): current_user, current_tenant_id = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument("id", type=str, required=True, nullable=False, location="json") - args = parser.parse_args() + args = parser_default_cred.parse_args() return BuiltinToolManageService.set_default_provider( tenant_id=current_tenant_id, user_id=current_user.id, provider=provider, id=args["id"] ) +parser_custom = ( + reqparse.RequestParser() + .add_argument("client_params", type=dict, required=False, nullable=True, location="json") + .add_argument("enable_oauth_custom_client", type=bool, required=False, nullable=True, location="json") +) + + @console_ns.route("/workspaces/current/tool-provider/builtin//oauth/custom-client") class ToolOAuthCustomClient(Resource): + @api.expect(parser_custom) @setup_required @login_required @account_initialization_required def post(self, provider): - parser = ( - reqparse.RequestParser() - .add_argument("client_params", type=dict, required=False, nullable=True, location="json") - .add_argument("enable_oauth_custom_client", type=bool, required=False, nullable=True, location="json") - ) - args = parser.parse_args() + args = parser_custom.parse_args() user, tenant_id = current_account_with_tenant() @@ -878,25 +921,44 @@ class ToolBuiltinProviderGetCredentialInfoApi(Resource): ) +parser_mcp = ( + reqparse.RequestParser() + .add_argument("server_url", type=str, required=True, nullable=False, location="json") + .add_argument("name", type=str, required=True, nullable=False, location="json") + .add_argument("icon", type=str, required=True, nullable=False, location="json") + .add_argument("icon_type", type=str, required=True, nullable=False, location="json") + .add_argument("icon_background", type=str, required=False, nullable=True, location="json", default="") + .add_argument("server_identifier", type=str, required=True, nullable=False, location="json") + .add_argument("configuration", type=dict, required=False, nullable=True, location="json", default={}) + .add_argument("headers", type=dict, required=False, nullable=True, location="json", default={}) + .add_argument("authentication", type=dict, required=False, nullable=True, location="json", default={}) +) +parser_mcp_put = ( + reqparse.RequestParser() + .add_argument("server_url", type=str, required=True, nullable=False, location="json") + .add_argument("name", type=str, required=True, nullable=False, location="json") + .add_argument("icon", type=str, required=True, nullable=False, location="json") + .add_argument("icon_type", type=str, required=True, nullable=False, location="json") + .add_argument("icon_background", type=str, required=False, nullable=True, location="json") + .add_argument("provider_id", type=str, required=True, nullable=False, location="json") + .add_argument("server_identifier", type=str, required=True, nullable=False, location="json") + .add_argument("configuration", type=dict, required=False, nullable=True, location="json", default={}) + .add_argument("headers", type=dict, required=False, nullable=True, location="json", default={}) + .add_argument("authentication", type=dict, required=False, nullable=True, location="json", default={}) +) +parser_mcp_delete = reqparse.RequestParser().add_argument( + "provider_id", type=str, required=True, nullable=False, location="json" +) + + @console_ns.route("/workspaces/current/tool-provider/mcp") class ToolProviderMCPApi(Resource): + @api.expect(parser_mcp) @setup_required @login_required @account_initialization_required def post(self): - parser = ( - reqparse.RequestParser() - .add_argument("server_url", type=str, required=True, nullable=False, location="json") - .add_argument("name", type=str, required=True, nullable=False, location="json") - .add_argument("icon", type=str, required=True, nullable=False, location="json") - .add_argument("icon_type", type=str, required=True, nullable=False, location="json") - .add_argument("icon_background", type=str, required=False, nullable=True, location="json", default="") - .add_argument("server_identifier", type=str, required=True, nullable=False, location="json") - .add_argument("configuration", type=dict, required=False, nullable=True, location="json", default={}) - .add_argument("headers", type=dict, required=False, nullable=True, location="json", default={}) - .add_argument("authentication", type=dict, required=False, nullable=True, location="json", default={}) - ) - args = parser.parse_args() + args = parser_mcp.parse_args() user, tenant_id = current_account_with_tenant() # Parse and validate models @@ -921,24 +983,12 @@ class ToolProviderMCPApi(Resource): ) return jsonable_encoder(result) + @api.expect(parser_mcp_put) @setup_required @login_required @account_initialization_required def put(self): - parser = ( - reqparse.RequestParser() - .add_argument("server_url", type=str, required=True, nullable=False, location="json") - .add_argument("name", type=str, required=True, nullable=False, location="json") - .add_argument("icon", type=str, required=True, nullable=False, location="json") - .add_argument("icon_type", type=str, required=True, nullable=False, location="json") - .add_argument("icon_background", type=str, required=False, nullable=True, location="json") - .add_argument("provider_id", type=str, required=True, nullable=False, location="json") - .add_argument("server_identifier", type=str, required=True, nullable=False, location="json") - .add_argument("configuration", type=dict, required=False, nullable=True, location="json", default={}) - .add_argument("headers", type=dict, required=False, nullable=True, location="json", default={}) - .add_argument("authentication", type=dict, required=False, nullable=True, location="json", default={}) - ) - args = parser.parse_args() + args = parser_mcp_put.parse_args() configuration = MCPConfiguration.model_validate(args["configuration"]) authentication = MCPAuthentication.model_validate(args["authentication"]) if args["authentication"] else None _, current_tenant_id = current_account_with_tenant() @@ -972,14 +1022,12 @@ class ToolProviderMCPApi(Resource): ) return {"result": "success"} + @api.expect(parser_mcp_delete) @setup_required @login_required @account_initialization_required def delete(self): - parser = reqparse.RequestParser().add_argument( - "provider_id", type=str, required=True, nullable=False, location="json" - ) - args = parser.parse_args() + args = parser_mcp_delete.parse_args() _, current_tenant_id = current_account_with_tenant() with Session(db.engine) as session, session.begin(): @@ -988,18 +1036,21 @@ class ToolProviderMCPApi(Resource): return {"result": "success"} +parser_auth = ( + reqparse.RequestParser() + .add_argument("provider_id", type=str, required=True, nullable=False, location="json") + .add_argument("authorization_code", type=str, required=False, nullable=True, location="json") +) + + @console_ns.route("/workspaces/current/tool-provider/mcp/auth") class ToolMCPAuthApi(Resource): + @api.expect(parser_auth) @setup_required @login_required @account_initialization_required def post(self): - parser = ( - reqparse.RequestParser() - .add_argument("provider_id", type=str, required=True, nullable=False, location="json") - .add_argument("authorization_code", type=str, required=False, nullable=True, location="json") - ) - args = parser.parse_args() + args = parser_auth.parse_args() provider_id = args["provider_id"] _, tenant_id = current_account_with_tenant() @@ -1097,15 +1148,18 @@ class ToolMCPUpdateApi(Resource): return jsonable_encoder(tools) +parser_cb = ( + reqparse.RequestParser() + .add_argument("code", type=str, required=True, nullable=False, location="args") + .add_argument("state", type=str, required=True, nullable=False, location="args") +) + + @console_ns.route("/mcp/oauth/callback") class ToolMCPCallbackApi(Resource): + @api.expect(parser_cb) def get(self): - parser = ( - reqparse.RequestParser() - .add_argument("code", type=str, required=True, nullable=False, location="args") - .add_argument("state", type=str, required=True, nullable=False, location="args") - ) - args = parser.parse_args() + args = parser_cb.parse_args() state_key = args["state"] authorization_code = args["code"] diff --git a/api/controllers/console/workspace/workspace.py b/api/controllers/console/workspace/workspace.py index 70d5ef242e..f10c30db2e 100644 --- a/api/controllers/console/workspace/workspace.py +++ b/api/controllers/console/workspace/workspace.py @@ -13,7 +13,7 @@ from controllers.common.errors import ( TooManyFilesError, UnsupportedFileTypeError, ) -from controllers.console import console_ns +from controllers.console import api, console_ns from controllers.console.admin import admin_required from controllers.console.error import AccountNotLinkTenantError from controllers.console.wraps import ( @@ -150,15 +150,18 @@ class TenantApi(Resource): return WorkspaceService.get_tenant_info(tenant), 200 +parser_switch = reqparse.RequestParser().add_argument("tenant_id", type=str, required=True, location="json") + + @console_ns.route("/workspaces/switch") class SwitchWorkspaceApi(Resource): + @api.expect(parser_switch) @setup_required @login_required @account_initialization_required def post(self): current_user, _ = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument("tenant_id", type=str, required=True, location="json") - args = parser.parse_args() + args = parser_switch.parse_args() # check if tenant_id is valid, 403 if not try: @@ -242,16 +245,19 @@ class WebappLogoWorkspaceApi(Resource): return {"id": upload_file.id}, 201 +parser_info = reqparse.RequestParser().add_argument("name", type=str, required=True, location="json") + + @console_ns.route("/workspaces/info") class WorkspaceInfoApi(Resource): + @api.expect(parser_info) @setup_required @login_required @account_initialization_required # Change workspace name def post(self): _, current_tenant_id = current_account_with_tenant() - parser = reqparse.RequestParser().add_argument("name", type=str, required=True, location="json") - args = parser.parse_args() + args = parser_info.parse_args() if not current_tenant_id: raise ValueError("No current tenant") diff --git a/api/controllers/web/audio.py b/api/controllers/web/audio.py index 3103851088..b9fef48c4d 100644 --- a/api/controllers/web/audio.py +++ b/api/controllers/web/audio.py @@ -88,12 +88,6 @@ class AudioApi(WebApiResource): @web_ns.route("/text-to-audio") class TextApi(WebApiResource): - text_to_audio_response_fields = { - "audio_url": fields.String, - "duration": fields.Float, - } - - @marshal_with(text_to_audio_response_fields) @web_ns.doc("Text to Audio") @web_ns.doc(description="Convert text to audio using text-to-speech service.") @web_ns.doc( diff --git a/api/core/mcp/client/streamable_client.py b/api/core/mcp/client/streamable_client.py index a9c1eda624..805c16c838 100644 --- a/api/core/mcp/client/streamable_client.py +++ b/api/core/mcp/client/streamable_client.py @@ -138,6 +138,10 @@ class StreamableHTTPTransport: ) -> bool: """Handle an SSE event, returning True if the response is complete.""" if sse.event == "message": + # ping event send by server will be recognized as a message event with empty data by httpx-sse's SSEDecoder + if not sse.data.strip(): + return False + try: message = JSONRPCMessage.model_validate_json(sse.data) logger.debug("SSE message: %s", message) diff --git a/api/core/moderation/openai_moderation/openai_moderation.py b/api/core/moderation/openai_moderation/openai_moderation.py index 74ef6f7ceb..5cab4841f5 100644 --- a/api/core/moderation/openai_moderation/openai_moderation.py +++ b/api/core/moderation/openai_moderation/openai_moderation.py @@ -52,7 +52,7 @@ class OpenAIModeration(Moderation): text = "\n".join(str(inputs.values())) model_manager = ModelManager() model_instance = model_manager.get_model_instance( - tenant_id=self.tenant_id, provider="openai", model_type=ModelType.MODERATION, model="text-moderation-stable" + tenant_id=self.tenant_id, provider="openai", model_type=ModelType.MODERATION, model="omni-moderation-latest" ) openai_moderation = model_instance.invoke_moderation(text=text) diff --git a/api/core/rag/extractor/word_extractor.py b/api/core/rag/extractor/word_extractor.py index 1a9704688a..c7a5568866 100644 --- a/api/core/rag/extractor/word_extractor.py +++ b/api/core/rag/extractor/word_extractor.py @@ -152,13 +152,15 @@ class WordExtractor(BaseExtractor): # Initialize a row, all of which are empty by default row_cells = [""] * total_cols col_index = 0 - for cell in row.cells: + while col_index < len(row.cells): # make sure the col_index is not out of range - while col_index < total_cols and row_cells[col_index] != "": + while col_index < len(row.cells) and row_cells[col_index] != "": col_index += 1 # if col_index is out of range the loop is jumped - if col_index >= total_cols: + if col_index >= len(row.cells): break + # get the correct cell + cell = row.cells[col_index] cell_content = self._parse_cell(cell, image_map).strip() cell_colspan = cell.grid_span or 1 for i in range(cell_colspan): diff --git a/api/core/rag/pipeline/queue.py b/api/core/rag/pipeline/queue.py index 3d4d6f588d..7472598a7f 100644 --- a/api/core/rag/pipeline/queue.py +++ b/api/core/rag/pipeline/queue.py @@ -54,6 +54,9 @@ class TenantIsolatedTaskQueue: serialized_data = wrapper.serialize() serialized_tasks.append(serialized_data) + if not serialized_tasks: + return + redis_client.lpush(self._queue, *serialized_tasks) def pull_tasks(self, count: int = 1) -> Sequence[Any]: diff --git a/api/core/variables/types.py b/api/core/variables/types.py index a2e12e742b..b537ff7180 100644 --- a/api/core/variables/types.py +++ b/api/core/variables/types.py @@ -202,6 +202,35 @@ class SegmentType(StrEnum): raise ValueError(f"element_type is only supported by array type, got {self}") return _ARRAY_ELEMENT_TYPES_MAPPING.get(self) + @staticmethod + def get_zero_value(t: "SegmentType"): + # Lazy import to avoid circular dependency + from factories import variable_factory + + match t: + case ( + SegmentType.ARRAY_OBJECT + | SegmentType.ARRAY_ANY + | SegmentType.ARRAY_STRING + | SegmentType.ARRAY_NUMBER + | SegmentType.ARRAY_BOOLEAN + ): + return variable_factory.build_segment_with_type(t, []) + case SegmentType.OBJECT: + return variable_factory.build_segment({}) + case SegmentType.STRING: + return variable_factory.build_segment("") + case SegmentType.INTEGER: + return variable_factory.build_segment(0) + case SegmentType.FLOAT: + return variable_factory.build_segment(0.0) + case SegmentType.NUMBER: + return variable_factory.build_segment(0) + case SegmentType.BOOLEAN: + return variable_factory.build_segment(False) + case _: + raise ValueError(f"unsupported variable type: {t}") + _ARRAY_ELEMENT_TYPES_MAPPING: Mapping[SegmentType, SegmentType] = { # ARRAY_ANY does not have corresponding element type. diff --git a/api/core/workflow/nodes/variable_assigner/v1/node.py b/api/core/workflow/nodes/variable_assigner/v1/node.py index 8cd267c4a7..3a0793f092 100644 --- a/api/core/workflow/nodes/variable_assigner/v1/node.py +++ b/api/core/workflow/nodes/variable_assigner/v1/node.py @@ -2,7 +2,6 @@ from collections.abc import Callable, Mapping, Sequence from typing import TYPE_CHECKING, Any, TypeAlias from core.variables import SegmentType, Variable -from core.variables.segments import BooleanSegment from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID from core.workflow.conversation_variable_updater import ConversationVariableUpdater from core.workflow.entities import GraphInitParams @@ -12,7 +11,6 @@ from core.workflow.nodes.base.entities import BaseNodeData, RetryConfig from core.workflow.nodes.base.node import Node from core.workflow.nodes.variable_assigner.common import helpers as common_helpers from core.workflow.nodes.variable_assigner.common.exc import VariableOperatorNodeError -from factories import variable_factory from ..common.impl import conversation_variable_updater_factory from .node_data import VariableAssignerData, WriteMode @@ -116,7 +114,7 @@ class VariableAssignerNode(Node): updated_variable = original_variable.model_copy(update={"value": updated_value}) case WriteMode.CLEAR: - income_value = get_zero_value(original_variable.value_type) + income_value = SegmentType.get_zero_value(original_variable.value_type) updated_variable = original_variable.model_copy(update={"value": income_value.to_object()}) # Over write the variable. @@ -143,24 +141,3 @@ class VariableAssignerNode(Node): process_data=common_helpers.set_updated_variables({}, updated_variables), outputs={}, ) - - -def get_zero_value(t: SegmentType): - # TODO(QuantumGhost): this should be a method of `SegmentType`. - match t: - case SegmentType.ARRAY_OBJECT | SegmentType.ARRAY_STRING | SegmentType.ARRAY_NUMBER | SegmentType.ARRAY_BOOLEAN: - return variable_factory.build_segment_with_type(t, []) - case SegmentType.OBJECT: - return variable_factory.build_segment({}) - case SegmentType.STRING: - return variable_factory.build_segment("") - case SegmentType.INTEGER: - return variable_factory.build_segment(0) - case SegmentType.FLOAT: - return variable_factory.build_segment(0.0) - case SegmentType.NUMBER: - return variable_factory.build_segment(0) - case SegmentType.BOOLEAN: - return BooleanSegment(value=False) - case _: - raise VariableOperatorNodeError(f"unsupported variable type: {t}") diff --git a/api/core/workflow/nodes/variable_assigner/v2/constants.py b/api/core/workflow/nodes/variable_assigner/v2/constants.py deleted file mode 100644 index 1a4b81c39c..0000000000 --- a/api/core/workflow/nodes/variable_assigner/v2/constants.py +++ /dev/null @@ -1,14 +0,0 @@ -from core.variables import SegmentType - -# Note: This mapping is duplicated with `get_zero_value`. Consider refactoring to avoid redundancy. -EMPTY_VALUE_MAPPING = { - SegmentType.STRING: "", - SegmentType.NUMBER: 0, - SegmentType.BOOLEAN: False, - SegmentType.OBJECT: {}, - SegmentType.ARRAY_ANY: [], - SegmentType.ARRAY_STRING: [], - SegmentType.ARRAY_NUMBER: [], - SegmentType.ARRAY_OBJECT: [], - SegmentType.ARRAY_BOOLEAN: [], -} diff --git a/api/core/workflow/nodes/variable_assigner/v2/node.py b/api/core/workflow/nodes/variable_assigner/v2/node.py index a89055fd66..f15924d78f 100644 --- a/api/core/workflow/nodes/variable_assigner/v2/node.py +++ b/api/core/workflow/nodes/variable_assigner/v2/node.py @@ -16,7 +16,6 @@ from core.workflow.nodes.variable_assigner.common.exc import VariableOperatorNod from core.workflow.nodes.variable_assigner.common.impl import conversation_variable_updater_factory from . import helpers -from .constants import EMPTY_VALUE_MAPPING from .entities import VariableAssignerNodeData, VariableOperationItem from .enums import InputType, Operation from .exc import ( @@ -249,7 +248,7 @@ class VariableAssignerNode(Node): case Operation.OVER_WRITE: return value case Operation.CLEAR: - return EMPTY_VALUE_MAPPING[variable.value_type] + return SegmentType.get_zero_value(variable.value_type).to_object() case Operation.APPEND: return variable.value + [value] case Operation.EXTEND: diff --git a/api/extensions/storage/google_cloud_storage.py b/api/extensions/storage/google_cloud_storage.py index d352996518..7f59252f2f 100644 --- a/api/extensions/storage/google_cloud_storage.py +++ b/api/extensions/storage/google_cloud_storage.py @@ -3,7 +3,7 @@ import io import json from collections.abc import Generator -from google.cloud import storage as google_cloud_storage +from google.cloud import storage as google_cloud_storage # type: ignore from configs import dify_config from extensions.storage.base_storage import BaseStorage diff --git a/api/fields/app_fields.py b/api/fields/app_fields.py index 1f14d663b8..7191933eed 100644 --- a/api/fields/app_fields.py +++ b/api/fields/app_fields.py @@ -116,6 +116,7 @@ app_partial_fields = { "access_mode": fields.String, "create_user_name": fields.String, "author_name": fields.String, + "has_draft_trigger": fields.Boolean, } diff --git a/api/models/dataset.py b/api/models/dataset.py index 01c17fa243..33d396aeb9 100644 --- a/api/models/dataset.py +++ b/api/models/dataset.py @@ -21,6 +21,7 @@ from configs import dify_config from core.rag.index_processor.constant.built_in_field import BuiltInField, MetadataDataSource from core.rag.retrieval.retrieval_methods import RetrievalMethod from extensions.ext_storage import storage +from models.base import TypeBase from services.entities.knowledge_entities.knowledge_entities import ParentMode, Rule from .account import Account @@ -906,17 +907,21 @@ class ChildChunk(Base): return db.session.query(DocumentSegment).where(DocumentSegment.id == self.segment_id).first() -class AppDatasetJoin(Base): +class AppDatasetJoin(TypeBase): __tablename__ = "app_dataset_joins" __table_args__ = ( sa.PrimaryKeyConstraint("id", name="app_dataset_join_pkey"), sa.Index("app_dataset_join_app_dataset_idx", "dataset_id", "app_id"), ) - id = mapped_column(StringUUID, primary_key=True, nullable=False, server_default=sa.text("uuid_generate_v4()")) - app_id = mapped_column(StringUUID, nullable=False) - dataset_id = mapped_column(StringUUID, nullable=False) - created_at: Mapped[datetime] = mapped_column(DateTime, nullable=False, server_default=sa.func.current_timestamp()) + id: Mapped[str] = mapped_column( + StringUUID, primary_key=True, nullable=False, server_default=sa.text("uuid_generate_v4()"), init=False + ) + app_id: Mapped[str] = mapped_column(StringUUID, nullable=False) + dataset_id: Mapped[str] = mapped_column(StringUUID, nullable=False) + created_at: Mapped[datetime] = mapped_column( + DateTime, nullable=False, server_default=sa.func.current_timestamp(), init=False + ) @property def app(self): diff --git a/api/pyproject.toml b/api/pyproject.toml index 5d72b18204..1cf7d719ea 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "dify-api" -version = "1.9.2" +version = "1.10.0" requires-python = ">=3.11,<3.13" dependencies = [ @@ -37,7 +37,7 @@ dependencies = [ "numpy~=1.26.4", "openpyxl~=3.1.5", "opik~=1.8.72", - "litellm==1.77.1", # Pinned to avoid madoka dependency issue + "litellm==1.77.1", # Pinned to avoid madoka dependency issue "opentelemetry-api==1.27.0", "opentelemetry-distro==0.48b0", "opentelemetry-exporter-otlp==1.27.0", @@ -79,7 +79,6 @@ dependencies = [ "tiktoken~=0.9.0", "transformers~=4.56.1", "unstructured[docx,epub,md,ppt,pptx]~=0.16.1", - "weave~=0.51.0", "yarl~=1.18.3", "webvtt-py~=0.5.1", "sseclient-py~=1.8.0", @@ -90,6 +89,7 @@ dependencies = [ "croniter>=6.0.0", "weaviate-client==4.17.0", "apscheduler>=3.11.0", + "weave>=0.52.16", ] # Before adding new dependency, consider place it in # alphabet order (a-z) and suitable group. diff --git a/api/services/workflow/workflow_converter.py b/api/services/workflow/workflow_converter.py index e70b2b5c95..067feb994f 100644 --- a/api/services/workflow/workflow_converter.py +++ b/api/services/workflow/workflow_converter.py @@ -1,5 +1,5 @@ import json -from typing import Any +from typing import Any, TypedDict from core.app.app_config.entities import ( DatasetEntity, @@ -28,6 +28,12 @@ from models.model import App, AppMode, AppModelConfig from models.workflow import Workflow, WorkflowType +class _NodeType(TypedDict): + id: str + position: None + data: dict[str, Any] + + class WorkflowConverter: """ App Convert to Workflow Mode @@ -217,7 +223,7 @@ class WorkflowConverter: return app_config - def _convert_to_start_node(self, variables: list[VariableEntity]): + def _convert_to_start_node(self, variables: list[VariableEntity]) -> _NodeType: """ Convert to Start Node :param variables: list of variables @@ -235,7 +241,7 @@ class WorkflowConverter: def _convert_to_http_request_node( self, app_model: App, variables: list[VariableEntity], external_data_variables: list[ExternalDataVariableEntity] - ) -> tuple[list[dict], dict[str, str]]: + ) -> tuple[list[_NodeType], dict[str, str]]: """ Convert API Based Extension to HTTP Request Node :param app_model: App instance @@ -285,7 +291,7 @@ class WorkflowConverter: request_body_json = json.dumps(request_body) request_body_json = request_body_json.replace(r"\{\{", "{{").replace(r"\}\}", "}}") - http_request_node = { + http_request_node: _NodeType = { "id": f"http_request_{index}", "position": None, "data": { @@ -303,7 +309,7 @@ class WorkflowConverter: nodes.append(http_request_node) # append code node for response body parsing - code_node: dict[str, Any] = { + code_node: _NodeType = { "id": f"code_{index}", "position": None, "data": { @@ -326,7 +332,7 @@ class WorkflowConverter: def _convert_to_knowledge_retrieval_node( self, new_app_mode: AppMode, dataset_config: DatasetEntity, model_config: ModelConfigEntity - ) -> dict | None: + ) -> _NodeType | None: """ Convert datasets to Knowledge Retrieval Node :param new_app_mode: new app mode @@ -384,7 +390,7 @@ class WorkflowConverter: prompt_template: PromptTemplateEntity, file_upload: FileUploadConfig | None = None, external_data_variable_node_mapping: dict[str, str] | None = None, - ): + ) -> _NodeType: """ Convert to LLM Node :param original_app_mode: original app mode @@ -561,7 +567,7 @@ class WorkflowConverter: return template - def _convert_to_end_node(self): + def _convert_to_end_node(self) -> _NodeType: """ Convert to End Node :return: @@ -577,7 +583,7 @@ class WorkflowConverter: }, } - def _convert_to_answer_node(self): + def _convert_to_answer_node(self) -> _NodeType: """ Convert to Answer Node :return: @@ -598,7 +604,7 @@ class WorkflowConverter: """ return {"id": f"{source}-{target}", "source": source, "target": target} - def _append_node(self, graph: dict, node: dict): + def _append_node(self, graph: dict[str, Any], node: _NodeType): """ Append Node to Graph diff --git a/api/services/workflow_service.py b/api/services/workflow_service.py index b6d64d95da..e8088e17c1 100644 --- a/api/services/workflow_service.py +++ b/api/services/workflow_service.py @@ -10,20 +10,17 @@ from sqlalchemy.orm import Session, sessionmaker from core.app.app_config.entities import VariableEntityType from core.app.apps.advanced_chat.app_config_manager import AdvancedChatAppConfigManager from core.app.apps.workflow.app_config_manager import WorkflowAppConfigManager -from core.app.entities.app_invoke_entities import InvokeFrom from core.file import File from core.repositories import DifyCoreRepositoryFactory from core.variables import Variable from core.variables.variables import VariableUnion -from core.workflow.entities import GraphInitParams, GraphRuntimeState, VariablePool, WorkflowNodeExecution +from core.workflow.entities import VariablePool, WorkflowNodeExecution from core.workflow.enums import ErrorStrategy, WorkflowNodeExecutionMetadataKey, WorkflowNodeExecutionStatus from core.workflow.errors import WorkflowNodeRunFailedError -from core.workflow.graph.graph import Graph from core.workflow.graph_events import GraphNodeEventBase, NodeRunFailedEvent, NodeRunSucceededEvent from core.workflow.node_events import NodeRunResult from core.workflow.nodes import NodeType from core.workflow.nodes.base.node import Node -from core.workflow.nodes.node_factory import DifyNodeFactory from core.workflow.nodes.node_mapping import LATEST_VERSION, NODE_TYPE_CLASSES_MAPPING from core.workflow.nodes.start.entities import StartNodeData from core.workflow.system_variable import SystemVariable @@ -34,7 +31,6 @@ from extensions.ext_storage import storage from factories.file_factory import build_from_mapping, build_from_mappings from libs.datetime_utils import naive_utc_now from models import Account -from models.enums import UserFrom from models.model import App, AppMode from models.tools import WorkflowToolProvider from models.workflow import Workflow, WorkflowNodeExecutionModel, WorkflowNodeExecutionTriggeredFrom, WorkflowType @@ -215,7 +211,7 @@ class WorkflowService: self.validate_features_structure(app_model=app_model, features=features) # validate graph structure - self.validate_graph_structure(user_id=account.id, app_model=app_model, graph=graph) + self.validate_graph_structure(graph=graph) # create draft workflow if not found if not workflow: @@ -274,7 +270,7 @@ class WorkflowService: self._validate_workflow_credentials(draft_workflow) # validate graph structure - self.validate_graph_structure(user_id=account.id, app_model=app_model, graph=draft_workflow.graph_dict) + self.validate_graph_structure(graph=draft_workflow.graph_dict) # create new workflow workflow = Workflow.new( @@ -905,42 +901,30 @@ class WorkflowService: return new_app - def validate_graph_structure(self, user_id: str, app_model: App, graph: Mapping[str, Any]): + def validate_graph_structure(self, graph: Mapping[str, Any]): """ - Validate workflow graph structure by instantiating the Graph object. + Validate workflow graph structure. - This leverages the built-in graph validators (including trigger/UserInput exclusivity) - and raises any structural errors before persisting the workflow. + This performs a lightweight validation on the graph, checking for structural + inconsistencies such as the coexistence of start and trigger nodes. """ node_configs = graph.get("nodes", []) - node_configs = cast(list[dict[str, object]], node_configs) + node_configs = cast(list[dict[str, Any]], node_configs) # is empty graph if not node_configs: return - workflow_id = app_model.workflow_id or "UNKNOWN" - Graph.init( - graph_config=graph, - # TODO(Mairuis): Add root node id - root_node_id=None, - node_factory=DifyNodeFactory( - graph_init_params=GraphInitParams( - tenant_id=app_model.tenant_id, - app_id=app_model.id, - workflow_id=workflow_id, - graph_config=graph, - user_id=user_id, - user_from=UserFrom.ACCOUNT, - invoke_from=InvokeFrom.VALIDATION, - call_depth=0, - ), - graph_runtime_state=GraphRuntimeState( - variable_pool=VariablePool(), - start_at=time.perf_counter(), - ), - ), - ) + node_types: set[NodeType] = set() + for node in node_configs: + node_type = node.get("data", {}).get("type") + if node_type: + node_types.add(NodeType(node_type)) + + # start node and trigger node cannot coexist + if NodeType.START in node_types: + if any(nt.is_trigger_node for nt in node_types): + raise ValueError("Start node and trigger nodes cannot coexist in the same workflow") def validate_features_structure(self, app_model: App, features: dict): if app_model.mode == AppMode.ADVANCED_CHAT: diff --git a/api/tests/unit_tests/core/rag/extractor/test_word_extractor.py b/api/tests/unit_tests/core/rag/extractor/test_word_extractor.py new file mode 100644 index 0000000000..3635e4dbf9 --- /dev/null +++ b/api/tests/unit_tests/core/rag/extractor/test_word_extractor.py @@ -0,0 +1,49 @@ +"""Primarily used for testing merged cell scenarios""" + +from docx import Document + +from core.rag.extractor.word_extractor import WordExtractor + + +def _generate_table_with_merged_cells(): + doc = Document() + + """ + The table looks like this: + +-----+-----+-----+ + | 1-1 & 1-2 | 1-3 | + +-----+-----+-----+ + | 2-1 | 2-2 | 2-3 | + | & |-----+-----+ + | 3-1 | 3-2 | 3-3 | + +-----+-----+-----+ + """ + table = doc.add_table(rows=3, cols=3) + table.style = "Table Grid" + + for i in range(3): + for j in range(3): + cell = table.cell(i, j) + cell.text = f"{i + 1}-{j + 1}" + + # Merge cells + cell_0_0 = table.cell(0, 0) + cell_0_1 = table.cell(0, 1) + merged_cell_1 = cell_0_0.merge(cell_0_1) + merged_cell_1.text = "1-1 & 1-2" + + cell_1_0 = table.cell(1, 0) + cell_2_0 = table.cell(2, 0) + merged_cell_2 = cell_1_0.merge(cell_2_0) + merged_cell_2.text = "2-1 & 3-1" + + ground_truth = [["1-1 & 1-2", "", "1-3"], ["2-1 & 3-1", "2-2", "2-3"], ["2-1 & 3-1", "3-2", "3-3"]] + + return doc.tables[0], ground_truth + + +def test_parse_row(): + table, gt = _generate_table_with_merged_cells() + extractor = object.__new__(WordExtractor) + for idx, row in enumerate(table.rows): + assert extractor._parse_row(row, {}, 3) == gt[idx] diff --git a/api/tests/unit_tests/core/rag/pipeline/test_queue.py b/api/tests/unit_tests/core/rag/pipeline/test_queue.py index cfdbb30f8f..17c5f3c6b7 100644 --- a/api/tests/unit_tests/core/rag/pipeline/test_queue.py +++ b/api/tests/unit_tests/core/rag/pipeline/test_queue.py @@ -179,7 +179,7 @@ class TestTenantIsolatedTaskQueue: """Test pushing empty task list.""" sample_queue.push_tasks([]) - mock_redis.lpush.assert_called_once_with("tenant_self_test-key_task_queue:tenant-123") + mock_redis.lpush.assert_not_called() @patch("core.rag.pipeline.queue.redis_client") def test_pull_tasks_default_count(self, mock_redis, sample_queue): diff --git a/api/tests/unit_tests/core/variables/test_segment_type.py b/api/tests/unit_tests/core/variables/test_segment_type.py index a197b617f3..3bfc5a957f 100644 --- a/api/tests/unit_tests/core/variables/test_segment_type.py +++ b/api/tests/unit_tests/core/variables/test_segment_type.py @@ -1,3 +1,5 @@ +import pytest + from core.variables.types import ArrayValidation, SegmentType @@ -83,3 +85,81 @@ class TestSegmentTypeIsValidArrayValidation: value = [1, 2, 3] # validation is None, skip assert SegmentType.ARRAY_STRING.is_valid(value, array_validation=ArrayValidation.NONE) + + +class TestSegmentTypeGetZeroValue: + """ + Test class for SegmentType.get_zero_value static method. + + Provides comprehensive coverage of all supported SegmentType values to ensure + correct zero value generation for each type. + """ + + def test_array_types_return_empty_list(self): + """Test that all array types return empty list segments.""" + array_types = [ + SegmentType.ARRAY_ANY, + SegmentType.ARRAY_STRING, + SegmentType.ARRAY_NUMBER, + SegmentType.ARRAY_OBJECT, + SegmentType.ARRAY_BOOLEAN, + ] + + for seg_type in array_types: + result = SegmentType.get_zero_value(seg_type) + assert result.value == [] + assert result.value_type == seg_type + + def test_object_returns_empty_dict(self): + """Test that OBJECT type returns empty dictionary segment.""" + result = SegmentType.get_zero_value(SegmentType.OBJECT) + assert result.value == {} + assert result.value_type == SegmentType.OBJECT + + def test_string_returns_empty_string(self): + """Test that STRING type returns empty string segment.""" + result = SegmentType.get_zero_value(SegmentType.STRING) + assert result.value == "" + assert result.value_type == SegmentType.STRING + + def test_integer_returns_zero(self): + """Test that INTEGER type returns zero segment.""" + result = SegmentType.get_zero_value(SegmentType.INTEGER) + assert result.value == 0 + assert result.value_type == SegmentType.INTEGER + + def test_float_returns_zero_point_zero(self): + """Test that FLOAT type returns 0.0 segment.""" + result = SegmentType.get_zero_value(SegmentType.FLOAT) + assert result.value == 0.0 + assert result.value_type == SegmentType.FLOAT + + def test_number_returns_zero(self): + """Test that NUMBER type returns zero segment.""" + result = SegmentType.get_zero_value(SegmentType.NUMBER) + assert result.value == 0 + # NUMBER type with integer value returns INTEGER segment type + # (NUMBER is a union type that can be INTEGER or FLOAT) + assert result.value_type == SegmentType.INTEGER + # Verify that exposed_type returns NUMBER for frontend compatibility + assert result.value_type.exposed_type() == SegmentType.NUMBER + + def test_boolean_returns_false(self): + """Test that BOOLEAN type returns False segment.""" + result = SegmentType.get_zero_value(SegmentType.BOOLEAN) + assert result.value is False + assert result.value_type == SegmentType.BOOLEAN + + def test_unsupported_types_raise_value_error(self): + """Test that unsupported types raise ValueError.""" + unsupported_types = [ + SegmentType.SECRET, + SegmentType.FILE, + SegmentType.NONE, + SegmentType.GROUP, + SegmentType.ARRAY_FILE, + ] + + for seg_type in unsupported_types: + with pytest.raises(ValueError, match="unsupported variable type"): + SegmentType.get_zero_value(seg_type) diff --git a/api/tests/unit_tests/core/workflow/graph_engine/test_database_utils.py b/api/tests/unit_tests/core/workflow/graph_engine/test_database_utils.py new file mode 100644 index 0000000000..ae7dd48bb1 --- /dev/null +++ b/api/tests/unit_tests/core/workflow/graph_engine/test_database_utils.py @@ -0,0 +1,46 @@ +""" +Utilities for detecting if database service is available for workflow tests. +""" + +import psycopg2 +import pytest + +from configs import dify_config + + +def is_database_available() -> bool: + """ + Check if the database service is available by attempting to connect to it. + + Returns: + True if database is available, False otherwise. + """ + try: + # Try to establish a database connection using a context manager + with psycopg2.connect( + host=dify_config.DB_HOST, + port=dify_config.DB_PORT, + database=dify_config.DB_DATABASE, + user=dify_config.DB_USERNAME, + password=dify_config.DB_PASSWORD, + connect_timeout=2, # 2 second timeout + ) as conn: + pass # Connection established and will be closed automatically + return True + except (psycopg2.OperationalError, psycopg2.Error): + return False + + +def skip_if_database_unavailable(): + """ + Pytest skip decorator that skips tests when database service is unavailable. + + Usage: + @skip_if_database_unavailable() + def test_my_workflow(): + ... + """ + return pytest.mark.skipif( + not is_database_available(), + reason="Database service is not available (connection refused or authentication failed)", + ) diff --git a/api/tests/unit_tests/core/workflow/graph_engine/test_iteration_flatten_output.py b/api/tests/unit_tests/core/workflow/graph_engine/test_iteration_flatten_output.py index f2095a8a70..98f344babf 100644 --- a/api/tests/unit_tests/core/workflow/graph_engine/test_iteration_flatten_output.py +++ b/api/tests/unit_tests/core/workflow/graph_engine/test_iteration_flatten_output.py @@ -6,9 +6,11 @@ This module tests the iteration node's ability to: 2. Preserve nested array structure when flatten_output=False """ +from .test_database_utils import skip_if_database_unavailable from .test_table_runner import TableTestRunner, WorkflowTestCase +@skip_if_database_unavailable() def test_iteration_with_flatten_output_enabled(): """ Test iteration node with flatten_output=True (default behavior). @@ -37,6 +39,7 @@ def test_iteration_with_flatten_output_enabled(): ) +@skip_if_database_unavailable() def test_iteration_with_flatten_output_disabled(): """ Test iteration node with flatten_output=False. @@ -65,6 +68,7 @@ def test_iteration_with_flatten_output_disabled(): ) +@skip_if_database_unavailable() def test_iteration_flatten_output_comparison(): """ Run both flatten_output configurations in parallel to verify the difference. diff --git a/api/tests/unit_tests/services/workflow/test_workflow_converter.py b/api/tests/unit_tests/services/workflow/test_workflow_converter.py index 63ce4c0c3c..8ea5754363 100644 --- a/api/tests/unit_tests/services/workflow/test_workflow_converter.py +++ b/api/tests/unit_tests/services/workflow/test_workflow_converter.py @@ -199,6 +199,7 @@ def test__convert_to_knowledge_retrieval_node_for_chatbot(): node = WorkflowConverter()._convert_to_knowledge_retrieval_node( new_app_mode=new_app_mode, dataset_config=dataset_config, model_config=model_config ) + assert node is not None assert node["data"]["type"] == "knowledge-retrieval" assert node["data"]["query_variable_selector"] == ["sys", "query"] @@ -231,6 +232,7 @@ def test__convert_to_knowledge_retrieval_node_for_workflow_app(): node = WorkflowConverter()._convert_to_knowledge_retrieval_node( new_app_mode=new_app_mode, dataset_config=dataset_config, model_config=model_config ) + assert node is not None assert node["data"]["type"] == "knowledge-retrieval" assert node["data"]["query_variable_selector"] == ["start", dataset_config.retrieve_config.query_variable] diff --git a/api/uv.lock b/api/uv.lock index db4827e143..6300adae61 100644 --- a/api/uv.lock +++ b/api/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.11, <3.13" resolution-markers = [ "python_full_version >= '3.12.4' and platform_python_implementation != 'PyPy' and sys_platform == 'linux'", @@ -48,7 +48,7 @@ wheels = [ [[package]] name = "aiohttp" -version = "3.13.0" +version = "3.13.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohappyeyeballs" }, @@ -59,42 +59,42 @@ dependencies = [ { name = "propcache" }, { name = "yarl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/62/f1/8515650ac3121a9e55c7b217c60e7fae3e0134b5acfe65691781b5356929/aiohttp-3.13.0.tar.gz", hash = "sha256:378dbc57dd8cf341ce243f13fa1fa5394d68e2e02c15cd5f28eae35a70ec7f67", size = 7832348, upload-time = "2025-10-06T19:58:48.089Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/ce/3b83ebba6b3207a7135e5fcaba49706f8a4b6008153b4e30540c982fae26/aiohttp-3.13.2.tar.gz", hash = "sha256:40176a52c186aefef6eb3cad2cdd30cd06e3afbe88fe8ab2af9c0b90f228daca", size = 7837994, upload-time = "2025-10-28T20:59:39.937Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/db/df80cacac46cd548a736c5535b13cc18925cf6f9f83cd128cf3839842219/aiohttp-3.13.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:99eb94e97a42367fef5fc11e28cb2362809d3e70837f6e60557816c7106e2e20", size = 741374, upload-time = "2025-10-06T19:55:13.095Z" }, - { url = "https://files.pythonhosted.org/packages/ae/f9/2d6d93fd57ab4726e18a7cdab083772eda8302d682620fbf2aef48322351/aiohttp-3.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4696665b2713021c6eba3e2b882a86013763b442577fe5d2056a42111e732eca", size = 494956, upload-time = "2025-10-06T19:55:14.687Z" }, - { url = "https://files.pythonhosted.org/packages/89/a6/e1c061b079fed04ffd6777950c82f2e8246fd08b7b3c4f56fdd47f697e5a/aiohttp-3.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3e6a38366f7f0d0f6ed7a1198055150c52fda552b107dad4785c0852ad7685d1", size = 491154, upload-time = "2025-10-06T19:55:16.661Z" }, - { url = "https://files.pythonhosted.org/packages/fe/4d/ee8913c0d2c7da37fdc98673a342b51611eaa0871682b37b8430084e35b5/aiohttp-3.13.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aab715b1a0c37f7f11f9f1f579c6fbaa51ef569e47e3c0a4644fba46077a9409", size = 1745707, upload-time = "2025-10-06T19:55:18.376Z" }, - { url = "https://files.pythonhosted.org/packages/f9/70/26b2c97e8fa68644aec43d788940984c5f3b53a8d1468d5baaa328f809c9/aiohttp-3.13.0-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7972c82bed87d7bd8e374b60a6b6e816d75ba4f7c2627c2d14eed216e62738e1", size = 1702404, upload-time = "2025-10-06T19:55:20.098Z" }, - { url = "https://files.pythonhosted.org/packages/65/1e/c8aa3c293a0e8b18968b1b88e9bd8fb269eb67eb7449f504a4c3e175b159/aiohttp-3.13.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca8313cb852af788c78d5afdea24c40172cbfff8b35e58b407467732fde20390", size = 1805519, upload-time = "2025-10-06T19:55:21.811Z" }, - { url = "https://files.pythonhosted.org/packages/51/b6/a3753fe86249eb441768658cfc00f8c4e0913b255c13be00ddb8192775e1/aiohttp-3.13.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c333a2385d2a6298265f4b3e960590f787311b87f6b5e6e21bb8375914ef504", size = 1893904, upload-time = "2025-10-06T19:55:23.462Z" }, - { url = "https://files.pythonhosted.org/packages/51/6d/7b1e020fe1d2a2be7cf0ce5e35922f345e3507cf337faa1a6563c42065c1/aiohttp-3.13.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cc6d5fc5edbfb8041d9607f6a417997fa4d02de78284d386bea7ab767b5ea4f3", size = 1745043, upload-time = "2025-10-06T19:55:25.208Z" }, - { url = "https://files.pythonhosted.org/packages/e6/df/aad5dce268f9d4f29759c3eeb5fb5995c569d76abb267468dc1075218d5b/aiohttp-3.13.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7ddedba3d0043349edc79df3dc2da49c72b06d59a45a42c1c8d987e6b8d175b8", size = 1604765, upload-time = "2025-10-06T19:55:27.157Z" }, - { url = "https://files.pythonhosted.org/packages/1c/19/a84a0e97b2da2224c8b85e1aef5cac834d07b2903c17bff1a6bdbc7041d2/aiohttp-3.13.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:23ca762140159417a6bbc959ca1927f6949711851e56f2181ddfe8d63512b5ad", size = 1721737, upload-time = "2025-10-06T19:55:28.854Z" }, - { url = "https://files.pythonhosted.org/packages/6c/61/ca6ad390128d964a08554fd63d6df5810fb5fbc7e599cb9e617f1729ae19/aiohttp-3.13.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:bfe824d6707a5dc3c5676685f624bc0c63c40d79dc0239a7fd6c034b98c25ebe", size = 1716052, upload-time = "2025-10-06T19:55:30.563Z" }, - { url = "https://files.pythonhosted.org/packages/2a/71/769e249e6625372c7d14be79b8b8c3b0592963a09793fb3d36758e60952c/aiohttp-3.13.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:3c11fa5dd2ef773a8a5a6daa40243d83b450915992eab021789498dc87acc114", size = 1783532, upload-time = "2025-10-06T19:55:32.798Z" }, - { url = "https://files.pythonhosted.org/packages/66/64/b9cd03cdbb629bc492e4a744fbe96550a8340b0cd7a0cc4a9c90cfecd8d3/aiohttp-3.13.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:00fdfe370cffede3163ba9d3f190b32c0cfc8c774f6f67395683d7b0e48cdb8a", size = 1593072, upload-time = "2025-10-06T19:55:34.686Z" }, - { url = "https://files.pythonhosted.org/packages/24/0e/87922c8cfdbd09f5e2197e9d87714a98c99c423560d44739e3af55400fe3/aiohttp-3.13.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:6475e42ef92717a678bfbf50885a682bb360a6f9c8819fb1a388d98198fdcb80", size = 1798613, upload-time = "2025-10-06T19:55:36.393Z" }, - { url = "https://files.pythonhosted.org/packages/c5/bb/a3adfe2af76e1ee9e3b5464522004b148b266bc99d7ec424ca7843d64a3c/aiohttp-3.13.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:77da5305a410910218b99f2a963092f4277d8a9c1f429c1ff1b026d1826bd0b6", size = 1737480, upload-time = "2025-10-06T19:55:38.043Z" }, - { url = "https://files.pythonhosted.org/packages/ad/53/e124dcbd64e6365602f3493fe37a11ca5b7ac0a40822a6e2bc8260cd08e0/aiohttp-3.13.0-cp311-cp311-win32.whl", hash = "sha256:2f9d9ea547618d907f2ee6670c9a951f059c5994e4b6de8dcf7d9747b420c820", size = 429824, upload-time = "2025-10-06T19:55:39.595Z" }, - { url = "https://files.pythonhosted.org/packages/3e/bd/485d98b372a2cd6998484a93ddd401ec6b6031657661c36846a10e2a1f6e/aiohttp-3.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f19f7798996d4458c669bd770504f710014926e9970f4729cf55853ae200469", size = 454137, upload-time = "2025-10-06T19:55:41.617Z" }, - { url = "https://files.pythonhosted.org/packages/3a/95/7e8bdfa6e79099a086d59d42589492f1fe9d29aae3cefb58b676015ce278/aiohttp-3.13.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1c272a9a18a5ecc48a7101882230046b83023bb2a662050ecb9bfcb28d9ab53a", size = 735585, upload-time = "2025-10-06T19:55:43.401Z" }, - { url = "https://files.pythonhosted.org/packages/9f/20/2f1d3ee06ee94eafe516810705219bff234d09f135d6951661661d5595ae/aiohttp-3.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:97891a23d7fd4e1afe9c2f4473e04595e4acb18e4733b910b6577b74e7e21985", size = 490613, upload-time = "2025-10-06T19:55:45.237Z" }, - { url = "https://files.pythonhosted.org/packages/74/15/ab8600ef6dc1dcd599009a81acfed2ea407037e654d32e47e344e0b08c34/aiohttp-3.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:475bd56492ce5f4cffe32b5533c6533ee0c406d1d0e6924879f83adcf51da0ae", size = 489750, upload-time = "2025-10-06T19:55:46.937Z" }, - { url = "https://files.pythonhosted.org/packages/33/59/752640c2b86ca987fe5703a01733b00d375e6cd2392bc7574489934e64e5/aiohttp-3.13.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c32ada0abb4bc94c30be2b681c42f058ab104d048da6f0148280a51ce98add8c", size = 1736812, upload-time = "2025-10-06T19:55:48.917Z" }, - { url = "https://files.pythonhosted.org/packages/3d/c6/dd6b86ddb852a7fdbcdc7a45b6bdc80178aef713c08279afcaee7a5a9f07/aiohttp-3.13.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4af1f8877ca46ecdd0bc0d4a6b66d4b2bddc84a79e2e8366bc0d5308e76bceb8", size = 1698535, upload-time = "2025-10-06T19:55:50.75Z" }, - { url = "https://files.pythonhosted.org/packages/33/e2/27c92d205b9e8cee7661670e8e9f187931b71e26d42796b153d2a0ba6949/aiohttp-3.13.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e04ab827ec4f775817736b20cdc8350f40327f9b598dec4e18c9ffdcbea88a93", size = 1766573, upload-time = "2025-10-06T19:55:53.106Z" }, - { url = "https://files.pythonhosted.org/packages/df/6a/1fc1ad71d130a30f7a207d8d958a41224c29b834463b5185efb2dbff6ad4/aiohttp-3.13.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a6d9487b9471ec36b0faedf52228cd732e89be0a2bbd649af890b5e2ce422353", size = 1865229, upload-time = "2025-10-06T19:55:55.01Z" }, - { url = "https://files.pythonhosted.org/packages/14/51/d0c1701a79fcb0109cff5304da16226581569b89a282d8e7f1549a7e3ec0/aiohttp-3.13.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e66c57416352f36bf98f6641ddadd47c93740a22af7150d3e9a1ef6e983f9a8", size = 1750379, upload-time = "2025-10-06T19:55:57.219Z" }, - { url = "https://files.pythonhosted.org/packages/ae/3d/2ec4b934f85856de1c0c18e90adc8902adadbfac2b3c0b831bfeb7214fc8/aiohttp-3.13.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:469167d5372f5bb3aedff4fc53035d593884fff2617a75317740e885acd48b04", size = 1560798, upload-time = "2025-10-06T19:55:58.888Z" }, - { url = "https://files.pythonhosted.org/packages/38/56/e23d9c3e13006e599fdce3851517c70279e177871e3e567d22cf3baf5d6c/aiohttp-3.13.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a9f3546b503975a69b547c9fd1582cad10ede1ce6f3e313a2f547c73a3d7814f", size = 1697552, upload-time = "2025-10-06T19:56:01.172Z" }, - { url = "https://files.pythonhosted.org/packages/56/cb/caa32c2ccaeca0a3dc39129079fd2ad02f9406c3a5f7924340435b87d4cd/aiohttp-3.13.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6b4174fcec98601f0cfdf308ee29a6ae53c55f14359e848dab4e94009112ee7d", size = 1718609, upload-time = "2025-10-06T19:56:03.102Z" }, - { url = "https://files.pythonhosted.org/packages/fb/c0/5911856fef9e40fd1ccbb8c54a90116875d5753a92c1cac66ce2059b390d/aiohttp-3.13.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a533873a7a4ec2270fb362ee5a0d3b98752e4e1dc9042b257cd54545a96bd8ed", size = 1735887, upload-time = "2025-10-06T19:56:04.841Z" }, - { url = "https://files.pythonhosted.org/packages/0e/48/8d6f4757a24c02f0a454c043556593a00645d10583859f7156db44d8b7d3/aiohttp-3.13.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:ce887c5e54411d607ee0959cac15bb31d506d86a9bcaddf0b7e9d63325a7a802", size = 1553079, upload-time = "2025-10-06T19:56:07.197Z" }, - { url = "https://files.pythonhosted.org/packages/39/fa/e82c9445e40b50e46770702b5b6ca2f767966d53e1a5eef03583ceac6df6/aiohttp-3.13.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d871f6a30d43e32fc9252dc7b9febe1a042b3ff3908aa83868d7cf7c9579a59b", size = 1762750, upload-time = "2025-10-06T19:56:09.376Z" }, - { url = "https://files.pythonhosted.org/packages/3d/e6/9d30554e7f1e700bfeae4ab6b153d5dc7441606a9ec5e929288fa93a1477/aiohttp-3.13.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:222c828243b4789d79a706a876910f656fad4381661691220ba57b2ab4547865", size = 1717461, upload-time = "2025-10-06T19:56:11.551Z" }, - { url = "https://files.pythonhosted.org/packages/1f/e5/29cca547990a59ea54f0674fc01de98519fc628cfceeab6175711750eca7/aiohttp-3.13.0-cp312-cp312-win32.whl", hash = "sha256:682d2e434ff2f1108314ff7f056ce44e457f12dbed0249b24e106e385cf154b9", size = 424633, upload-time = "2025-10-06T19:56:13.316Z" }, - { url = "https://files.pythonhosted.org/packages/8b/68/46dd042d7bc62eab30bafdb8569f55ef125c3a88bb174270324224f8df56/aiohttp-3.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:0a2be20eb23888df130214b91c262a90e2de1553d6fb7de9e9010cec994c0ff2", size = 451401, upload-time = "2025-10-06T19:56:15.188Z" }, + { url = "https://files.pythonhosted.org/packages/35/74/b321e7d7ca762638cdf8cdeceb39755d9c745aff7a64c8789be96ddf6e96/aiohttp-3.13.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4647d02df098f6434bafd7f32ad14942f05a9caa06c7016fdcc816f343997dd0", size = 743409, upload-time = "2025-10-28T20:56:00.354Z" }, + { url = "https://files.pythonhosted.org/packages/99/3d/91524b905ec473beaf35158d17f82ef5a38033e5809fe8742e3657cdbb97/aiohttp-3.13.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e3403f24bcb9c3b29113611c3c16a2a447c3953ecf86b79775e7be06f7ae7ccb", size = 497006, upload-time = "2025-10-28T20:56:01.85Z" }, + { url = "https://files.pythonhosted.org/packages/eb/d3/7f68bc02a67716fe80f063e19adbd80a642e30682ce74071269e17d2dba1/aiohttp-3.13.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:43dff14e35aba17e3d6d5ba628858fb8cb51e30f44724a2d2f0c75be492c55e9", size = 493195, upload-time = "2025-10-28T20:56:03.314Z" }, + { url = "https://files.pythonhosted.org/packages/98/31/913f774a4708775433b7375c4f867d58ba58ead833af96c8af3621a0d243/aiohttp-3.13.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2a9ea08e8c58bb17655630198833109227dea914cd20be660f52215f6de5613", size = 1747759, upload-time = "2025-10-28T20:56:04.904Z" }, + { url = "https://files.pythonhosted.org/packages/e8/63/04efe156f4326f31c7c4a97144f82132c3bb21859b7bb84748d452ccc17c/aiohttp-3.13.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53b07472f235eb80e826ad038c9d106c2f653584753f3ddab907c83f49eedead", size = 1704456, upload-time = "2025-10-28T20:56:06.986Z" }, + { url = "https://files.pythonhosted.org/packages/8e/02/4e16154d8e0a9cf4ae76f692941fd52543bbb148f02f098ca73cab9b1c1b/aiohttp-3.13.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e736c93e9c274fce6419af4aac199984d866e55f8a4cec9114671d0ea9688780", size = 1807572, upload-time = "2025-10-28T20:56:08.558Z" }, + { url = "https://files.pythonhosted.org/packages/34/58/b0583defb38689e7f06798f0285b1ffb3a6fb371f38363ce5fd772112724/aiohttp-3.13.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ff5e771f5dcbc81c64898c597a434f7682f2259e0cd666932a913d53d1341d1a", size = 1895954, upload-time = "2025-10-28T20:56:10.545Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f3/083907ee3437425b4e376aa58b2c915eb1a33703ec0dc30040f7ae3368c6/aiohttp-3.13.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3b6fb0c207cc661fa0bf8c66d8d9b657331ccc814f4719468af61034b478592", size = 1747092, upload-time = "2025-10-28T20:56:12.118Z" }, + { url = "https://files.pythonhosted.org/packages/ac/61/98a47319b4e425cc134e05e5f3fc512bf9a04bf65aafd9fdcda5d57ec693/aiohttp-3.13.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:97a0895a8e840ab3520e2288db7cace3a1981300d48babeb50e7425609e2e0ab", size = 1606815, upload-time = "2025-10-28T20:56:14.191Z" }, + { url = "https://files.pythonhosted.org/packages/97/4b/e78b854d82f66bb974189135d31fce265dee0f5344f64dd0d345158a5973/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9e8f8afb552297aca127c90cb840e9a1d4bfd6a10d7d8f2d9176e1acc69bad30", size = 1723789, upload-time = "2025-10-28T20:56:16.101Z" }, + { url = "https://files.pythonhosted.org/packages/ed/fc/9d2ccc794fc9b9acd1379d625c3a8c64a45508b5091c546dea273a41929e/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ed2f9c7216e53c3df02264f25d824b079cc5914f9e2deba94155190ef648ee40", size = 1718104, upload-time = "2025-10-28T20:56:17.655Z" }, + { url = "https://files.pythonhosted.org/packages/66/65/34564b8765ea5c7d79d23c9113135d1dd3609173da13084830f1507d56cf/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:99c5280a329d5fa18ef30fd10c793a190d996567667908bef8a7f81f8202b948", size = 1785584, upload-time = "2025-10-28T20:56:19.238Z" }, + { url = "https://files.pythonhosted.org/packages/30/be/f6a7a426e02fc82781afd62016417b3948e2207426d90a0e478790d1c8a4/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:2ca6ffef405fc9c09a746cb5d019c1672cd7f402542e379afc66b370833170cf", size = 1595126, upload-time = "2025-10-28T20:56:20.836Z" }, + { url = "https://files.pythonhosted.org/packages/e5/c7/8e22d5d28f94f67d2af496f14a83b3c155d915d1fe53d94b66d425ec5b42/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:47f438b1a28e926c37632bff3c44df7d27c9b57aaf4e34b1def3c07111fdb782", size = 1800665, upload-time = "2025-10-28T20:56:22.922Z" }, + { url = "https://files.pythonhosted.org/packages/d1/11/91133c8b68b1da9fc16555706aa7276fdf781ae2bb0876c838dd86b8116e/aiohttp-3.13.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9acda8604a57bb60544e4646a4615c1866ee6c04a8edef9b8ee6fd1d8fa2ddc8", size = 1739532, upload-time = "2025-10-28T20:56:25.924Z" }, + { url = "https://files.pythonhosted.org/packages/17/6b/3747644d26a998774b21a616016620293ddefa4d63af6286f389aedac844/aiohttp-3.13.2-cp311-cp311-win32.whl", hash = "sha256:868e195e39b24aaa930b063c08bb0c17924899c16c672a28a65afded9c46c6ec", size = 431876, upload-time = "2025-10-28T20:56:27.524Z" }, + { url = "https://files.pythonhosted.org/packages/c3/63/688462108c1a00eb9f05765331c107f95ae86f6b197b865d29e930b7e462/aiohttp-3.13.2-cp311-cp311-win_amd64.whl", hash = "sha256:7fd19df530c292542636c2a9a85854fab93474396a52f1695e799186bbd7f24c", size = 456205, upload-time = "2025-10-28T20:56:29.062Z" }, + { url = "https://files.pythonhosted.org/packages/29/9b/01f00e9856d0a73260e86dd8ed0c2234a466c5c1712ce1c281548df39777/aiohttp-3.13.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b1e56bab2e12b2b9ed300218c351ee2a3d8c8fdab5b1ec6193e11a817767e47b", size = 737623, upload-time = "2025-10-28T20:56:30.797Z" }, + { url = "https://files.pythonhosted.org/packages/5a/1b/4be39c445e2b2bd0aab4ba736deb649fabf14f6757f405f0c9685019b9e9/aiohttp-3.13.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:364e25edaabd3d37b1db1f0cbcee8c73c9a3727bfa262b83e5e4cf3489a2a9dc", size = 492664, upload-time = "2025-10-28T20:56:32.708Z" }, + { url = "https://files.pythonhosted.org/packages/28/66/d35dcfea8050e131cdd731dff36434390479b4045a8d0b9d7111b0a968f1/aiohttp-3.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c5c94825f744694c4b8db20b71dba9a257cd2ba8e010a803042123f3a25d50d7", size = 491808, upload-time = "2025-10-28T20:56:34.57Z" }, + { url = "https://files.pythonhosted.org/packages/00/29/8e4609b93e10a853b65f8291e64985de66d4f5848c5637cddc70e98f01f8/aiohttp-3.13.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba2715d842ffa787be87cbfce150d5e88c87a98e0b62e0f5aa489169a393dbbb", size = 1738863, upload-time = "2025-10-28T20:56:36.377Z" }, + { url = "https://files.pythonhosted.org/packages/9d/fa/4ebdf4adcc0def75ced1a0d2d227577cd7b1b85beb7edad85fcc87693c75/aiohttp-3.13.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:585542825c4bc662221fb257889e011a5aa00f1ae4d75d1d246a5225289183e3", size = 1700586, upload-time = "2025-10-28T20:56:38.034Z" }, + { url = "https://files.pythonhosted.org/packages/da/04/73f5f02ff348a3558763ff6abe99c223381b0bace05cd4530a0258e52597/aiohttp-3.13.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:39d02cb6025fe1aabca329c5632f48c9532a3dabccd859e7e2f110668972331f", size = 1768625, upload-time = "2025-10-28T20:56:39.75Z" }, + { url = "https://files.pythonhosted.org/packages/f8/49/a825b79ffec124317265ca7d2344a86bcffeb960743487cb11988ffb3494/aiohttp-3.13.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e67446b19e014d37342f7195f592a2a948141d15a312fe0e700c2fd2f03124f6", size = 1867281, upload-time = "2025-10-28T20:56:41.471Z" }, + { url = "https://files.pythonhosted.org/packages/b9/48/adf56e05f81eac31edcfae45c90928f4ad50ef2e3ea72cb8376162a368f8/aiohttp-3.13.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4356474ad6333e41ccefd39eae869ba15a6c5299c9c01dfdcfdd5c107be4363e", size = 1752431, upload-time = "2025-10-28T20:56:43.162Z" }, + { url = "https://files.pythonhosted.org/packages/30/ab/593855356eead019a74e862f21523db09c27f12fd24af72dbc3555b9bfd9/aiohttp-3.13.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:eeacf451c99b4525f700f078becff32c32ec327b10dcf31306a8a52d78166de7", size = 1562846, upload-time = "2025-10-28T20:56:44.85Z" }, + { url = "https://files.pythonhosted.org/packages/39/0f/9f3d32271aa8dc35036e9668e31870a9d3b9542dd6b3e2c8a30931cb27ae/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d8a9b889aeabd7a4e9af0b7f4ab5ad94d42e7ff679aaec6d0db21e3b639ad58d", size = 1699606, upload-time = "2025-10-28T20:56:46.519Z" }, + { url = "https://files.pythonhosted.org/packages/2c/3c/52d2658c5699b6ef7692a3f7128b2d2d4d9775f2a68093f74bca06cf01e1/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fa89cb11bc71a63b69568d5b8a25c3ca25b6d54c15f907ca1c130d72f320b76b", size = 1720663, upload-time = "2025-10-28T20:56:48.528Z" }, + { url = "https://files.pythonhosted.org/packages/9b/d4/8f8f3ff1fb7fb9e3f04fcad4e89d8a1cd8fc7d05de67e3de5b15b33008ff/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8aa7c807df234f693fed0ecd507192fc97692e61fee5702cdc11155d2e5cadc8", size = 1737939, upload-time = "2025-10-28T20:56:50.77Z" }, + { url = "https://files.pythonhosted.org/packages/03/d3/ddd348f8a27a634daae39a1b8e291ff19c77867af438af844bf8b7e3231b/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:9eb3e33fdbe43f88c3c75fa608c25e7c47bbd80f48d012763cb67c47f39a7e16", size = 1555132, upload-time = "2025-10-28T20:56:52.568Z" }, + { url = "https://files.pythonhosted.org/packages/39/b8/46790692dc46218406f94374903ba47552f2f9f90dad554eed61bfb7b64c/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9434bc0d80076138ea986833156c5a48c9c7a8abb0c96039ddbb4afc93184169", size = 1764802, upload-time = "2025-10-28T20:56:54.292Z" }, + { url = "https://files.pythonhosted.org/packages/ba/e4/19ce547b58ab2a385e5f0b8aa3db38674785085abcf79b6e0edd1632b12f/aiohttp-3.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ff15c147b2ad66da1f2cbb0622313f2242d8e6e8f9b79b5206c84523a4473248", size = 1719512, upload-time = "2025-10-28T20:56:56.428Z" }, + { url = "https://files.pythonhosted.org/packages/70/30/6355a737fed29dcb6dfdd48682d5790cb5eab050f7b4e01f49b121d3acad/aiohttp-3.13.2-cp312-cp312-win32.whl", hash = "sha256:27e569eb9d9e95dbd55c0fc3ec3a9335defbf1d8bc1d20171a49f3c4c607b93e", size = 426690, upload-time = "2025-10-28T20:56:58.736Z" }, + { url = "https://files.pythonhosted.org/packages/0a/0d/b10ac09069973d112de6ef980c1f6bb31cb7dcd0bc363acbdad58f927873/aiohttp-3.13.2-cp312-cp312-win_amd64.whl", hash = "sha256:8709a0f05d59a71f33fd05c17fc11fcb8c30140506e13c2f5e8ee1b8964e1b45", size = 453465, upload-time = "2025-10-28T20:57:00.795Z" }, ] [[package]] @@ -124,21 +124,21 @@ wheels = [ [[package]] name = "alembic" -version = "1.17.0" +version = "1.17.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mako" }, { name = "sqlalchemy" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6b/45/6f4555f2039f364c3ce31399529dcf48dd60726ff3715ad67f547d87dfd2/alembic-1.17.0.tar.gz", hash = "sha256:4652a0b3e19616b57d652b82bfa5e38bf5dbea0813eed971612671cb9e90c0fe", size = 1975526, upload-time = "2025-10-11T18:40:13.585Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6e/b6/2a81d7724c0c124edc5ec7a167e85858b6fd31b9611c6fb8ecf617b7e2d3/alembic-1.17.1.tar.gz", hash = "sha256:8a289f6778262df31571d29cca4c7fbacd2f0f582ea0816f4c399b6da7528486", size = 1981285, upload-time = "2025-10-29T00:23:16.667Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/1f/38e29b06bfed7818ebba1f84904afdc8153ef7b6c7e0d8f3bc6643f5989c/alembic-1.17.0-py3-none-any.whl", hash = "sha256:80523bc437d41b35c5db7e525ad9d908f79de65c27d6a5a5eab6df348a352d99", size = 247449, upload-time = "2025-10-11T18:40:16.288Z" }, + { url = "https://files.pythonhosted.org/packages/a5/32/7df1d81ec2e50fb661944a35183d87e62d3f6c6d9f8aff64a4f245226d55/alembic-1.17.1-py3-none-any.whl", hash = "sha256:cbc2386e60f89608bb63f30d2d6cc66c7aaed1fe105bd862828600e5ad167023", size = 247848, upload-time = "2025-10-29T00:23:18.79Z" }, ] [[package]] name = "alibabacloud-credentials" -version = "1.0.2" +version = "1.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiofiles" }, @@ -146,7 +146,10 @@ dependencies = [ { name = "alibabacloud-tea" }, { name = "apscheduler" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b7/0c/1b0c5f4c2170165719b336616ac0a88f1666fd8690fda41e2e8ae3139fd9/alibabacloud-credentials-1.0.2.tar.gz", hash = "sha256:d2368eb70bd02db9143b2bf531a27a6fecd2cde9601db6e5b48cd6dbe25720ce", size = 30804, upload-time = "2025-05-06T12:30:35.46Z" } +sdist = { url = "https://files.pythonhosted.org/packages/df/82/45ec98bd19387507cf058ce47f62d6fea288bf0511c5a101b832e13d3edd/alibabacloud-credentials-1.0.3.tar.gz", hash = "sha256:9d8707e96afc6f348e23f5677ed15a21c2dfce7cfe6669776548ee4c80e1dfaf", size = 35831, upload-time = "2025-10-14T06:39:58.97Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/df/dbd9ae9d531a40d5613573c5a22ef774ecfdcaa0dc43aad42189f89c04ce/alibabacloud_credentials-1.0.3-py3-none-any.whl", hash = "sha256:30c8302f204b663c655d97e1c283ee9f9f84a6257d7901b931477d6cf34445a8", size = 41875, upload-time = "2025-10-14T06:39:58.029Z" }, +] [[package]] name = "alibabacloud-credentials-api" @@ -330,11 +333,11 @@ wheels = [ [[package]] name = "annotated-doc" -version = "0.0.3" +version = "0.0.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d7/a6/dc46877b911e40c00d395771ea710d5e77b6de7bacd5fdcd78d70cc5a48f/annotated_doc-0.0.3.tar.gz", hash = "sha256:e18370014c70187422c33e945053ff4c286f453a984eba84d0dbfa0c935adeda", size = 5535, upload-time = "2025-10-24T14:57:10.718Z" } +sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/02/b7/cf592cb5de5cb3bade3357f8d2cf42bf103bbe39f459824b4939fd212911/annotated_doc-0.0.3-py3-none-any.whl", hash = "sha256:348ec6664a76f1fd3be81f43dffbee4c7e8ce931ba71ec67cc7f4ade7fbbb580", size = 5488, upload-time = "2025-10-24T14:57:09.462Z" }, + { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, ] [[package]] @@ -362,14 +365,14 @@ wheels = [ [[package]] name = "apscheduler" -version = "3.11.0" +version = "3.11.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "tzlocal" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4e/00/6d6814ddc19be2df62c8c898c4df6b5b1914f3bd024b780028caa392d186/apscheduler-3.11.0.tar.gz", hash = "sha256:4c622d250b0955a65d5d0eb91c33e6d43fd879834bf541e0a18661ae60460133", size = 107347, upload-time = "2024-11-24T19:39:26.463Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/81/192db4f8471de5bc1f0d098783decffb1e6e69c4f8b4bc6711094691950b/apscheduler-3.11.1.tar.gz", hash = "sha256:0db77af6400c84d1747fe98a04b8b58f0080c77d11d338c4f507a9752880f221", size = 108044, upload-time = "2025-10-31T18:55:42.819Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/ae/9a053dd9229c0fde6b1f1f33f609ccff1ee79ddda364c756a924c6d8563b/APScheduler-3.11.0-py3-none-any.whl", hash = "sha256:fc134ca32e50f5eadcc4938e3a4545ab19131435e851abb40b34d63d5141c6da", size = 64004, upload-time = "2024-11-24T19:39:24.442Z" }, + { url = "https://files.pythonhosted.org/packages/58/9f/d3c76f76c73fcc959d28e9def45b8b1cc3d7722660c5003b19c1022fd7f4/apscheduler-3.11.1-py3-none-any.whl", hash = "sha256:6162cb5683cb09923654fa9bdd3130c4be4bfda6ad8990971c9597ecd52965d2", size = 64278, upload-time = "2025-10-31T18:55:41.186Z" }, ] [[package]] @@ -431,16 +434,15 @@ wheels = [ [[package]] name = "azure-core" -version = "1.35.1" +version = "1.36.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "requests" }, - { name = "six" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/15/6b/2653adc0f33adba8f11b1903701e6b1c10d34ce5d8e25dfa13a422f832b0/azure_core-1.35.1.tar.gz", hash = "sha256:435d05d6df0fff2f73fb3c15493bb4721ede14203f1ff1382aa6b6b2bdd7e562", size = 345290, upload-time = "2025-09-11T22:58:04.481Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0a/c4/d4ff3bc3ddf155156460bff340bbe9533f99fac54ddea165f35a8619f162/azure_core-1.36.0.tar.gz", hash = "sha256:22e5605e6d0bf1d229726af56d9e92bc37b6e726b141a18be0b4d424131741b7", size = 351139, upload-time = "2025-10-15T00:33:49.083Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/27/52/805980aa1ba18282077c484dba634ef0ede1e84eec8be9c92b2e162d0ed6/azure_core-1.35.1-py3-none-any.whl", hash = "sha256:12da0c9e08e48e198f9158b56ddbe33b421477e1dc98c2e1c8f9e254d92c468b", size = 211800, upload-time = "2025-09-11T22:58:06.281Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3c/b90d5afc2e47c4a45f4bba00f9c3193b0417fad5ad3bb07869f9d12832aa/azure_core-1.36.0-py3-none-any.whl", hash = "sha256:fee9923a3a753e94a259563429f3644aaf05c486d45b1215d098115102d91d3b", size = 213302, upload-time = "2025-10-15T00:33:51.058Z" }, ] [[package]] @@ -496,16 +498,16 @@ wheels = [ [[package]] name = "bce-python-sdk" -version = "0.9.46" +version = "0.9.52" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "future" }, { name = "pycryptodome" }, { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/53/57/f98bc15c12cc022ef195f689ee57ed61d8a8677bda3089c4d58fb1872d45/bce_python_sdk-0.9.46.tar.gz", hash = "sha256:4bf01b22e6d172ccd94aa201f8bc6f2a98d0da4784160e77cfacfcc71c2686be", size = 253806, upload-time = "2025-09-15T06:51:52.753Z" } +sdist = { url = "https://files.pythonhosted.org/packages/83/0a/e49d7774ce186fd51c611a2533baff8e7db0d22baef12223773f389b06b1/bce_python_sdk-0.9.52.tar.gz", hash = "sha256:dd54213ac25b8b1260fb45f1fbc0f2b1c53bb0f9f594258ca0479f1fc85f7405", size = 275614, upload-time = "2025-11-12T09:09:28.227Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/f5/20e9ab324b22a77970c57bc8267e586e85e2aa1277d80f2c58ca8a39a13e/bce_python_sdk-0.9.46-py3-none-any.whl", hash = "sha256:655074da6592ce8b036f605d9a272bfdcd1f515eb2f8e3f0333bb7cc62f700cb", size = 352622, upload-time = "2025-09-15T06:51:50.811Z" }, + { url = "https://files.pythonhosted.org/packages/a3/d0/f57f75c96e8bb72144845f7208f712a54454f1d063d5ef02f1e9ea476b79/bce_python_sdk-0.9.52-py3-none-any.whl", hash = "sha256:f1ed39aa61c2d4a002cd2345e01dd92ac55c75960440d76163ead419b3b550e7", size = 390401, upload-time = "2025-11-12T09:09:26.663Z" }, ] [[package]] @@ -596,16 +598,16 @@ wheels = [ [[package]] name = "boto3-stubs" -version = "1.40.51" +version = "1.40.72" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "botocore-stubs" }, { name = "types-s3transfer" }, { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/82/4d/b07f9ee0fe432fa8ec6dc368ee7a0409e2b6d9df2c5a2a88265c9b6fd878/boto3_stubs-1.40.51.tar.gz", hash = "sha256:0281e820813a310954e15fb7c1d470c24c34c1cccc7b1ddad977fa293a1080a9", size = 100890, upload-time = "2025-10-13T19:25:36.126Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4f/db/90881ac0b8afdfa9b95ae66b4094ed33f88b6086a8945229a95156257ca9/boto3_stubs-1.40.72.tar.gz", hash = "sha256:cbcf7b6e8a7f54e77fcb2b8d00041993fe4f76554c716b1d290e48650d569cd0", size = 99406, upload-time = "2025-11-12T20:36:23.685Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/2e/4476431f11fc3bf7a7e0f4f5c275f17607aa127da7c0d8685a4dc6bf6291/boto3_stubs-1.40.51-py3-none-any.whl", hash = "sha256:896d0ffaa298ce1749eea1a54946320a0f4e07c6912f8e1f8c0744a708ee25a4", size = 69709, upload-time = "2025-10-13T19:25:23.116Z" }, + { url = "https://files.pythonhosted.org/packages/7a/ea/0f2814edc61c2e6fedd9b7a7fbc55149d1ffac7f7cd02d04cc51d1a3b1ca/boto3_stubs-1.40.72-py3-none-any.whl", hash = "sha256:4807f334b87914f75db3c6cd85f7eb706b5777e6ddaf117f8d63219cc01fb4b2", size = 68982, upload-time = "2025-11-12T20:36:12.855Z" }, ] [package.optional-dependencies] @@ -629,14 +631,14 @@ wheels = [ [[package]] name = "botocore-stubs" -version = "1.40.51" +version = "1.40.72" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "types-awscrt" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/ca/429fadb6e037cb7b300d508a0b24b59a71961db12539e21749cbec7e7422/botocore_stubs-1.40.51.tar.gz", hash = "sha256:8ddbeb1f68e39382533bb53f3b968d29e640406016af00ad8bbd6e1a2bd59536", size = 42249, upload-time = "2025-10-13T20:26:57.777Z" } +sdist = { url = "https://files.pythonhosted.org/packages/51/c9/17d5337cc81f107fd0a6d04b5b20c75bea0fe8b77bcc644de324487f8310/botocore_stubs-1.40.72.tar.gz", hash = "sha256:6d268d0dd9366dc15e7af52cbd0d3a3f3cd14e2191de0e280badc69f8d34708c", size = 42208, upload-time = "2025-11-12T21:23:53.344Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/b9/5f1296bc46f293f284a1a6259f3c1f21f4161088dc6f70428698841b56a7/botocore_stubs-1.40.51-py3-none-any.whl", hash = "sha256:9a028104979205c9be0b68bb59ba679e4fe452e017eec3d40f6c2b41c590a73c", size = 66541, upload-time = "2025-10-13T20:26:55.559Z" }, + { url = "https://files.pythonhosted.org/packages/3c/99/9387b31ec1d980af83ca097366cc10714757d2c1390b4ac6b692c07a9e7f/botocore_stubs-1.40.72-py3-none-any.whl", hash = "sha256:1166a81074714312d3843be3f879d16966cbffdc440ab61ad6f0cd8922fde679", size = 66542, upload-time = "2025-11-12T21:23:51.018Z" }, ] [[package]] @@ -777,11 +779,11 @@ wheels = [ [[package]] name = "certifi" -version = "2025.10.5" +version = "2025.11.12" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4c/5b/b6ce21586237c77ce67d01dc5507039d444b630dd76611bbca2d8e5dcd91/certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43", size = 164519, upload-time = "2025-10-05T04:12:15.808Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/8c/58f469717fa48465e4a50c014a0400602d3c437d7c0c468e17ada824da3a/certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316", size = 160538, upload-time = "2025-11-12T02:54:51.517Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/37/af0d2ef3967ac0d6113837b44a4f0bfe1328c2b9763bd5b1744520e5cfed/certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de", size = 163286, upload-time = "2025-10-05T04:12:14.03Z" }, + { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" }, ] [[package]] @@ -831,33 +833,43 @@ wheels = [ [[package]] name = "charset-normalizer" -version = "3.4.3" +version = "3.4.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/2d/5fd176ceb9b2fc619e63405525573493ca23441330fcdaee6bef9460e924/charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14", size = 122371, upload-time = "2025-08-09T07:57:28.46Z" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/b5/991245018615474a60965a7c9cd2b4efbaabd16d582a5547c47ee1c7730b/charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b", size = 204483, upload-time = "2025-08-09T07:55:53.12Z" }, - { url = "https://files.pythonhosted.org/packages/c7/2a/ae245c41c06299ec18262825c1569c5d3298fc920e4ddf56ab011b417efd/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64", size = 145520, upload-time = "2025-08-09T07:55:54.712Z" }, - { url = "https://files.pythonhosted.org/packages/3a/a4/b3b6c76e7a635748c4421d2b92c7b8f90a432f98bda5082049af37ffc8e3/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91", size = 158876, upload-time = "2025-08-09T07:55:56.024Z" }, - { url = "https://files.pythonhosted.org/packages/e2/e6/63bb0e10f90a8243c5def74b5b105b3bbbfb3e7bb753915fe333fb0c11ea/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f", size = 156083, upload-time = "2025-08-09T07:55:57.582Z" }, - { url = "https://files.pythonhosted.org/packages/87/df/b7737ff046c974b183ea9aa111b74185ac8c3a326c6262d413bd5a1b8c69/charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07", size = 150295, upload-time = "2025-08-09T07:55:59.147Z" }, - { url = "https://files.pythonhosted.org/packages/61/f1/190d9977e0084d3f1dc169acd060d479bbbc71b90bf3e7bf7b9927dec3eb/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30", size = 148379, upload-time = "2025-08-09T07:56:00.364Z" }, - { url = "https://files.pythonhosted.org/packages/4c/92/27dbe365d34c68cfe0ca76f1edd70e8705d82b378cb54ebbaeabc2e3029d/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14", size = 160018, upload-time = "2025-08-09T07:56:01.678Z" }, - { url = "https://files.pythonhosted.org/packages/99/04/baae2a1ea1893a01635d475b9261c889a18fd48393634b6270827869fa34/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c", size = 157430, upload-time = "2025-08-09T07:56:02.87Z" }, - { url = "https://files.pythonhosted.org/packages/2f/36/77da9c6a328c54d17b960c89eccacfab8271fdaaa228305330915b88afa9/charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae", size = 151600, upload-time = "2025-08-09T07:56:04.089Z" }, - { url = "https://files.pythonhosted.org/packages/64/d4/9eb4ff2c167edbbf08cdd28e19078bf195762e9bd63371689cab5ecd3d0d/charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849", size = 99616, upload-time = "2025-08-09T07:56:05.658Z" }, - { url = "https://files.pythonhosted.org/packages/f4/9c/996a4a028222e7761a96634d1820de8a744ff4327a00ada9c8942033089b/charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c", size = 107108, upload-time = "2025-08-09T07:56:07.176Z" }, - { url = "https://files.pythonhosted.org/packages/e9/5e/14c94999e418d9b87682734589404a25854d5f5d0408df68bc15b6ff54bb/charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1", size = 205655, upload-time = "2025-08-09T07:56:08.475Z" }, - { url = "https://files.pythonhosted.org/packages/7d/a8/c6ec5d389672521f644505a257f50544c074cf5fc292d5390331cd6fc9c3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884", size = 146223, upload-time = "2025-08-09T07:56:09.708Z" }, - { url = "https://files.pythonhosted.org/packages/fc/eb/a2ffb08547f4e1e5415fb69eb7db25932c52a52bed371429648db4d84fb1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018", size = 159366, upload-time = "2025-08-09T07:56:11.326Z" }, - { url = "https://files.pythonhosted.org/packages/82/10/0fd19f20c624b278dddaf83b8464dcddc2456cb4b02bb902a6da126b87a1/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392", size = 157104, upload-time = "2025-08-09T07:56:13.014Z" }, - { url = "https://files.pythonhosted.org/packages/16/ab/0233c3231af734f5dfcf0844aa9582d5a1466c985bbed6cedab85af9bfe3/charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f", size = 151830, upload-time = "2025-08-09T07:56:14.428Z" }, - { url = "https://files.pythonhosted.org/packages/ae/02/e29e22b4e02839a0e4a06557b1999d0a47db3567e82989b5bb21f3fbbd9f/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154", size = 148854, upload-time = "2025-08-09T07:56:16.051Z" }, - { url = "https://files.pythonhosted.org/packages/05/6b/e2539a0a4be302b481e8cafb5af8792da8093b486885a1ae4d15d452bcec/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491", size = 160670, upload-time = "2025-08-09T07:56:17.314Z" }, - { url = "https://files.pythonhosted.org/packages/31/e7/883ee5676a2ef217a40ce0bffcc3d0dfbf9e64cbcfbdf822c52981c3304b/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93", size = 158501, upload-time = "2025-08-09T07:56:18.641Z" }, - { url = "https://files.pythonhosted.org/packages/c1/35/6525b21aa0db614cf8b5792d232021dca3df7f90a1944db934efa5d20bb1/charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f", size = 153173, upload-time = "2025-08-09T07:56:20.289Z" }, - { url = "https://files.pythonhosted.org/packages/50/ee/f4704bad8201de513fdc8aac1cabc87e38c5818c93857140e06e772b5892/charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37", size = 99822, upload-time = "2025-08-09T07:56:21.551Z" }, - { url = "https://files.pythonhosted.org/packages/39/f5/3b3836ca6064d0992c58c7561c6b6eee1b3892e9665d650c803bd5614522/charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc", size = 107543, upload-time = "2025-08-09T07:56:23.115Z" }, - { url = "https://files.pythonhosted.org/packages/8a/1f/f041989e93b001bc4e44bb1669ccdcf54d3f00e628229a85b08d330615c5/charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a", size = 53175, upload-time = "2025-08-09T07:57:26.864Z" }, + { url = "https://files.pythonhosted.org/packages/ed/27/c6491ff4954e58a10f69ad90aca8a1b6fe9c5d3c6f380907af3c37435b59/charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", size = 206988, upload-time = "2025-10-14T04:40:33.79Z" }, + { url = "https://files.pythonhosted.org/packages/94/59/2e87300fe67ab820b5428580a53cad894272dbb97f38a7a814a2a1ac1011/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", size = 147324, upload-time = "2025-10-14T04:40:34.961Z" }, + { url = "https://files.pythonhosted.org/packages/07/fb/0cf61dc84b2b088391830f6274cb57c82e4da8bbc2efeac8c025edb88772/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", size = 142742, upload-time = "2025-10-14T04:40:36.105Z" }, + { url = "https://files.pythonhosted.org/packages/62/8b/171935adf2312cd745d290ed93cf16cf0dfe320863ab7cbeeae1dcd6535f/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc", size = 160863, upload-time = "2025-10-14T04:40:37.188Z" }, + { url = "https://files.pythonhosted.org/packages/09/73/ad875b192bda14f2173bfc1bc9a55e009808484a4b256748d931b6948442/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897", size = 157837, upload-time = "2025-10-14T04:40:38.435Z" }, + { url = "https://files.pythonhosted.org/packages/6d/fc/de9cce525b2c5b94b47c70a4b4fb19f871b24995c728e957ee68ab1671ea/charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381", size = 151550, upload-time = "2025-10-14T04:40:40.053Z" }, + { url = "https://files.pythonhosted.org/packages/55/c2/43edd615fdfba8c6f2dfbd459b25a6b3b551f24ea21981e23fb768503ce1/charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815", size = 149162, upload-time = "2025-10-14T04:40:41.163Z" }, + { url = "https://files.pythonhosted.org/packages/03/86/bde4ad8b4d0e9429a4e82c1e8f5c659993a9a863ad62c7df05cf7b678d75/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0", size = 150019, upload-time = "2025-10-14T04:40:42.276Z" }, + { url = "https://files.pythonhosted.org/packages/1f/86/a151eb2af293a7e7bac3a739b81072585ce36ccfb4493039f49f1d3cae8c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161", size = 143310, upload-time = "2025-10-14T04:40:43.439Z" }, + { url = "https://files.pythonhosted.org/packages/b5/fe/43dae6144a7e07b87478fdfc4dbe9efd5defb0e7ec29f5f58a55aeef7bf7/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4", size = 162022, upload-time = "2025-10-14T04:40:44.547Z" }, + { url = "https://files.pythonhosted.org/packages/80/e6/7aab83774f5d2bca81f42ac58d04caf44f0cc2b65fc6db2b3b2e8a05f3b3/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89", size = 149383, upload-time = "2025-10-14T04:40:46.018Z" }, + { url = "https://files.pythonhosted.org/packages/4f/e8/b289173b4edae05c0dde07f69f8db476a0b511eac556dfe0d6bda3c43384/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569", size = 159098, upload-time = "2025-10-14T04:40:47.081Z" }, + { url = "https://files.pythonhosted.org/packages/d8/df/fe699727754cae3f8478493c7f45f777b17c3ef0600e28abfec8619eb49c/charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224", size = 152991, upload-time = "2025-10-14T04:40:48.246Z" }, + { url = "https://files.pythonhosted.org/packages/1a/86/584869fe4ddb6ffa3bd9f491b87a01568797fb9bd8933f557dba9771beaf/charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a", size = 99456, upload-time = "2025-10-14T04:40:49.376Z" }, + { url = "https://files.pythonhosted.org/packages/65/f6/62fdd5feb60530f50f7e38b4f6a1d5203f4d16ff4f9f0952962c044e919a/charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016", size = 106978, upload-time = "2025-10-14T04:40:50.844Z" }, + { url = "https://files.pythonhosted.org/packages/7a/9d/0710916e6c82948b3be62d9d398cb4fcf4e97b56d6a6aeccd66c4b2f2bd5/charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1", size = 99969, upload-time = "2025-10-14T04:40:52.272Z" }, + { url = "https://files.pythonhosted.org/packages/f3/85/1637cd4af66fa687396e757dec650f28025f2a2f5a5531a3208dc0ec43f2/charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", size = 208425, upload-time = "2025-10-14T04:40:53.353Z" }, + { url = "https://files.pythonhosted.org/packages/9d/6a/04130023fef2a0d9c62d0bae2649b69f7b7d8d24ea5536feef50551029df/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", size = 148162, upload-time = "2025-10-14T04:40:54.558Z" }, + { url = "https://files.pythonhosted.org/packages/78/29/62328d79aa60da22c9e0b9a66539feae06ca0f5a4171ac4f7dc285b83688/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", size = 144558, upload-time = "2025-10-14T04:40:55.677Z" }, + { url = "https://files.pythonhosted.org/packages/86/bb/b32194a4bf15b88403537c2e120b817c61cd4ecffa9b6876e941c3ee38fe/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", size = 161497, upload-time = "2025-10-14T04:40:57.217Z" }, + { url = "https://files.pythonhosted.org/packages/19/89/a54c82b253d5b9b111dc74aca196ba5ccfcca8242d0fb64146d4d3183ff1/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", size = 159240, upload-time = "2025-10-14T04:40:58.358Z" }, + { url = "https://files.pythonhosted.org/packages/c0/10/d20b513afe03acc89ec33948320a5544d31f21b05368436d580dec4e234d/charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", size = 153471, upload-time = "2025-10-14T04:40:59.468Z" }, + { url = "https://files.pythonhosted.org/packages/61/fa/fbf177b55bdd727010f9c0a3c49eefa1d10f960e5f09d1d887bf93c2e698/charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", size = 150864, upload-time = "2025-10-14T04:41:00.623Z" }, + { url = "https://files.pythonhosted.org/packages/05/12/9fbc6a4d39c0198adeebbde20b619790e9236557ca59fc40e0e3cebe6f40/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", size = 150647, upload-time = "2025-10-14T04:41:01.754Z" }, + { url = "https://files.pythonhosted.org/packages/ad/1f/6a9a593d52e3e8c5d2b167daf8c6b968808efb57ef4c210acb907c365bc4/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", size = 145110, upload-time = "2025-10-14T04:41:03.231Z" }, + { url = "https://files.pythonhosted.org/packages/30/42/9a52c609e72471b0fc54386dc63c3781a387bb4fe61c20231a4ebcd58bdd/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", size = 162839, upload-time = "2025-10-14T04:41:04.715Z" }, + { url = "https://files.pythonhosted.org/packages/c4/5b/c0682bbf9f11597073052628ddd38344a3d673fda35a36773f7d19344b23/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", size = 150667, upload-time = "2025-10-14T04:41:05.827Z" }, + { url = "https://files.pythonhosted.org/packages/e4/24/a41afeab6f990cf2daf6cb8c67419b63b48cf518e4f56022230840c9bfb2/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", size = 160535, upload-time = "2025-10-14T04:41:06.938Z" }, + { url = "https://files.pythonhosted.org/packages/2a/e5/6a4ce77ed243c4a50a1fecca6aaaab419628c818a49434be428fe24c9957/charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", size = 154816, upload-time = "2025-10-14T04:41:08.101Z" }, + { url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", size = 99694, upload-time = "2025-10-14T04:41:09.23Z" }, + { url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", size = 107131, upload-time = "2025-10-14T04:41:10.467Z" }, + { url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", size = 100390, upload-time = "2025-10-14T04:41:11.915Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, ] [[package]] @@ -1026,7 +1038,7 @@ wheels = [ [[package]] name = "clickzetta-connector-python" -version = "0.8.104" +version = "0.8.106" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "future" }, @@ -1040,7 +1052,7 @@ dependencies = [ { name = "urllib3" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/94/c7eee2224bdab39d16dfe5bb7687f5525c7ed345b7fe8812e18a2d9a6335/clickzetta_connector_python-0.8.104-py3-none-any.whl", hash = "sha256:ae3e466d990677f96c769ec1c29318237df80c80fe9c1e21ba1eaf42bdef0207", size = 79382, upload-time = "2025-09-10T08:46:39.731Z" }, + { url = "https://files.pythonhosted.org/packages/23/38/749c708619f402d4d582dfa73fbeb64ade77b1f250a93bd064d2a1aa3776/clickzetta_connector_python-0.8.106-py3-none-any.whl", hash = "sha256:120d6700051d97609dbd6655c002ab3bc260b7c8e67d39dfc7191e749563f7b4", size = 78121, upload-time = "2025-10-29T02:38:15.014Z" }, ] [[package]] @@ -1148,33 +1160,33 @@ toml = [ [[package]] name = "crc32c" -version = "2.7.1.post0" +version = "2.8" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8d/02/5e49cc17a5f6f8cb78b55dd57d50b36416e69051c29bba1eab3e86a01927/crc32c-2.7.1.post0.tar.gz", hash = "sha256:dcaa776413af5790cc55561469cd76306e97b325fe4aa195db535fb3f328e709", size = 46574, upload-time = "2025-10-13T02:06:16.898Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/66/7e97aa77af7cf6afbff26e3651b564fe41932599bc2d3dce0b2f73d4829a/crc32c-2.8.tar.gz", hash = "sha256:578728964e59c47c356aeeedee6220e021e124b9d3e8631d95d9a5e5f06e261c", size = 48179, upload-time = "2025-10-17T06:20:13.61Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/77/e6/5723311e6320b35d7755fef8ab10c5d4b55173ce11888e8ddaf62b63091f/crc32c-2.7.1.post0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:65124edce1903484b19109da542d8671a814bdd2cc4006847701449a1f137869", size = 64759, upload-time = "2025-10-13T02:05:01.212Z" }, - { url = "https://files.pythonhosted.org/packages/94/ac/f9550d21a4434b5dad9124ccd6b7cee97ce66bc0cb91a605bf01d9c2475d/crc32c-2.7.1.post0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a177ee47782f9b83002b08c4d4ba57a6e31dcd96be89d1c6b71f599d9c06bba6", size = 61419, upload-time = "2025-10-13T02:05:02.063Z" }, - { url = "https://files.pythonhosted.org/packages/ef/39/82874155870dc42c917ff842073c2714955c3c3d0629579a7ca3db1bbcb1/crc32c-2.7.1.post0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65ce2c3f1938b1310c1d592ac97f5e32b2cb67b67ae54ec89e710605f01e91cb", size = 59951, upload-time = "2025-10-13T02:05:03.268Z" }, - { url = "https://files.pythonhosted.org/packages/b9/24/42aa97aac254adeafaa44297654a520db1922dcab4a07bbb965b41d52b66/crc32c-2.7.1.post0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2c57ac2129a4adc56b8898c524a33525f008a346edc5df2b1ab7b7bfc4e80bbe", size = 78633, upload-time = "2025-10-13T02:05:04.429Z" }, - { url = "https://files.pythonhosted.org/packages/ac/76/a0c8683b9c38e260d23eb8d419d3ca39277e5e640521e9cc7ca407633ee4/crc32c-2.7.1.post0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3dcdcc73ea9f5e5e32cf1d0868315c62274f8f8fb2a1356e6bf2e958fc7f5bc9", size = 80187, upload-time = "2025-10-13T02:05:05.254Z" }, - { url = "https://files.pythonhosted.org/packages/16/05/978a558f580294e521dc432656e8d1b955ddc73f22870d7e767ff9c1a8d4/crc32c-2.7.1.post0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7cc745faf51a57c056021c005766cd8bacd818213ef424064118747c99a16d70", size = 79263, upload-time = "2025-10-13T02:05:06.121Z" }, - { url = "https://files.pythonhosted.org/packages/cd/48/9efdc54175f56b5aea24fbd9076759e052ca828713590a6bf60f822d40f7/crc32c-2.7.1.post0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1220cf7e97f453e07f998574e663e822e5602ed591b9a2fd436bf65dcae26168", size = 78527, upload-time = "2025-10-13T02:05:06.978Z" }, - { url = "https://files.pythonhosted.org/packages/0f/88/5accf5fb60559df04d0863496a86b912af37e6b7d160d458da25e473a881/crc32c-2.7.1.post0-cp311-cp311-win32.whl", hash = "sha256:d5087f2bc6954b38dc1ceac9b2ea9c9c4956b4e8ce82d965f4c474aefac2d061", size = 63277, upload-time = "2025-10-13T02:05:07.852Z" }, - { url = "https://files.pythonhosted.org/packages/a3/b2/c037161956d00324198a94962788b5e6a6e76b892d96205b15a37bea0c81/crc32c-2.7.1.post0-cp311-cp311-win_amd64.whl", hash = "sha256:feda0b536b1310b0535085835564918df6ba415e0b230734e1386deb7c614c02", size = 65029, upload-time = "2025-10-13T02:05:08.658Z" }, - { url = "https://files.pythonhosted.org/packages/7d/00/243cc1b15bcadf72bd71cf9a33d425715726b95b5f37a85b306d495362f4/crc32c-2.7.1.post0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4eda225a4c49901b9baf1af2aec19dd614c527bac81e02c52d1b9f1d6f6d244c", size = 64820, upload-time = "2025-10-13T02:05:09.476Z" }, - { url = "https://files.pythonhosted.org/packages/6e/76/e63deacf3e5dcd38764a1a617fd25749ea83fe20ff42a7912a855a975a0f/crc32c-2.7.1.post0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e304b07182b915fa9ab5340b51a6845d45331974d73b80a1710405ec8f0b4d44", size = 61474, upload-time = "2025-10-13T02:05:10.44Z" }, - { url = "https://files.pythonhosted.org/packages/c2/96/a341802b0a84fc00f9eca4e7dfdc0f41a69fc226b62ea1661468d4812800/crc32c-2.7.1.post0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1bbd4d2272aa7bdc5527fc3130caf31819e5efad19b6abd7158859f1cc808923", size = 59963, upload-time = "2025-10-13T02:05:11.271Z" }, - { url = "https://files.pythonhosted.org/packages/dc/8a/5e1f6789239935a95a6fb579e5f20dc4032265c5de215cec841d369ad188/crc32c-2.7.1.post0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:eea5fe4f477249f19201b2c1ac9f0df70987593b0dd0e0d15521480500d18455", size = 78461, upload-time = "2025-10-13T02:05:12.077Z" }, - { url = "https://files.pythonhosted.org/packages/e8/7a/bf07239d7f55cf94ad6979de1f97105cdcfa1b73cf8818a5461f37043962/crc32c-2.7.1.post0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc97ce3c913eded8f4d19d5da7492ebb7ab7de1eb05749c8e5c48f4999e263e0", size = 79963, upload-time = "2025-10-13T02:05:13.343Z" }, - { url = "https://files.pythonhosted.org/packages/e3/17/09a11007d66767a1d339424560386c99323e904e5e7f0e75ff4a13156d3c/crc32c-2.7.1.post0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c13bdb21cc11fc2e9b7387fe726e65993f79407b3e4b8c107ee345e9c6cfe399", size = 79040, upload-time = "2025-10-13T02:05:14.216Z" }, - { url = "https://files.pythonhosted.org/packages/b2/ca/4f8d8832524a70f39a20302e171782368fd66474e792b2aaf6bc9bb1ba9d/crc32c-2.7.1.post0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5f9edc07f0617c212d700e31fc6437811b3036f84931e9b837a14169dd0e8d65", size = 78319, upload-time = "2025-10-13T02:05:15.303Z" }, - { url = "https://files.pythonhosted.org/packages/6d/41/63331e510e31928ae5af30fa3d40bca86b8b7c38164b5b59a57cdb8b5a2e/crc32c-2.7.1.post0-cp312-cp312-win32.whl", hash = "sha256:6d205730d184b5ba9a37ee855883b536e40dbf13817d15e4bab4997149c59d82", size = 63286, upload-time = "2025-10-13T02:05:16.181Z" }, - { url = "https://files.pythonhosted.org/packages/ed/3f/05cb1cd66b98f7165b8d181a164ef2c16b7ef0019a191e6ff8defa4df327/crc32c-2.7.1.post0-cp312-cp312-win_amd64.whl", hash = "sha256:f8c1584fe841883300cd3cb0e8341da5a4c954fc2dcf9e0eb15d3b697d90930e", size = 65034, upload-time = "2025-10-13T02:05:17.078Z" }, - { url = "https://files.pythonhosted.org/packages/54/7f/18a4262600e9f772d2b2d10adff4b002d64e5eaa6f0da5e6ded16086e8ad/crc32c-2.7.1.post0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:700d0637f620be903b596fd145d25664c0e821b9b24d462eaa3beeacb906478f", size = 60777, upload-time = "2025-10-13T02:06:10.957Z" }, - { url = "https://files.pythonhosted.org/packages/1b/de/d9a6fdee4b1058b1922b1395814e010e85cb2c1a6ddb1388cbf7523a9f8f/crc32c-2.7.1.post0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:213aa16faf30c267579f9b76cfc572162fccd537095a5533e329318c2e5da589", size = 59663, upload-time = "2025-10-13T02:06:11.844Z" }, - { url = "https://files.pythonhosted.org/packages/4e/86/9e71dd8847ee075504a7ab69a101ab7dff7fd46cc22dbbef242ceeb187bf/crc32c-2.7.1.post0-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0e1b2b232edd75f3281ab059d2811e4ac674931a1889e0070a2fc73d93c0f204", size = 62539, upload-time = "2025-10-13T02:06:13.075Z" }, - { url = "https://files.pythonhosted.org/packages/67/c0/905905212c0aec771d81df4d88f87008dadeecd6ad628d1e17f9a5acd7dd/crc32c-2.7.1.post0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b2e76c1e536f2408c5c5ce796e1a89ef252a438aa011c1f31048aa0783b75626", size = 63248, upload-time = "2025-10-13T02:06:14.764Z" }, - { url = "https://files.pythonhosted.org/packages/f8/ba/6bdc8b946c6db999a0318e620a0f50e2099d9cba3d9c9de05932d12795a5/crc32c-2.7.1.post0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a1ea03ed177cb022d859ce86bac6044d5cd68dcf7e22f022e288a96f2bd6fa2f", size = 65049, upload-time = "2025-10-13T02:06:15.672Z" }, + { url = "https://files.pythonhosted.org/packages/dc/0b/5e03b22d913698e9cc563f39b9f6bbd508606bf6b8e9122cd6bf196b87ea/crc32c-2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e560a97fbb96c9897cb1d9b5076ef12fc12e2e25622530a1afd0de4240f17e1f", size = 66329, upload-time = "2025-10-17T06:19:01.771Z" }, + { url = "https://files.pythonhosted.org/packages/6b/38/2fe0051ffe8c6a650c8b1ac0da31b8802d1dbe5fa40a84e4b6b6f5583db5/crc32c-2.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6762d276d90331a490ef7e71ffee53b9c0eb053bd75a272d786f3b08d3fe3671", size = 62988, upload-time = "2025-10-17T06:19:02.953Z" }, + { url = "https://files.pythonhosted.org/packages/3e/30/5837a71c014be83aba1469c58820d287fc836512a0cad6b8fdd43868accd/crc32c-2.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:60670569f5ede91e39f48fb0cb4060e05b8d8704dd9e17ede930bf441b2f73ef", size = 61522, upload-time = "2025-10-17T06:19:03.796Z" }, + { url = "https://files.pythonhosted.org/packages/ca/29/63972fc1452778e2092ae998c50cbfc2fc93e3fa9798a0278650cd6169c5/crc32c-2.8-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:711743da6ccc70b3c6718c328947b0b6f34a1fe6a6c27cc6c1d69cc226bf70e9", size = 80200, upload-time = "2025-10-17T06:19:04.617Z" }, + { url = "https://files.pythonhosted.org/packages/cb/3a/60eb49d7bdada4122b3ffd45b0df54bdc1b8dd092cda4b069a287bdfcff4/crc32c-2.8-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5eb4094a2054774f13b26f21bf56792bb44fa1fcee6c6ad099387a43ffbfb4fa", size = 81757, upload-time = "2025-10-17T06:19:05.496Z" }, + { url = "https://files.pythonhosted.org/packages/f5/63/6efc1b64429ef7d23bd58b75b7ac24d15df327e3ebbe9c247a0f7b1c2ed1/crc32c-2.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fff15bf2bd3e95780516baae935ed12be88deaa5ebe6143c53eb0d26a7bdc7b7", size = 80830, upload-time = "2025-10-17T06:19:06.621Z" }, + { url = "https://files.pythonhosted.org/packages/e1/eb/0ae9f436f8004f1c88f7429e659a7218a3879bd11a6b18ed1257aad7e98b/crc32c-2.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4c0e11e3826668121fa53e0745635baf5e4f0ded437e8ff63ea56f38fc4f970a", size = 80095, upload-time = "2025-10-17T06:19:07.381Z" }, + { url = "https://files.pythonhosted.org/packages/9e/81/4afc9d468977a4cd94a2eb62908553345009a7c0d30e74463a15d4b48ec3/crc32c-2.8-cp311-cp311-win32.whl", hash = "sha256:38f915336715d1f1353ab07d7d786f8a789b119e273aea106ba55355dfc9101d", size = 64886, upload-time = "2025-10-17T06:19:08.497Z" }, + { url = "https://files.pythonhosted.org/packages/d6/e8/94e839c9f7e767bf8479046a207afd440a08f5c59b52586e1af5e64fa4a0/crc32c-2.8-cp311-cp311-win_amd64.whl", hash = "sha256:60e0a765b1caab8d31b2ea80840639253906a9351d4b861551c8c8625ea20f86", size = 66639, upload-time = "2025-10-17T06:19:09.338Z" }, + { url = "https://files.pythonhosted.org/packages/b6/36/fd18ef23c42926b79c7003e16cb0f79043b5b179c633521343d3b499e996/crc32c-2.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:572ffb1b78cce3d88e8d4143e154d31044a44be42cb3f6fbbf77f1e7a941c5ab", size = 66379, upload-time = "2025-10-17T06:19:10.115Z" }, + { url = "https://files.pythonhosted.org/packages/7f/b8/c584958e53f7798dd358f5bdb1bbfc97483134f053ee399d3eeb26cca075/crc32c-2.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cf827b3758ee0c4aacd21ceca0e2da83681f10295c38a10bfeb105f7d98f7a68", size = 63042, upload-time = "2025-10-17T06:19:10.946Z" }, + { url = "https://files.pythonhosted.org/packages/62/e6/6f2af0ec64a668a46c861e5bc778ea3ee42171fedfc5440f791f470fd783/crc32c-2.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:106fbd79013e06fa92bc3b51031694fcc1249811ed4364ef1554ee3dd2c7f5a2", size = 61528, upload-time = "2025-10-17T06:19:11.768Z" }, + { url = "https://files.pythonhosted.org/packages/17/8b/4a04bd80a024f1a23978f19ae99407783e06549e361ab56e9c08bba3c1d3/crc32c-2.8-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6dde035f91ffbfe23163e68605ee5a4bb8ceebd71ed54bb1fb1d0526cdd125a2", size = 80028, upload-time = "2025-10-17T06:19:12.554Z" }, + { url = "https://files.pythonhosted.org/packages/21/8f/01c7afdc76ac2007d0e6a98e7300b4470b170480f8188475b597d1f4b4c6/crc32c-2.8-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e41ebe7c2f0fdcd9f3a3fd206989a36b460b4d3f24816d53e5be6c7dba72c5e1", size = 81531, upload-time = "2025-10-17T06:19:13.406Z" }, + { url = "https://files.pythonhosted.org/packages/32/2b/8f78c5a8cc66486be5f51b6f038fc347c3ba748d3ea68be17a014283c331/crc32c-2.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ecf66cf90266d9c15cea597d5cc86c01917cd1a238dc3c51420c7886fa750d7e", size = 80608, upload-time = "2025-10-17T06:19:14.223Z" }, + { url = "https://files.pythonhosted.org/packages/db/86/fad1a94cdeeeb6b6e2323c87f970186e74bfd6fbfbc247bf5c88ad0873d5/crc32c-2.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:59eee5f3a69ad0793d5fa9cdc9b9d743b0cd50edf7fccc0a3988a821fef0208c", size = 79886, upload-time = "2025-10-17T06:19:15.345Z" }, + { url = "https://files.pythonhosted.org/packages/d5/db/1a7cb6757a1e32376fa2dfce00c815ea4ee614a94f9bff8228e37420c183/crc32c-2.8-cp312-cp312-win32.whl", hash = "sha256:a73d03ce3604aa5d7a2698e9057a0eef69f529c46497b27ee1c38158e90ceb76", size = 64896, upload-time = "2025-10-17T06:19:16.457Z" }, + { url = "https://files.pythonhosted.org/packages/bf/8e/2024de34399b2e401a37dcb54b224b56c747b0dc46de4966886827b4d370/crc32c-2.8-cp312-cp312-win_amd64.whl", hash = "sha256:56b3b7d015247962cf58186e06d18c3d75a1a63d709d3233509e1c50a2d36aa2", size = 66645, upload-time = "2025-10-17T06:19:17.235Z" }, + { url = "https://files.pythonhosted.org/packages/a7/1d/dd926c68eb8aac8b142a1a10b8eb62d95212c1cf81775644373fe7cceac2/crc32c-2.8-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5833f4071da7ea182c514ba17d1eee8aec3c5be927d798222fbfbbd0f5eea02c", size = 62345, upload-time = "2025-10-17T06:20:09.39Z" }, + { url = "https://files.pythonhosted.org/packages/51/be/803404e5abea2ef2c15042edca04bbb7f625044cca879e47f186b43887c2/crc32c-2.8-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:1dc4da036126ac07b39dd9d03e93e585ec615a2ad28ff12757aef7de175295a8", size = 61229, upload-time = "2025-10-17T06:20:10.236Z" }, + { url = "https://files.pythonhosted.org/packages/fc/3a/00cc578cd27ed0b22c9be25cef2c24539d92df9fa80ebd67a3fc5419724c/crc32c-2.8-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:15905fa78344654e241371c47e6ed2411f9eeb2b8095311c68c88eccf541e8b4", size = 64108, upload-time = "2025-10-17T06:20:11.072Z" }, + { url = "https://files.pythonhosted.org/packages/6b/bc/0587ef99a1c7629f95dd0c9d4f3d894de383a0df85831eb16c48a6afdae4/crc32c-2.8-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c596f918688821f796434e89b431b1698396c38bf0b56de873621528fe3ecb1e", size = 64815, upload-time = "2025-10-17T06:20:11.919Z" }, + { url = "https://files.pythonhosted.org/packages/73/42/94f2b8b92eae9064fcfb8deef2b971514065bd606231f8857ff8ae02bebd/crc32c-2.8-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:8d23c4fe01b3844cb6e091044bc1cebdef7d16472e058ce12d9fadf10d2614af", size = 66659, upload-time = "2025-10-17T06:20:12.766Z" }, ] [[package]] @@ -1198,49 +1210,49 @@ wheels = [ [[package]] name = "cryptography" -version = "46.0.2" +version = "46.0.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4a/9b/e301418629f7bfdf72db9e80ad6ed9d1b83c487c471803eaa6464c511a01/cryptography-46.0.2.tar.gz", hash = "sha256:21b6fc8c71a3f9a604f028a329e5560009cc4a3a828bfea5fcba8eb7647d88fe", size = 749293, upload-time = "2025-10-01T00:29:11.856Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9f/33/c00162f49c0e2fe8064a62cb92b93e50c74a72bc370ab92f86112b33ff62/cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1", size = 749258, upload-time = "2025-10-15T23:18:31.74Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/98/7a8df8c19a335c8028414738490fc3955c0cecbfdd37fcc1b9c3d04bd561/cryptography-46.0.2-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:f3e32ab7dd1b1ef67b9232c4cf5e2ee4cd517d4316ea910acaaa9c5712a1c663", size = 7261255, upload-time = "2025-10-01T00:27:22.947Z" }, - { url = "https://files.pythonhosted.org/packages/c6/38/b2adb2aa1baa6706adc3eb746691edd6f90a656a9a65c3509e274d15a2b8/cryptography-46.0.2-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1fd1a69086926b623ef8126b4c33d5399ce9e2f3fac07c9c734c2a4ec38b6d02", size = 4297596, upload-time = "2025-10-01T00:27:25.258Z" }, - { url = "https://files.pythonhosted.org/packages/e4/27/0f190ada240003119488ae66c897b5e97149292988f556aef4a6a2a57595/cryptography-46.0.2-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb7fb9cd44c2582aa5990cf61a4183e6f54eea3172e54963787ba47287edd135", size = 4450899, upload-time = "2025-10-01T00:27:27.458Z" }, - { url = "https://files.pythonhosted.org/packages/85/d5/e4744105ab02fdf6bb58ba9a816e23b7a633255987310b4187d6745533db/cryptography-46.0.2-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:9066cfd7f146f291869a9898b01df1c9b0e314bfa182cef432043f13fc462c92", size = 4300382, upload-time = "2025-10-01T00:27:29.091Z" }, - { url = "https://files.pythonhosted.org/packages/33/fb/bf9571065c18c04818cb07de90c43fc042c7977c68e5de6876049559c72f/cryptography-46.0.2-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:97e83bf4f2f2c084d8dd792d13841d0a9b241643151686010866bbd076b19659", size = 4017347, upload-time = "2025-10-01T00:27:30.767Z" }, - { url = "https://files.pythonhosted.org/packages/35/72/fc51856b9b16155ca071080e1a3ad0c3a8e86616daf7eb018d9565b99baa/cryptography-46.0.2-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:4a766d2a5d8127364fd936572c6e6757682fc5dfcbdba1632d4554943199f2fa", size = 4983500, upload-time = "2025-10-01T00:27:32.741Z" }, - { url = "https://files.pythonhosted.org/packages/c1/53/0f51e926799025e31746d454ab2e36f8c3f0d41592bc65cb9840368d3275/cryptography-46.0.2-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:fab8f805e9675e61ed8538f192aad70500fa6afb33a8803932999b1049363a08", size = 4482591, upload-time = "2025-10-01T00:27:34.869Z" }, - { url = "https://files.pythonhosted.org/packages/86/96/4302af40b23ab8aa360862251fb8fc450b2a06ff24bc5e261c2007f27014/cryptography-46.0.2-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:1e3b6428a3d56043bff0bb85b41c535734204e599c1c0977e1d0f261b02f3ad5", size = 4300019, upload-time = "2025-10-01T00:27:37.029Z" }, - { url = "https://files.pythonhosted.org/packages/9b/59/0be12c7fcc4c5e34fe2b665a75bc20958473047a30d095a7657c218fa9e8/cryptography-46.0.2-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:1a88634851d9b8de8bb53726f4300ab191d3b2f42595e2581a54b26aba71b7cc", size = 4950006, upload-time = "2025-10-01T00:27:40.272Z" }, - { url = "https://files.pythonhosted.org/packages/55/1d/42fda47b0111834b49e31590ae14fd020594d5e4dadd639bce89ad790fba/cryptography-46.0.2-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:be939b99d4e091eec9a2bcf41aaf8f351f312cd19ff74b5c83480f08a8a43e0b", size = 4482088, upload-time = "2025-10-01T00:27:42.668Z" }, - { url = "https://files.pythonhosted.org/packages/17/50/60f583f69aa1602c2bdc7022dae86a0d2b837276182f8c1ec825feb9b874/cryptography-46.0.2-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9f13b040649bc18e7eb37936009b24fd31ca095a5c647be8bb6aaf1761142bd1", size = 4425599, upload-time = "2025-10-01T00:27:44.616Z" }, - { url = "https://files.pythonhosted.org/packages/d1/57/d8d4134cd27e6e94cf44adb3f3489f935bde85f3a5508e1b5b43095b917d/cryptography-46.0.2-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9bdc25e4e01b261a8fda4e98618f1c9515febcecebc9566ddf4a70c63967043b", size = 4697458, upload-time = "2025-10-01T00:27:46.209Z" }, - { url = "https://files.pythonhosted.org/packages/d1/2b/531e37408573e1da33adfb4c58875013ee8ac7d548d1548967d94a0ae5c4/cryptography-46.0.2-cp311-abi3-win32.whl", hash = "sha256:8b9bf67b11ef9e28f4d78ff88b04ed0929fcd0e4f70bb0f704cfc32a5c6311ee", size = 3056077, upload-time = "2025-10-01T00:27:48.424Z" }, - { url = "https://files.pythonhosted.org/packages/a8/cd/2f83cafd47ed2dc5a3a9c783ff5d764e9e70d3a160e0df9a9dcd639414ce/cryptography-46.0.2-cp311-abi3-win_amd64.whl", hash = "sha256:758cfc7f4c38c5c5274b55a57ef1910107436f4ae842478c4989abbd24bd5acb", size = 3512585, upload-time = "2025-10-01T00:27:50.521Z" }, - { url = "https://files.pythonhosted.org/packages/00/36/676f94e10bfaa5c5b86c469ff46d3e0663c5dc89542f7afbadac241a3ee4/cryptography-46.0.2-cp311-abi3-win_arm64.whl", hash = "sha256:218abd64a2e72f8472c2102febb596793347a3e65fafbb4ad50519969da44470", size = 2927474, upload-time = "2025-10-01T00:27:52.91Z" }, - { url = "https://files.pythonhosted.org/packages/d5/bb/fa95abcf147a1b0bb94d95f53fbb09da77b24c776c5d87d36f3d94521d2c/cryptography-46.0.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a08e7401a94c002e79dc3bc5231b6558cd4b2280ee525c4673f650a37e2c7685", size = 7248090, upload-time = "2025-10-01T00:28:22.846Z" }, - { url = "https://files.pythonhosted.org/packages/b7/66/f42071ce0e3ffbfa80a88feadb209c779fda92a23fbc1e14f74ebf72ef6b/cryptography-46.0.2-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d30bc11d35743bf4ddf76674a0a369ec8a21f87aaa09b0661b04c5f6c46e8d7b", size = 4293123, upload-time = "2025-10-01T00:28:25.072Z" }, - { url = "https://files.pythonhosted.org/packages/a8/5d/1fdbd2e5c1ba822828d250e5a966622ef00185e476d1cd2726b6dd135e53/cryptography-46.0.2-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bca3f0ce67e5a2a2cf524e86f44697c4323a86e0fd7ba857de1c30d52c11ede1", size = 4439524, upload-time = "2025-10-01T00:28:26.808Z" }, - { url = "https://files.pythonhosted.org/packages/c8/c1/5e4989a7d102d4306053770d60f978c7b6b1ea2ff8c06e0265e305b23516/cryptography-46.0.2-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ff798ad7a957a5021dcbab78dfff681f0cf15744d0e6af62bd6746984d9c9e9c", size = 4297264, upload-time = "2025-10-01T00:28:29.327Z" }, - { url = "https://files.pythonhosted.org/packages/28/78/b56f847d220cb1d6d6aef5a390e116ad603ce13a0945a3386a33abc80385/cryptography-46.0.2-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:cb5e8daac840e8879407acbe689a174f5ebaf344a062f8918e526824eb5d97af", size = 4011872, upload-time = "2025-10-01T00:28:31.479Z" }, - { url = "https://files.pythonhosted.org/packages/e1/80/2971f214b066b888944f7b57761bf709ee3f2cf805619a18b18cab9b263c/cryptography-46.0.2-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:3f37aa12b2d91e157827d90ce78f6180f0c02319468a0aea86ab5a9566da644b", size = 4978458, upload-time = "2025-10-01T00:28:33.267Z" }, - { url = "https://files.pythonhosted.org/packages/a5/84/0cb0a2beaa4f1cbe63ebec4e97cd7e0e9f835d0ba5ee143ed2523a1e0016/cryptography-46.0.2-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5e38f203160a48b93010b07493c15f2babb4e0f2319bbd001885adb3f3696d21", size = 4472195, upload-time = "2025-10-01T00:28:36.039Z" }, - { url = "https://files.pythonhosted.org/packages/30/8b/2b542ddbf78835c7cd67b6fa79e95560023481213a060b92352a61a10efe/cryptography-46.0.2-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:d19f5f48883752b5ab34cff9e2f7e4a7f216296f33714e77d1beb03d108632b6", size = 4296791, upload-time = "2025-10-01T00:28:37.732Z" }, - { url = "https://files.pythonhosted.org/packages/78/12/9065b40201b4f4876e93b9b94d91feb18de9150d60bd842a16a21565007f/cryptography-46.0.2-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:04911b149eae142ccd8c9a68892a70c21613864afb47aba92d8c7ed9cc001023", size = 4939629, upload-time = "2025-10-01T00:28:39.654Z" }, - { url = "https://files.pythonhosted.org/packages/f6/9e/6507dc048c1b1530d372c483dfd34e7709fc542765015425f0442b08547f/cryptography-46.0.2-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:8b16c1ede6a937c291d41176934268e4ccac2c6521c69d3f5961c5a1e11e039e", size = 4471988, upload-time = "2025-10-01T00:28:41.822Z" }, - { url = "https://files.pythonhosted.org/packages/b1/86/d025584a5f7d5c5ec8d3633dbcdce83a0cd579f1141ceada7817a4c26934/cryptography-46.0.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:747b6f4a4a23d5a215aadd1d0b12233b4119c4313df83ab4137631d43672cc90", size = 4422989, upload-time = "2025-10-01T00:28:43.608Z" }, - { url = "https://files.pythonhosted.org/packages/4b/39/536370418b38a15a61bbe413006b79dfc3d2b4b0eafceb5581983f973c15/cryptography-46.0.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6b275e398ab3a7905e168c036aad54b5969d63d3d9099a0a66cc147a3cc983be", size = 4685578, upload-time = "2025-10-01T00:28:45.361Z" }, - { url = "https://files.pythonhosted.org/packages/15/52/ea7e2b1910f547baed566c866fbb86de2402e501a89ecb4871ea7f169a81/cryptography-46.0.2-cp38-abi3-win32.whl", hash = "sha256:0b507c8e033307e37af61cb9f7159b416173bdf5b41d11c4df2e499a1d8e007c", size = 3036711, upload-time = "2025-10-01T00:28:47.096Z" }, - { url = "https://files.pythonhosted.org/packages/71/9e/171f40f9c70a873e73c2efcdbe91e1d4b1777a03398fa1c4af3c56a2477a/cryptography-46.0.2-cp38-abi3-win_amd64.whl", hash = "sha256:f9b2dc7668418fb6f221e4bf701f716e05e8eadb4f1988a2487b11aedf8abe62", size = 3500007, upload-time = "2025-10-01T00:28:48.967Z" }, - { url = "https://files.pythonhosted.org/packages/3e/7c/15ad426257615f9be8caf7f97990cf3dcbb5b8dd7ed7e0db581a1c4759dd/cryptography-46.0.2-cp38-abi3-win_arm64.whl", hash = "sha256:91447f2b17e83c9e0c89f133119d83f94ce6e0fb55dd47da0a959316e6e9cfa1", size = 2918153, upload-time = "2025-10-01T00:28:51.003Z" }, - { url = "https://files.pythonhosted.org/packages/b7/8c/1aabe338149a7d0f52c3e30f2880b20027ca2a485316756ed6f000462db3/cryptography-46.0.2-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1d3b3edd145953832e09607986f2bd86f85d1dc9c48ced41808b18009d9f30e5", size = 3714495, upload-time = "2025-10-01T00:28:57.222Z" }, - { url = "https://files.pythonhosted.org/packages/e3/0a/0d10eb970fe3e57da9e9ddcfd9464c76f42baf7b3d0db4a782d6746f788f/cryptography-46.0.2-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:fe245cf4a73c20592f0f48da39748b3513db114465be78f0a36da847221bd1b4", size = 4243379, upload-time = "2025-10-01T00:28:58.989Z" }, - { url = "https://files.pythonhosted.org/packages/7d/60/e274b4d41a9eb82538b39950a74ef06e9e4d723cb998044635d9deb1b435/cryptography-46.0.2-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2b9cad9cf71d0c45566624ff76654e9bae5f8a25970c250a26ccfc73f8553e2d", size = 4409533, upload-time = "2025-10-01T00:29:00.785Z" }, - { url = "https://files.pythonhosted.org/packages/19/9a/fb8548f762b4749aebd13b57b8f865de80258083fe814957f9b0619cfc56/cryptography-46.0.2-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9bd26f2f75a925fdf5e0a446c0de2714f17819bf560b44b7480e4dd632ad6c46", size = 4243120, upload-time = "2025-10-01T00:29:02.515Z" }, - { url = "https://files.pythonhosted.org/packages/71/60/883f24147fd4a0c5cab74ac7e36a1ff3094a54ba5c3a6253d2ff4b19255b/cryptography-46.0.2-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:7282d8f092b5be7172d6472f29b0631f39f18512a3642aefe52c3c0e0ccfad5a", size = 4408940, upload-time = "2025-10-01T00:29:04.42Z" }, - { url = "https://files.pythonhosted.org/packages/d9/b5/c5e179772ec38adb1c072b3aa13937d2860509ba32b2462bf1dda153833b/cryptography-46.0.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c4b93af7920cdf80f71650769464ccf1fb49a4b56ae0024173c24c48eb6b1612", size = 3438518, upload-time = "2025-10-01T00:29:06.139Z" }, + { url = "https://files.pythonhosted.org/packages/1d/42/9c391dd801d6cf0d561b5890549d4b27bafcc53b39c31a817e69d87c625b/cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a", size = 7225004, upload-time = "2025-10-15T23:16:52.239Z" }, + { url = "https://files.pythonhosted.org/packages/1c/67/38769ca6b65f07461eb200e85fc1639b438bdc667be02cf7f2cd6a64601c/cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc", size = 4296667, upload-time = "2025-10-15T23:16:54.369Z" }, + { url = "https://files.pythonhosted.org/packages/5c/49/498c86566a1d80e978b42f0d702795f69887005548c041636df6ae1ca64c/cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d", size = 4450807, upload-time = "2025-10-15T23:16:56.414Z" }, + { url = "https://files.pythonhosted.org/packages/4b/0a/863a3604112174c8624a2ac3c038662d9e59970c7f926acdcfaed8d61142/cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb", size = 4299615, upload-time = "2025-10-15T23:16:58.442Z" }, + { url = "https://files.pythonhosted.org/packages/64/02/b73a533f6b64a69f3cd3872acb6ebc12aef924d8d103133bb3ea750dc703/cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849", size = 4016800, upload-time = "2025-10-15T23:17:00.378Z" }, + { url = "https://files.pythonhosted.org/packages/25/d5/16e41afbfa450cde85a3b7ec599bebefaef16b5c6ba4ec49a3532336ed72/cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8", size = 4984707, upload-time = "2025-10-15T23:17:01.98Z" }, + { url = "https://files.pythonhosted.org/packages/c9/56/e7e69b427c3878352c2fb9b450bd0e19ed552753491d39d7d0a2f5226d41/cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec", size = 4482541, upload-time = "2025-10-15T23:17:04.078Z" }, + { url = "https://files.pythonhosted.org/packages/78/f6/50736d40d97e8483172f1bb6e698895b92a223dba513b0ca6f06b2365339/cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91", size = 4299464, upload-time = "2025-10-15T23:17:05.483Z" }, + { url = "https://files.pythonhosted.org/packages/00/de/d8e26b1a855f19d9994a19c702fa2e93b0456beccbcfe437eda00e0701f2/cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e", size = 4950838, upload-time = "2025-10-15T23:17:07.425Z" }, + { url = "https://files.pythonhosted.org/packages/8f/29/798fc4ec461a1c9e9f735f2fc58741b0daae30688f41b2497dcbc9ed1355/cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926", size = 4481596, upload-time = "2025-10-15T23:17:09.343Z" }, + { url = "https://files.pythonhosted.org/packages/15/8d/03cd48b20a573adfff7652b76271078e3045b9f49387920e7f1f631d125e/cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71", size = 4426782, upload-time = "2025-10-15T23:17:11.22Z" }, + { url = "https://files.pythonhosted.org/packages/fa/b1/ebacbfe53317d55cf33165bda24c86523497a6881f339f9aae5c2e13e57b/cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac", size = 4698381, upload-time = "2025-10-15T23:17:12.829Z" }, + { url = "https://files.pythonhosted.org/packages/96/92/8a6a9525893325fc057a01f654d7efc2c64b9de90413adcf605a85744ff4/cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018", size = 3055988, upload-time = "2025-10-15T23:17:14.65Z" }, + { url = "https://files.pythonhosted.org/packages/7e/bf/80fbf45253ea585a1e492a6a17efcb93467701fa79e71550a430c5e60df0/cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb", size = 3514451, upload-time = "2025-10-15T23:17:16.142Z" }, + { url = "https://files.pythonhosted.org/packages/2e/af/9b302da4c87b0beb9db4e756386a7c6c5b8003cd0e742277888d352ae91d/cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c", size = 2928007, upload-time = "2025-10-15T23:17:18.04Z" }, + { url = "https://files.pythonhosted.org/packages/fd/23/45fe7f376a7df8daf6da3556603b36f53475a99ce4faacb6ba2cf3d82021/cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936", size = 7218248, upload-time = "2025-10-15T23:17:46.294Z" }, + { url = "https://files.pythonhosted.org/packages/27/32/b68d27471372737054cbd34c84981f9edbc24fe67ca225d389799614e27f/cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683", size = 4294089, upload-time = "2025-10-15T23:17:48.269Z" }, + { url = "https://files.pythonhosted.org/packages/26/42/fa8389d4478368743e24e61eea78846a0006caffaf72ea24a15159215a14/cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d", size = 4440029, upload-time = "2025-10-15T23:17:49.837Z" }, + { url = "https://files.pythonhosted.org/packages/5f/eb/f483db0ec5ac040824f269e93dd2bd8a21ecd1027e77ad7bdf6914f2fd80/cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0", size = 4297222, upload-time = "2025-10-15T23:17:51.357Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cf/da9502c4e1912cb1da3807ea3618a6829bee8207456fbbeebc361ec38ba3/cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc", size = 4012280, upload-time = "2025-10-15T23:17:52.964Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8f/9adb86b93330e0df8b3dcf03eae67c33ba89958fc2e03862ef1ac2b42465/cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3", size = 4978958, upload-time = "2025-10-15T23:17:54.965Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a0/5fa77988289c34bdb9f913f5606ecc9ada1adb5ae870bd0d1054a7021cc4/cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971", size = 4473714, upload-time = "2025-10-15T23:17:56.754Z" }, + { url = "https://files.pythonhosted.org/packages/14/e5/fc82d72a58d41c393697aa18c9abe5ae1214ff6f2a5c18ac470f92777895/cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac", size = 4296970, upload-time = "2025-10-15T23:17:58.588Z" }, + { url = "https://files.pythonhosted.org/packages/78/06/5663ed35438d0b09056973994f1aec467492b33bd31da36e468b01ec1097/cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04", size = 4940236, upload-time = "2025-10-15T23:18:00.897Z" }, + { url = "https://files.pythonhosted.org/packages/fc/59/873633f3f2dcd8a053b8dd1d38f783043b5fce589c0f6988bf55ef57e43e/cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506", size = 4472642, upload-time = "2025-10-15T23:18:02.749Z" }, + { url = "https://files.pythonhosted.org/packages/3d/39/8e71f3930e40f6877737d6f69248cf74d4e34b886a3967d32f919cc50d3b/cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963", size = 4423126, upload-time = "2025-10-15T23:18:04.85Z" }, + { url = "https://files.pythonhosted.org/packages/cd/c7/f65027c2810e14c3e7268353b1681932b87e5a48e65505d8cc17c99e36ae/cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4", size = 4686573, upload-time = "2025-10-15T23:18:06.908Z" }, + { url = "https://files.pythonhosted.org/packages/0a/6e/1c8331ddf91ca4730ab3086a0f1be19c65510a33b5a441cb334e7a2d2560/cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df", size = 3036695, upload-time = "2025-10-15T23:18:08.672Z" }, + { url = "https://files.pythonhosted.org/packages/90/45/b0d691df20633eff80955a0fc7695ff9051ffce8b69741444bd9ed7bd0db/cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f", size = 3501720, upload-time = "2025-10-15T23:18:10.632Z" }, + { url = "https://files.pythonhosted.org/packages/e8/cb/2da4cc83f5edb9c3257d09e1e7ab7b23f049c7962cae8d842bbef0a9cec9/cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372", size = 2918740, upload-time = "2025-10-15T23:18:12.277Z" }, + { url = "https://files.pythonhosted.org/packages/06/8a/e60e46adab4362a682cf142c7dcb5bf79b782ab2199b0dcb81f55970807f/cryptography-46.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea", size = 3698132, upload-time = "2025-10-15T23:18:17.056Z" }, + { url = "https://files.pythonhosted.org/packages/da/38/f59940ec4ee91e93d3311f7532671a5cef5570eb04a144bf203b58552d11/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b", size = 4243992, upload-time = "2025-10-15T23:18:18.695Z" }, + { url = "https://files.pythonhosted.org/packages/b0/0c/35b3d92ddebfdfda76bb485738306545817253d0a3ded0bfe80ef8e67aa5/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb", size = 4409944, upload-time = "2025-10-15T23:18:20.597Z" }, + { url = "https://files.pythonhosted.org/packages/99/55/181022996c4063fc0e7666a47049a1ca705abb9c8a13830f074edb347495/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717", size = 4242957, upload-time = "2025-10-15T23:18:22.18Z" }, + { url = "https://files.pythonhosted.org/packages/ba/af/72cd6ef29f9c5f731251acadaeb821559fe25f10852f44a63374c9ca08c1/cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9", size = 4409447, upload-time = "2025-10-15T23:18:24.209Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c3/e90f4a4feae6410f914f8ebac129b9ae7a8c92eb60a638012dde42030a9d/cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c", size = 3438528, upload-time = "2025-10-15T23:18:26.227Z" }, ] [[package]] @@ -1276,14 +1288,14 @@ wheels = [ [[package]] name = "deprecated" -version = "1.2.18" +version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "wrapt" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/98/97/06afe62762c9a8a86af0cfb7bfdab22a43ad17138b07af5b1a58442690a2/deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d", size = 2928744, upload-time = "2025-01-27T10:46:25.7Z" } +sdist = { url = "https://files.pythonhosted.org/packages/49/85/12f0a49a7c4ffb70572b6c2ef13c90c88fd190debda93b23f026b25f9634/deprecated-1.3.1.tar.gz", hash = "sha256:b1b50e0ff0c1fddaa5708a2c6b0a6588bb09b892825ab2b214ac9ea9d92a5223", size = 2932523, upload-time = "2025-10-30T08:19:02.757Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec", size = 9998, upload-time = "2025-01-27T10:46:09.186Z" }, + { url = "https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl", hash = "sha256:597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f", size = 11298, upload-time = "2025-10-30T08:19:00.758Z" }, ] [[package]] @@ -1300,7 +1312,7 @@ wheels = [ [[package]] name = "dify-api" -version = "1.9.2" +version = "1.10.0" source = { virtual = "." } dependencies = [ { name = "apscheduler" }, @@ -1576,7 +1588,7 @@ requires-dist = [ { name = "tiktoken", specifier = "~=0.9.0" }, { name = "transformers", specifier = "~=4.56.1" }, { name = "unstructured", extras = ["docx", "epub", "md", "ppt", "pptx"], specifier = "~=0.16.1" }, - { name = "weave", specifier = "~=0.51.0" }, + { name = "weave", specifier = ">=0.52.16" }, { name = "weaviate-client", specifier = "==4.17.0" }, { name = "webvtt-py", specifier = "~=0.5.1" }, { name = "yarl", specifier = "~=1.18.3" }, @@ -1833,7 +1845,7 @@ wheels = [ [[package]] name = "fastapi" -version = "0.120.2" +version = "0.121.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-doc" }, @@ -1841,39 +1853,39 @@ dependencies = [ { name = "starlette" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a0/fb/79e556bc8f9d360e5cc2fa7364a7ad6bda6f1736938b43a2791fa8baee7b/fastapi-0.120.2.tar.gz", hash = "sha256:4c5ab43e2a90335bbd8326d1b659eac0f3dbcc015e2af573c4f5de406232c4ac", size = 338684, upload-time = "2025-10-29T13:47:35.802Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/a4/29e1b861fc9017488ed02ff1052feffa40940cb355ed632a8845df84ce84/fastapi-0.121.1.tar.gz", hash = "sha256:b6dba0538fd15dab6fe4d3e5493c3957d8a9e1e9257f56446b5859af66f32441", size = 342523, upload-time = "2025-11-08T21:48:14.068Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/81/cc/1c33d05f62c9349bb80dfe789cc9a7409bdfb337a63fa347fd651d25294a/fastapi-0.120.2-py3-none-any.whl", hash = "sha256:bedcf2c14240e43d56cb9a339b32bcf15104fe6b5897c0222603cb7ec416c8eb", size = 108383, upload-time = "2025-10-29T13:47:32.978Z" }, + { url = "https://files.pythonhosted.org/packages/94/fd/2e6f7d706899cc08690c5f6641e2ffbfffe019e8f16ce77104caa5730910/fastapi-0.121.1-py3-none-any.whl", hash = "sha256:2c5c7028bc3a58d8f5f09aecd3fd88a000ccc0c5ad627693264181a3c33aa1fc", size = 109192, upload-time = "2025-11-08T21:48:12.458Z" }, ] [[package]] name = "fastuuid" -version = "0.13.5" +version = "0.14.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/80/3c16a1edad2e6cd82fbd15ac998cc1b881f478bf1f80ca717d941c441874/fastuuid-0.13.5.tar.gz", hash = "sha256:d4976821ab424d41542e1ea39bc828a9d454c3f8a04067c06fca123c5b95a1a1", size = 18255, upload-time = "2025-09-26T09:05:38.281Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/7d/d9daedf0f2ebcacd20d599928f8913e9d2aea1d56d2d355a93bfa2b611d7/fastuuid-0.14.0.tar.gz", hash = "sha256:178947fc2f995b38497a74172adee64fdeb8b7ec18f2a5934d037641ba265d26", size = 18232, upload-time = "2025-10-19T22:19:22.402Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/ab/9351bfc04ff2144115758233130b5469993d3d379323903a4634cb9c78c1/fastuuid-0.13.5-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:c122558ca4b5487e2bd0863467e4ccfe636afd1274803741487d48f2e32ea0e1", size = 493910, upload-time = "2025-09-26T09:12:36.995Z" }, - { url = "https://files.pythonhosted.org/packages/b7/ab/84fac529cc12a03d49595e70ac459380f7cb12c70f0fe401781b276f9e94/fastuuid-0.13.5-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d7abd42a03a17a681abddd19aa4d44ca2747138cf8a48373b395cf1341a10de2", size = 252621, upload-time = "2025-09-26T09:12:22.222Z" }, - { url = "https://files.pythonhosted.org/packages/7f/9d/f4c734d7b74a04ca695781c58a1376f07b206fe2849e58e7778d476a0e94/fastuuid-0.13.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2705cf7c2d6f7c03053404b75a4c44f872a73f6f9d5ea34f1dc6bba400c4a97c", size = 244269, upload-time = "2025-09-26T09:08:31.921Z" }, - { url = "https://files.pythonhosted.org/packages/5b/da/b42b7eb84523d69cfe9dac82950e105061c8d59f4d4d2cc3e170dbd20937/fastuuid-0.13.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d220a056fcbad25932c1f25304261198612f271f4d150b2a84e81adb877daf7", size = 271528, upload-time = "2025-09-26T09:12:42.718Z" }, - { url = "https://files.pythonhosted.org/packages/1b/45/6eee36929119e9544b0906fd6591e685d682e4b51cfad4c25d96ccf04009/fastuuid-0.13.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f29f93b5a0c5f5579f97f77d5319e9bfefd61d8678ec59d850201544faf33bf", size = 272168, upload-time = "2025-09-26T09:07:04.238Z" }, - { url = "https://files.pythonhosted.org/packages/ce/ac/75b70f13515e12194a25b0459dd8a8a33de4ab0a92142f0776d21e41ca84/fastuuid-0.13.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:399d86623fb806151b1feb9fdd818ebfc1d50387199a35f7264f98dfc1540af5", size = 290948, upload-time = "2025-09-26T09:07:53.433Z" }, - { url = "https://files.pythonhosted.org/packages/76/30/1801326a5b433aafc04eae906e6b005e8a3d1120fd996409fe88124edb06/fastuuid-0.13.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:689e8795a1edd573b2c9a455024e4edf605a9690339bba29709857f7180894ea", size = 452932, upload-time = "2025-09-26T09:09:28.017Z" }, - { url = "https://files.pythonhosted.org/packages/61/2a/080b6b2ac4ef2ead54a7463ae4162d66a52867bbd4447ad5354427b82ae2/fastuuid-0.13.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:25e82c4a1734da168b36f7308e397afbe9c9b353799a9c69563a605f11dd4641", size = 468384, upload-time = "2025-09-26T09:08:14.32Z" }, - { url = "https://files.pythonhosted.org/packages/b6/d3/4a3ffcaf8d874f7f208dad7e98ded7c5359b6599073960e3aa0530ca6139/fastuuid-0.13.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f62299e3cca69aad6a6fb37e26e45055587954d498ad98903fea24382377ea0e", size = 444815, upload-time = "2025-09-26T09:06:38.691Z" }, - { url = "https://files.pythonhosted.org/packages/9d/a0/08dd8663f7bff3e9c0b2416708b01d1fb65f52bcd4bce18760f77c4735fd/fastuuid-0.13.5-cp311-cp311-win32.whl", hash = "sha256:68227f2230381b89fb1ad362ca6e433de85c6c11c36312b41757cad47b8a8e32", size = 144897, upload-time = "2025-09-26T09:14:53.695Z" }, - { url = "https://files.pythonhosted.org/packages/9e/e2/2c2a37dcc56e2323c6214c38c8faac22f9d03d98c481f8a40843e0b9526a/fastuuid-0.13.5-cp311-cp311-win_amd64.whl", hash = "sha256:4a32306982bd031cb20d5d1a726b7b958a55babebd2300ce6c8e352d3496e931", size = 150523, upload-time = "2025-09-26T09:12:24.031Z" }, - { url = "https://files.pythonhosted.org/packages/21/36/434f137c5970cac19e57834e1f7680e85301619d49891618c00666700c61/fastuuid-0.13.5-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:35fe8045e866bc6846f8de6fa05acb1de0c32478048484a995e96d31e21dff2a", size = 494638, upload-time = "2025-09-26T09:14:58.695Z" }, - { url = "https://files.pythonhosted.org/packages/ca/3c/083de2ac007b2b305523b9c006dba5051e5afd87a626ef1a39f76e2c6b82/fastuuid-0.13.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:02a460333f52d731a006d18a52ef6fcb2d295a1f5b1a5938d30744191b2f77b7", size = 253138, upload-time = "2025-09-26T09:13:33.283Z" }, - { url = "https://files.pythonhosted.org/packages/73/5e/630cffa1c8775db526e39e9e4c5c7db0c27be0786bb21ba82c912ae19f63/fastuuid-0.13.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:74b0e4f8c307b9f477a5d7284db4431ce53a3c1e3f4173db7a97db18564a6202", size = 244521, upload-time = "2025-09-26T09:14:40.682Z" }, - { url = "https://files.pythonhosted.org/packages/4d/51/55d78705f4fbdadf88fb40f382f508d6c7a4941ceddd7825fafebb4cc778/fastuuid-0.13.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6955a99ef455c2986f3851f4e0ccc35dec56ac1a7720f2b92e88a75d6684512e", size = 271557, upload-time = "2025-09-26T09:15:09.75Z" }, - { url = "https://files.pythonhosted.org/packages/6a/2b/1b89e90a8635e5587ccdbbeb169c590672ce7637880f2c047482a0359950/fastuuid-0.13.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f10c77b826738c1a27dcdaa92ea4dc1ec9d869748a99e1fde54f1379553d4854", size = 272334, upload-time = "2025-09-26T09:07:48.865Z" }, - { url = "https://files.pythonhosted.org/packages/0c/06/4c8207894eeb30414999e5c3f66ac039bc4003437eb4060d8a1bceb4cc6f/fastuuid-0.13.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bb25dccbeb249d16d5e664f65f17ebec05136821d5ef462c4110e3f76b86fb86", size = 290594, upload-time = "2025-09-26T09:12:54.124Z" }, - { url = "https://files.pythonhosted.org/packages/50/69/96d221931a31d77a47cc2487bdfacfb3091edfc2e7a04b1795df1aec05df/fastuuid-0.13.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a5becc646a3eeafb76ce0a6783ba190cd182e3790a8b2c78ca9db2b5e87af952", size = 452835, upload-time = "2025-09-26T09:14:00.994Z" }, - { url = "https://files.pythonhosted.org/packages/25/ef/bf045f0a47dcec96247497ef3f7a31d86ebc074330e2dccc34b8dbc0468a/fastuuid-0.13.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:69b34363752d06e9bb0dbdf02ae391ec56ac948c6f2eb00be90dad68e80774b9", size = 468225, upload-time = "2025-09-26T09:13:38.585Z" }, - { url = "https://files.pythonhosted.org/packages/30/46/4817ab5a3778927155a4bde92540d4c4fa996161ec8b8e080c8928b0984e/fastuuid-0.13.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57d0768afcad0eab8770c9b8cf904716bd3c547e8b9a4e755ee8a673b060a3a3", size = 444907, upload-time = "2025-09-26T09:14:30.163Z" }, - { url = "https://files.pythonhosted.org/packages/80/27/ab284117ce4dc9b356a7196bdbf220510285f201d27f1f078592cdc8187b/fastuuid-0.13.5-cp312-cp312-win32.whl", hash = "sha256:8ac6c6f5129d52eaa6ef9ea4b6e2f7c69468a053f3ab8e439661186b9c06bb85", size = 145415, upload-time = "2025-09-26T09:08:59.494Z" }, - { url = "https://files.pythonhosted.org/packages/f4/0c/f970a4222773b248931819f8940800b760283216ca3dda173ed027e94bdd/fastuuid-0.13.5-cp312-cp312-win_amd64.whl", hash = "sha256:ad630e97715beefef07ec37c9c162336e500400774e2c1cbe1a0df6f80d15b9a", size = 150840, upload-time = "2025-09-26T09:13:46.115Z" }, + { url = "https://files.pythonhosted.org/packages/98/f3/12481bda4e5b6d3e698fbf525df4443cc7dce746f246b86b6fcb2fba1844/fastuuid-0.14.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:73946cb950c8caf65127d4e9a325e2b6be0442a224fd51ba3b6ac44e1912ce34", size = 516386, upload-time = "2025-10-19T22:42:40.176Z" }, + { url = "https://files.pythonhosted.org/packages/59/19/2fc58a1446e4d72b655648eb0879b04e88ed6fa70d474efcf550f640f6ec/fastuuid-0.14.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:12ac85024637586a5b69645e7ed986f7535106ed3013640a393a03e461740cb7", size = 264569, upload-time = "2025-10-19T22:25:50.977Z" }, + { url = "https://files.pythonhosted.org/packages/78/29/3c74756e5b02c40cfcc8b1d8b5bac4edbd532b55917a6bcc9113550e99d1/fastuuid-0.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:05a8dde1f395e0c9b4be515b7a521403d1e8349443e7641761af07c7ad1624b1", size = 254366, upload-time = "2025-10-19T22:29:49.166Z" }, + { url = "https://files.pythonhosted.org/packages/52/96/d761da3fccfa84f0f353ce6e3eb8b7f76b3aa21fd25e1b00a19f9c80a063/fastuuid-0.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09378a05020e3e4883dfdab438926f31fea15fd17604908f3d39cbeb22a0b4dc", size = 278978, upload-time = "2025-10-19T22:35:41.306Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c2/f84c90167cc7765cb82b3ff7808057608b21c14a38531845d933a4637307/fastuuid-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbb0c4b15d66b435d2538f3827f05e44e2baafcc003dd7d8472dc67807ab8fd8", size = 279692, upload-time = "2025-10-19T22:25:36.997Z" }, + { url = "https://files.pythonhosted.org/packages/af/7b/4bacd03897b88c12348e7bd77943bac32ccf80ff98100598fcff74f75f2e/fastuuid-0.14.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cd5a7f648d4365b41dbf0e38fe8da4884e57bed4e77c83598e076ac0c93995e7", size = 303384, upload-time = "2025-10-19T22:29:46.578Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a2/584f2c29641df8bd810d00c1f21d408c12e9ad0c0dafdb8b7b29e5ddf787/fastuuid-0.14.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c0a94245afae4d7af8c43b3159d5e3934c53f47140be0be624b96acd672ceb73", size = 460921, upload-time = "2025-10-19T22:36:42.006Z" }, + { url = "https://files.pythonhosted.org/packages/24/68/c6b77443bb7764c760e211002c8638c0c7cce11cb584927e723215ba1398/fastuuid-0.14.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b29e23c97e77c3a9514d70ce343571e469098ac7f5a269320a0f0b3e193ab36", size = 480575, upload-time = "2025-10-19T22:28:18.975Z" }, + { url = "https://files.pythonhosted.org/packages/5a/87/93f553111b33f9bb83145be12868c3c475bf8ea87c107063d01377cc0e8e/fastuuid-0.14.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1e690d48f923c253f28151b3a6b4e335f2b06bf669c68a02665bc150b7839e94", size = 452317, upload-time = "2025-10-19T22:25:32.75Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8c/a04d486ca55b5abb7eaa65b39df8d891b7b1635b22db2163734dc273579a/fastuuid-0.14.0-cp311-cp311-win32.whl", hash = "sha256:a6f46790d59ab38c6aa0e35c681c0484b50dc0acf9e2679c005d61e019313c24", size = 154804, upload-time = "2025-10-19T22:24:15.615Z" }, + { url = "https://files.pythonhosted.org/packages/9c/b2/2d40bf00820de94b9280366a122cbaa60090c8cf59e89ac3938cf5d75895/fastuuid-0.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:e150eab56c95dc9e3fefc234a0eedb342fac433dacc273cd4d150a5b0871e1fa", size = 156099, upload-time = "2025-10-19T22:24:31.646Z" }, + { url = "https://files.pythonhosted.org/packages/02/a2/e78fcc5df65467f0d207661b7ef86c5b7ac62eea337c0c0fcedbeee6fb13/fastuuid-0.14.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:77e94728324b63660ebf8adb27055e92d2e4611645bf12ed9d88d30486471d0a", size = 510164, upload-time = "2025-10-19T22:31:45.635Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b3/c846f933f22f581f558ee63f81f29fa924acd971ce903dab1a9b6701816e/fastuuid-0.14.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:caa1f14d2102cb8d353096bc6ef6c13b2c81f347e6ab9d6fbd48b9dea41c153d", size = 261837, upload-time = "2025-10-19T22:38:38.53Z" }, + { url = "https://files.pythonhosted.org/packages/54/ea/682551030f8c4fa9a769d9825570ad28c0c71e30cf34020b85c1f7ee7382/fastuuid-0.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d23ef06f9e67163be38cece704170486715b177f6baae338110983f99a72c070", size = 251370, upload-time = "2025-10-19T22:40:26.07Z" }, + { url = "https://files.pythonhosted.org/packages/14/dd/5927f0a523d8e6a76b70968e6004966ee7df30322f5fc9b6cdfb0276646a/fastuuid-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c9ec605ace243b6dbe3bd27ebdd5d33b00d8d1d3f580b39fdd15cd96fd71796", size = 277766, upload-time = "2025-10-19T22:37:23.779Z" }, + { url = "https://files.pythonhosted.org/packages/16/6e/c0fb547eef61293153348f12e0f75a06abb322664b34a1573a7760501336/fastuuid-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:808527f2407f58a76c916d6aa15d58692a4a019fdf8d4c32ac7ff303b7d7af09", size = 278105, upload-time = "2025-10-19T22:26:56.821Z" }, + { url = "https://files.pythonhosted.org/packages/2d/b1/b9c75e03b768f61cf2e84ee193dc18601aeaf89a4684b20f2f0e9f52b62c/fastuuid-0.14.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fb3c0d7fef6674bbeacdd6dbd386924a7b60b26de849266d1ff6602937675c8", size = 301564, upload-time = "2025-10-19T22:30:31.604Z" }, + { url = "https://files.pythonhosted.org/packages/fc/fa/f7395fdac07c7a54f18f801744573707321ca0cee082e638e36452355a9d/fastuuid-0.14.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab3f5d36e4393e628a4df337c2c039069344db5f4b9d2a3c9cea48284f1dd741", size = 459659, upload-time = "2025-10-19T22:31:32.341Z" }, + { url = "https://files.pythonhosted.org/packages/66/49/c9fd06a4a0b1f0f048aacb6599e7d96e5d6bc6fa680ed0d46bf111929d1b/fastuuid-0.14.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:b9a0ca4f03b7e0b01425281ffd44e99d360e15c895f1907ca105854ed85e2057", size = 478430, upload-time = "2025-10-19T22:26:22.962Z" }, + { url = "https://files.pythonhosted.org/packages/be/9c/909e8c95b494e8e140e8be6165d5fc3f61fdc46198c1554df7b3e1764471/fastuuid-0.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3acdf655684cc09e60fb7e4cf524e8f42ea760031945aa8086c7eae2eeeabeb8", size = 450894, upload-time = "2025-10-19T22:27:01.647Z" }, + { url = "https://files.pythonhosted.org/packages/90/eb/d29d17521976e673c55ef7f210d4cdd72091a9ec6755d0fd4710d9b3c871/fastuuid-0.14.0-cp312-cp312-win32.whl", hash = "sha256:9579618be6280700ae36ac42c3efd157049fe4dd40ca49b021280481c78c3176", size = 154374, upload-time = "2025-10-19T22:29:19.879Z" }, + { url = "https://files.pythonhosted.org/packages/cc/fc/f5c799a6ea6d877faec0472d0b27c079b47c86b1cdc577720a5386483b36/fastuuid-0.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:d9e4332dc4ba054434a9594cbfaf7823b57993d7d8e7267831c3e059857cf397", size = 156550, upload-time = "2025-10-19T22:27:49.658Z" }, ] [[package]] @@ -2074,11 +2086,11 @@ wheels = [ [[package]] name = "fsspec" -version = "2025.9.0" +version = "2025.10.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/de/e0/bab50af11c2d75c9c4a2a26a5254573c0bd97cea152254401510950486fa/fsspec-2025.9.0.tar.gz", hash = "sha256:19fd429483d25d28b65ec68f9f4adc16c17ea2c7c7bf54ec61360d478fb19c19", size = 304847, upload-time = "2025-09-02T19:10:49.215Z" } +sdist = { url = "https://files.pythonhosted.org/packages/24/7f/2747c0d332b9acfa75dc84447a066fdf812b5a6b8d30472b74d309bfe8cb/fsspec-2025.10.0.tar.gz", hash = "sha256:b6789427626f068f9a83ca4e8a3cc050850b6c0f71f99ddb4f542b8266a26a59", size = 309285, upload-time = "2025-10-30T14:58:44.036Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/47/71/70db47e4f6ce3e5c37a607355f80da8860a33226be640226ac52cb05ef2e/fsspec-2025.9.0-py3-none-any.whl", hash = "sha256:530dc2a2af60a414a832059574df4a6e10cce927f6f4a78209390fe38955cfb7", size = 199289, upload-time = "2025-09-02T19:10:47.708Z" }, + { url = "https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl", hash = "sha256:7c7712353ae7d875407f97715f0e1ffcc21e33d5b24556cb1e090ae9409ec61d", size = 200966, upload-time = "2025-10-30T14:58:42.53Z" }, ] [[package]] @@ -2284,31 +2296,32 @@ wheels = [ [[package]] name = "google-cloud-core" -version = "2.4.3" +version = "2.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "google-api-core" }, { name = "google-auth" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d6/b8/2b53838d2acd6ec6168fd284a990c76695e84c65deee79c9f3a4276f6b4f/google_cloud_core-2.4.3.tar.gz", hash = "sha256:1fab62d7102844b278fe6dead3af32408b1df3eb06f5c7e8634cbd40edc4da53", size = 35861, upload-time = "2025-03-10T21:05:38.948Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/03/ef0bc99d0e0faf4fdbe67ac445e18cdaa74824fd93cd069e7bb6548cb52d/google_cloud_core-2.5.0.tar.gz", hash = "sha256:7c1b7ef5c92311717bd05301aa1a91ffbc565673d3b0b4163a52d8413a186963", size = 36027, upload-time = "2025-10-29T23:17:39.513Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/86/bda7241a8da2d28a754aad2ba0f6776e35b67e37c36ae0c45d49370f1014/google_cloud_core-2.4.3-py2.py3-none-any.whl", hash = "sha256:5130f9f4c14b4fafdff75c79448f9495cfade0d8775facf1b09c3bf67e027f6e", size = 29348, upload-time = "2025-03-10T21:05:37.785Z" }, + { url = "https://files.pythonhosted.org/packages/89/20/bfa472e327c8edee00f04beecc80baeddd2ab33ee0e86fd7654da49d45e9/google_cloud_core-2.5.0-py3-none-any.whl", hash = "sha256:67d977b41ae6c7211ee830c7912e41003ea8194bff15ae7d72fd6f51e57acabc", size = 29469, upload-time = "2025-10-29T23:17:38.548Z" }, ] [[package]] name = "google-cloud-resource-manager" -version = "1.14.2" +version = "1.15.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "google-api-core", extra = ["grpc"] }, { name = "google-auth" }, { name = "grpc-google-iam-v1" }, + { name = "grpcio" }, { name = "proto-plus" }, { name = "protobuf" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6e/ca/a4648f5038cb94af4b3942815942a03aa9398f9fb0bef55b3f1585b9940d/google_cloud_resource_manager-1.14.2.tar.gz", hash = "sha256:962e2d904c550d7bac48372607904ff7bb3277e3bb4a36d80cc9a37e28e6eb74", size = 446370, upload-time = "2025-03-17T11:35:56.343Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/19/b95d0e8814ce42522e434cdd85c0cb6236d874d9adf6685fc8e6d1fda9d1/google_cloud_resource_manager-1.15.0.tar.gz", hash = "sha256:3d0b78c3daa713f956d24e525b35e9e9a76d597c438837171304d431084cedaf", size = 449227, upload-time = "2025-10-20T14:57:01.108Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/ea/a92631c358da377af34d3a9682c97af83185c2d66363d5939ab4a1169a7f/google_cloud_resource_manager-1.14.2-py3-none-any.whl", hash = "sha256:d0fa954dedd1d2b8e13feae9099c01b8aac515b648e612834f9942d2795a9900", size = 394344, upload-time = "2025-03-17T11:35:54.722Z" }, + { url = "https://files.pythonhosted.org/packages/8c/93/5aef41a5f146ad4559dd7040ae5fa8e7ddcab4dfadbef6cb4b66d775e690/google_cloud_resource_manager-1.15.0-py3-none-any.whl", hash = "sha256:0ccde5db644b269ddfdf7b407a2c7b60bdbf459f8e666344a5285601d00c7f6d", size = 397151, upload-time = "2025-10-20T14:53:45.409Z" }, ] [[package]] @@ -2403,11 +2416,11 @@ requests = [ [[package]] name = "graphql-core" -version = "3.2.6" +version = "3.2.7" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/16/7574029da84834349b60ed71614d66ca3afe46e9bf9c7b9562102acb7d4f/graphql_core-3.2.6.tar.gz", hash = "sha256:c08eec22f9e40f0bd61d805907e3b3b1b9a320bc606e23dc145eebca07c8fbab", size = 505353, upload-time = "2025-01-26T16:36:27.374Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/9b/037a640a2983b09aed4a823f9cf1729e6d780b0671f854efa4727a7affbe/graphql_core-3.2.7.tar.gz", hash = "sha256:27b6904bdd3b43f2a0556dad5d579bdfdeab1f38e8e8788e555bdcb586a6f62c", size = 513484, upload-time = "2025-11-01T22:30:40.436Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/4f/7297663840621022bc73c22d7d9d80dbc78b4db6297f764b545cd5dd462d/graphql_core-3.2.6-py3-none-any.whl", hash = "sha256:78b016718c161a6fb20a7d97bbf107f331cd1afe53e45566c59f776ed7f0b45f", size = 203416, upload-time = "2025-01-26T16:36:24.868Z" }, + { url = "https://files.pythonhosted.org/packages/0a/14/933037032608787fb92e365883ad6a741c235e0ff992865ec5d904a38f1e/graphql_core-3.2.7-py3-none-any.whl", hash = "sha256:17fc8f3ca4a42913d8e24d9ac9f08deddf0a0b2483076575757f6c412ead2ec0", size = 207262, upload-time = "2025-11-01T22:30:38.912Z" }, ] [[package]] @@ -2451,96 +2464,96 @@ wheels = [ [[package]] name = "grimp" -version = "3.12" +version = "3.13" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1b/a4/463903a1cfbc19d3e7125d6614bb900df2b34dd675c7d93544d154819d2b/grimp-3.12.tar.gz", hash = "sha256:1a733b1d719c42bd2fada58240975fa7d09936b57120c34b64cfb31e42701010", size = 845594, upload-time = "2025-10-09T09:51:02.064Z" } +sdist = { url = "https://files.pythonhosted.org/packages/80/b3/ff0d704cdc5cf399d74aabd2bf1694d4c4c3231d4d74b011b8f39f686a86/grimp-3.13.tar.gz", hash = "sha256:759bf6e05186e6473ee71af4119ec181855b2b324f4fcdd78dee9e5b59d87874", size = 847508, upload-time = "2025-10-29T13:04:57.704Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/b5/1c89600bf181d41502aed51b73b3a5889158dee35c534f51df3666779587/grimp-3.12-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:e6c02e51eebfcf71146d42f47c9ce353ac1902ae446e18d0e663ab9fdaa0496c", size = 2062043, upload-time = "2025-10-09T09:49:57.035Z" }, - { url = "https://files.pythonhosted.org/packages/1f/86/bab32c5e26949a82299853ccb28ee30a7899d0355b0d209b535eb03bc04e/grimp-3.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:79bc2b0ff6072c43c0ddc4479b25b7a8198795486478cfe3be0503b2c7d32c7f", size = 1981378, upload-time = "2025-10-09T09:49:49.237Z" }, - { url = "https://files.pythonhosted.org/packages/b5/03/b9f7e465488e8593de9a1e88355c3cfba04c02c3a34a6b02cbe946e0d587/grimp-3.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3986f11a9dd4167a2943cf6e80b458c0a825b48609713736cc8f2de135000810", size = 2130579, upload-time = "2025-10-09T09:48:36.035Z" }, - { url = "https://files.pythonhosted.org/packages/1b/d0/81c776327354f32f86f321dd8468b32ba6b52dc3511d912d24c4fac96da4/grimp-3.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7a2abe55844f9dad25499ff9456d680496f390d160b6b3a4e5aeabc0183813b4", size = 2091201, upload-time = "2025-10-09T09:48:52.57Z" }, - { url = "https://files.pythonhosted.org/packages/9d/7e/116ac4c1e4407a123fba4bb076b2e880643d70b3f4f1621c3323b5d66e12/grimp-3.12-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e59112d0f557335b619bcf10263d11873579230bd3df4a4b19224ec18e7212d6", size = 2240782, upload-time = "2025-10-09T09:49:30.915Z" }, - { url = "https://files.pythonhosted.org/packages/06/7f/89bbec1241a8504499975f0f08befea0cf3d27c52f9808602fff8075c639/grimp-3.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b858e2e5a489c36710322970aa82bfbd3f1c4107c8564960629a59d2f17a53d0", size = 2423143, upload-time = "2025-10-09T09:49:05.18Z" }, - { url = "https://files.pythonhosted.org/packages/86/d7/2f416439b624b2a91bf2e0e456f58d74d51aa7ad239099cf4a8911d952c0/grimp-3.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d46cc1222dd301e0be371b97f0cdecae178089704e8a285e3edd4750ec46270a", size = 2303850, upload-time = "2025-10-09T09:49:19.073Z" }, - { url = "https://files.pythonhosted.org/packages/60/bd/8c2f48c26151eb9a65bc41f01004b43cb1b31791ffb61758d40d2f6b485a/grimp-3.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ef06822f75856af28e7fcc580034043c543b1c99b07d2bd467bd173a7f10691", size = 2168571, upload-time = "2025-10-09T09:49:39.844Z" }, - { url = "https://files.pythonhosted.org/packages/5a/45/01a839434ff88be24317aa52cc1ba158833bd1d071efe0da1b14838af024/grimp-3.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4c19f1cba8a95c898473dd18f9c81358019d67f87f140b0b8401550e6d21c5a3", size = 2310869, upload-time = "2025-10-09T09:50:05.153Z" }, - { url = "https://files.pythonhosted.org/packages/ba/7b/0dc45fdc15562c2faf8a95a8685d3805d27decdef6fcfb66d9b577ed2f12/grimp-3.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:600e8dbc1cd9c6decbc22089730221c65591b7ba5f89751d07fc7ad014d99aa1", size = 2353397, upload-time = "2025-10-09T09:50:17.755Z" }, - { url = "https://files.pythonhosted.org/packages/a8/ec/07734ecc4f1489ffc071417f7bc881c939bcfdfba10eb585bce510ede1b2/grimp-3.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:259ba53b82cfb9c2c2d097b2237970c4e9903fa2d0b664b7e12329d9a64924f9", size = 2350166, upload-time = "2025-10-09T09:50:32.237Z" }, - { url = "https://files.pythonhosted.org/packages/a4/f5/45d80e2fa205066a484f0c1a667a249408a49bb3b665d62677f879920aa0/grimp-3.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a593549b1f66b1c12574e71f9e8c0073b372888c6b6706e2617bba2713ae28c2", size = 2360590, upload-time = "2025-10-09T09:50:49.961Z" }, - { url = "https://files.pythonhosted.org/packages/e6/f2/7ab1bc4d613189183c17741ff0d03490d9749eb5130b8b56e82ed77098b0/grimp-3.12-cp311-cp311-win32.whl", hash = "sha256:356ee969443f06c6c3a270f5a7221f946f0cb135a8b8ece2009990b293504bb3", size = 1748183, upload-time = "2025-10-09T09:51:13.503Z" }, - { url = "https://files.pythonhosted.org/packages/91/62/195f37a68d07fab40c8934ae8e39f9ff1f9a5bf3e375059b9cf14ccba302/grimp-3.12-cp311-cp311-win_amd64.whl", hash = "sha256:75e1f0d74f3a242a1c34e464d775c36b1c8b9d8c92b35f46f221e73e9b2f0065", size = 1851099, upload-time = "2025-10-09T09:51:04.747Z" }, - { url = "https://files.pythonhosted.org/packages/12/ac/0f55980a59c07439a965d3975f1cf3a6574f7d773910b9d6924790e0dddf/grimp-3.12-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:af399fc0ffddfbd7ea6c2e8546be1ab5284ee800f15a445705bdda5d63501b34", size = 2058862, upload-time = "2025-10-09T09:49:58.478Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b1/5fdcb1db7cb3253c78d87a0b8c3f7f9c5214b273861300b51c897c55e6b8/grimp-3.12-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f08358acbaf9a4b324537bf344fd2d76b5f9b6f1bfaf9a431e9453fc0eaee5f", size = 1977586, upload-time = "2025-10-09T09:49:50.49Z" }, - { url = "https://files.pythonhosted.org/packages/c9/b9/e5f6d265b71430f9641daa9476cde8c23549e396c558b39a0bdc7fee824f/grimp-3.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6eeb1616cafe9074fcb390fcfc01e6e5a0e0ddd5acb9dd37579985b2879c239a", size = 2130610, upload-time = "2025-10-09T09:48:38.472Z" }, - { url = "https://files.pythonhosted.org/packages/da/e1/2d0601c9aac2ab7340504e85ca4cd55f2991501a03e421bec78f53a07478/grimp-3.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99e648e299f7cd3daaee2cb745192e7ea159c7d38df76b4dcca12a2ef68a3ede", size = 2092775, upload-time = "2025-10-09T09:48:53.841Z" }, - { url = "https://files.pythonhosted.org/packages/db/a1/e63315477127ed8f31a1a93911d084bf704d6e126ca27650e3c3389701a6/grimp-3.12-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b24c5ce351030d1f83e69acd76a06863dd87041ceb25572339f7334e210cbc4", size = 2239336, upload-time = "2025-10-09T09:49:32.185Z" }, - { url = "https://files.pythonhosted.org/packages/f2/09/cd76d35121f053a95a58fc5830756c62e5c9de74aa4e16b4dc27ce6ada2c/grimp-3.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd40a5ec09d1dfafaae88b53231ab79378183e2e9a03e7b26b7a30133d027d8a", size = 2421851, upload-time = "2025-10-09T09:49:06.893Z" }, - { url = "https://files.pythonhosted.org/packages/40/46/e8390a7c5ed85b4dbeff4e873f1ece8d9acf72d72f084b397ccc2facfa3b/grimp-3.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0aebdfad66d6f4e8b0f7364ce0429d208be3510918097f969428165074d3103e", size = 2304849, upload-time = "2025-10-09T09:49:20.695Z" }, - { url = "https://files.pythonhosted.org/packages/bd/81/f73edbc48a283f634233b6153ac43e4e7b9f58108ffc19da803b0015cb60/grimp-3.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76fd06be98d6bea9ea8a804da22c80accf1d277fe04abd5f3dff05d087f056f7", size = 2168655, upload-time = "2025-10-09T09:49:41.118Z" }, - { url = "https://files.pythonhosted.org/packages/84/1a/8fa5752f725b8872010627bd10e1aedccdb406c3b4118ec3fe127155284e/grimp-3.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a73a42a43e268ac5b196386beae1ec646f4572409e731bccf2a99ab4ed5c46bf", size = 2311124, upload-time = "2025-10-09T09:50:06.477Z" }, - { url = "https://files.pythonhosted.org/packages/83/a0/02d6b2a86289a4ac73f44f59aaee43c1dc936c984204c73d2affe4570eb6/grimp-3.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:af990af7d5e64f484d12cdefacfaaed4ea9418ac4d0a5a928953fd91aaf8df80", size = 2354216, upload-time = "2025-10-09T09:50:19.114Z" }, - { url = "https://files.pythonhosted.org/packages/7b/48/0368289f5bbdf943a48305824b30411b35ef2c7cd8edf2bad48d67b3897e/grimp-3.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:82ee28c1e9835572af2c733f7e5913a44193c53ae8ca488039164593b4a750fa", size = 2348372, upload-time = "2025-10-09T09:50:37.479Z" }, - { url = "https://files.pythonhosted.org/packages/26/73/b4f90b4926791d720f6069fc8c8b3e204721d1db839a1c00fbcee1e2a36d/grimp-3.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:afdceaea00e305909cb30d68e91b94fcf71d1a7234052549ea31148785a03a52", size = 2361167, upload-time = "2025-10-09T09:50:51.733Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ae/94d34c732d531c7165c8942d7995495aac64e9bb5c28cc6751349eacdcde/grimp-3.12-cp312-cp312-win32.whl", hash = "sha256:40f8e048254d2437dffcd383d2301a82c35d9a3082e878b707d87a6e8c539614", size = 1747179, upload-time = "2025-10-09T09:51:15.224Z" }, - { url = "https://files.pythonhosted.org/packages/5b/cd/48bc396ee2f36e72d5c50ba8b4d7f817fc2cdac7b9ab77d2b097f50a4447/grimp-3.12-cp312-cp312-win_amd64.whl", hash = "sha256:199172d17f22199bf400a0bd5c4985784622201e887a023fe799ca3f3437dedf", size = 1850691, upload-time = "2025-10-09T09:51:05.984Z" }, - { url = "https://files.pythonhosted.org/packages/d9/31/c72e53a46692dc8358cff1af1a9494430a0fecd4c3f2d0d8e9c2eb5e828d/grimp-3.12-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:567d037a3db083e54bee621daba59a2e01fd1391364ae0a0c737995f6eed910b", size = 2131392, upload-time = "2025-10-09T09:48:46.857Z" }, - { url = "https://files.pythonhosted.org/packages/39/10/15e43be32734baaebeee090dca16f06ea5ba933b209b8e1c0d5986dabb32/grimp-3.12-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9b4cc756c91c3d8582ee70b5e013c0e34fdb31c7f808cefe9d15509c45fec31e", size = 2092481, upload-time = "2025-10-09T09:49:00.754Z" }, - { url = "https://files.pythonhosted.org/packages/a1/4a/c9349dee284c2d9384714741896f0f84a1d66011a69cdc364e4d94e188b1/grimp-3.12-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84bd47f9a8619cb8966f18cb6faf5f6cb8d35ade99312477dd8e9de3a9ae4cb7", size = 2242260, upload-time = "2025-10-09T09:49:37.183Z" }, - { url = "https://files.pythonhosted.org/packages/d8/63/3935823f89c12320840bbf018858eeaca7d5285f9769a48921587a88adeb/grimp-3.12-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f30e01855c67a39857c87e6c0eafe5e8891010a35e06cf2145f2cfce8ea9780", size = 2422371, upload-time = "2025-10-09T09:49:14.616Z" }, - { url = "https://files.pythonhosted.org/packages/71/8e/5a75c2335a2dc61738b19318dcdd16392015a984211e3d0b9f6679dc6c89/grimp-3.12-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d07e825f6b052186dabd8dbbcc7e008a3b56e551725e2ba47169fe1e4bde76ac", size = 2304257, upload-time = "2025-10-09T09:49:26.908Z" }, - { url = "https://files.pythonhosted.org/packages/40/99/462d86bc9401a39859f272b867331a678f4b5324a539dc771bdae6d36309/grimp-3.12-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f1a1289d4282be2891ada75ec5d3099e856518c4236b1196e367b630485f8ce", size = 2169360, upload-time = "2025-10-09T09:49:46.575Z" }, - { url = "https://files.pythonhosted.org/packages/d0/07/6d2929f05dae189265633588819d990df35644ad74b6ec74207091dff18d/grimp-3.12-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:85136b555aeb7d3965fdb40af4e4af2011f911b0fde8c20979bf4db7b06455f5", size = 2312280, upload-time = "2025-10-09T09:50:13.491Z" }, - { url = "https://files.pythonhosted.org/packages/5c/47/7e49417e2c496da0b6141e711dca40726d2b30a0adc6db9d04b74c7bafa7/grimp-3.12-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:963efd6ec86e7b47fde835b2526b6be7a3f489857a1cd47a747c94b3e670550a", size = 2354449, upload-time = "2025-10-09T09:50:27.596Z" }, - { url = "https://files.pythonhosted.org/packages/2c/08/2e1db56797e4e26334b3ee4ef1a5fbf56155d74a0318215ed4dcad02ef43/grimp-3.12-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:c9e2ee478b66f0e20c92af6123142ffd6b604c36e9b3a8d391ea9172cc18b6b3", size = 2350545, upload-time = "2025-10-09T09:50:45.623Z" }, - { url = "https://files.pythonhosted.org/packages/37/78/53594064f11b0ae9e72b3e9df5c055f00c5bff44962f7b777846504fc50d/grimp-3.12-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e8826362d4e403aa2e03d480e3e4d64284a6b6ccafc2c5777bb2bed2535bdc4e", size = 2361926, upload-time = "2025-10-09T09:50:58.605Z" }, + { url = "https://files.pythonhosted.org/packages/45/cc/d272cf87728a7e6ddb44d3c57c1d3cbe7daf2ffe4dc76e3dc9b953b69ab1/grimp-3.13-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:57745996698932768274a2ed9ba3e5c424f60996c53ecaf1c82b75be9e819ee9", size = 2074518, upload-time = "2025-10-29T13:03:58.51Z" }, + { url = "https://files.pythonhosted.org/packages/06/11/31dc622c5a0d1615b20532af2083f4bba2573aebbba5b9d6911dfd60a37d/grimp-3.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ca29f09710342b94fa6441f4d1102a0e49f0b463b1d91e43223baa949c5e9337", size = 1988182, upload-time = "2025-10-29T13:03:50.129Z" }, + { url = "https://files.pythonhosted.org/packages/aa/83/a0e19beb5c42df09e9a60711b227b4f910ba57f46bea258a9e1df883976c/grimp-3.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:adda25aa158e11d96dd27166300b955c8ec0c76ce2fd1a13597e9af012aada06", size = 2145832, upload-time = "2025-10-29T13:02:35.218Z" }, + { url = "https://files.pythonhosted.org/packages/bc/f5/13752205e290588e970fdc019b4ab2c063ca8da352295c332e34df5d5842/grimp-3.13-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03e17029d75500a5282b40cb15cdae030bf14df9dfaa6a2b983f08898dfe74b6", size = 2106762, upload-time = "2025-10-29T13:02:51.681Z" }, + { url = "https://files.pythonhosted.org/packages/ff/30/c4d62543beda4b9a483a6cd5b7dd5e4794aafb511f144d21a452467989a1/grimp-3.13-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6cbfc9d2d0ebc0631fb4012a002f3d8f4e3acb8325be34db525c0392674433b8", size = 2256674, upload-time = "2025-10-29T13:03:27.923Z" }, + { url = "https://files.pythonhosted.org/packages/9b/ea/d07ed41b7121719c3f7bf30c9881dbde69efeacfc2daf4e4a628efe5f123/grimp-3.13-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:161449751a085484608c5b9f863e41e8fb2a98e93f7312ead5d831e487a94518", size = 2442699, upload-time = "2025-10-29T13:03:04.451Z" }, + { url = "https://files.pythonhosted.org/packages/fe/a0/1923f0480756effb53c7e6cef02a3918bb519a86715992720838d44f0329/grimp-3.13-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:119628fbe7f941d1e784edac98e8ced7e78a0b966a4ff2c449e436ee860bd507", size = 2317145, upload-time = "2025-10-29T13:03:15.941Z" }, + { url = "https://files.pythonhosted.org/packages/0d/d9/aef4c8350090653e34bc755a5d9e39cc300f5c46c651c1d50195f69bf9ab/grimp-3.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ca1ac776baf1fa105342b23c72f2e7fdd6771d4cce8d2903d28f92fd34a9e8f", size = 2180288, upload-time = "2025-10-29T13:03:41.023Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2e/a206f76eccffa56310a1c5d5950ed34923a34ae360cb38e297604a288837/grimp-3.13-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:941ff414cc66458f56e6af93c618266091ea70bfdabe7a84039be31d937051ee", size = 2328696, upload-time = "2025-10-29T13:04:06.888Z" }, + { url = "https://files.pythonhosted.org/packages/40/3b/88ff1554409b58faf2673854770e6fc6e90167a182f5166147b7618767d7/grimp-3.13-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:87ad9bcd1caaa2f77c369d61a04b9f2f1b87f4c3b23ae6891b2c943193c4ec62", size = 2367574, upload-time = "2025-10-29T13:04:21.404Z" }, + { url = "https://files.pythonhosted.org/packages/b6/b3/e9c99ecd94567465a0926ae7136e589aed336f6979a4cddcb8dfba16d27c/grimp-3.13-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:751fe37104a4f023d5c6556558b723d843d44361245c20f51a5d196de00e4774", size = 2358842, upload-time = "2025-10-29T13:04:34.26Z" }, + { url = "https://files.pythonhosted.org/packages/74/65/a5fffeeb9273e06dfbe962c8096331ba181ca8415c5f9d110b347f2c0c34/grimp-3.13-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9b561f79ec0b3a4156937709737191ad57520f2d58fa1fc43cd79f67839a3cd7", size = 2382268, upload-time = "2025-10-29T13:04:46.864Z" }, + { url = "https://files.pythonhosted.org/packages/d9/79/2f3b4323184329b26b46de2b6d1bd64ba1c26e0a9c3cfa0aaecec237b75e/grimp-3.13-cp311-cp311-win32.whl", hash = "sha256:52405ea8c8f20cf5d2d1866c80ee3f0243a38af82bd49d1464c5e254bf2e1f8f", size = 1759345, upload-time = "2025-10-29T13:05:10.435Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ce/e86cf73e412a6bf531cbfa5c733f8ca48b28ebea23a037338be763f24849/grimp-3.13-cp311-cp311-win_amd64.whl", hash = "sha256:6a45d1d3beeefad69717b3718e53680fb3579fe67696b86349d6f39b75e850bf", size = 1859382, upload-time = "2025-10-29T13:05:01.071Z" }, + { url = "https://files.pythonhosted.org/packages/1d/06/ff7e3d72839f46f0fccdc79e1afe332318986751e20f65d7211a5e51366c/grimp-3.13-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3e715c56ffdd055e5c84d27b4c02d83369b733e6a24579d42bbbc284bd0664a9", size = 2070161, upload-time = "2025-10-29T13:03:59.755Z" }, + { url = "https://files.pythonhosted.org/packages/58/2f/a95bdf8996db9400fd7e288f32628b2177b8840fe5f6b7cd96247b5fa173/grimp-3.13-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f794dea35a4728b948ab8fec970ffbdf2589b34209f3ab902cf8a9148cf1eaad", size = 1984365, upload-time = "2025-10-29T13:03:51.805Z" }, + { url = "https://files.pythonhosted.org/packages/1f/45/cc3d7f3b7b4d93e0b9d747dc45ed73a96203ba083dc857f24159eb6966b4/grimp-3.13-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69571270f2c27e8a64b968195aa7ecc126797112a9bf1e804ff39ba9f42d6f6d", size = 2145486, upload-time = "2025-10-29T13:02:36.591Z" }, + { url = "https://files.pythonhosted.org/packages/16/92/a6e493b71cb5a9145ad414cc4790c3779853372b840a320f052b22879606/grimp-3.13-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f7b226398ae476762ef0afb5ef8f838d39c8e0e2f6d1a4378ce47059b221a4a", size = 2106747, upload-time = "2025-10-29T13:02:53.084Z" }, + { url = "https://files.pythonhosted.org/packages/db/8d/36a09f39fe14ad8843ef3ff81090ef23abbd02984c1fcc1cef30e5713d82/grimp-3.13-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5498aeac4df0131a1787fcbe9bb460b52fc9b781ec6bba607fd6a7d6d3ea6fce", size = 2257027, upload-time = "2025-10-29T13:03:29.44Z" }, + { url = "https://files.pythonhosted.org/packages/a1/7a/90f78787f80504caeef501f1bff47e8b9f6058d45995f1d4c921df17bfef/grimp-3.13-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4be702bb2b5c001a6baf709c452358470881e15e3e074cfc5308903603485dcb", size = 2441208, upload-time = "2025-10-29T13:03:05.733Z" }, + { url = "https://files.pythonhosted.org/packages/61/71/0fbd3a3e914512b9602fa24c8ebc85a8925b101f04f8a8c1d1e220e0a717/grimp-3.13-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fcf988f3e3d272a88f7be68f0c1d3719fee8624d902e9c0346b9015a0ea6a65", size = 2318758, upload-time = "2025-10-29T13:03:17.454Z" }, + { url = "https://files.pythonhosted.org/packages/34/e9/29c685e88b3b0688f0a2e30c0825e02076ecdf22bc0e37b1468562eaa09a/grimp-3.13-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ede36d104ff88c208140f978de3345f439345f35b8ef2b4390c59ef6984deba", size = 2180523, upload-time = "2025-10-29T13:03:42.3Z" }, + { url = "https://files.pythonhosted.org/packages/86/bc/7cc09574b287b8850a45051e73272f365259d9b6ca58d7b8773265c6fe35/grimp-3.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b35e44bb8dc80e0bd909a64387f722395453593a1884caca9dc0748efea33764", size = 2328855, upload-time = "2025-10-29T13:04:08.111Z" }, + { url = "https://files.pythonhosted.org/packages/34/86/3b0845900c8f984a57c6afe3409b20638065462d48b6afec0fd409fd6118/grimp-3.13-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:becb88e9405fc40896acd6e2b9bbf6f242a5ae2fd43a1ec0a32319ab6c10a227", size = 2367756, upload-time = "2025-10-29T13:04:22.736Z" }, + { url = "https://files.pythonhosted.org/packages/06/2d/4e70e8c06542db92c3fffaecb43ebfc4114a411505bff574d4da7d82c7db/grimp-3.13-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a66585b4af46c3fbadbef495483514bee037e8c3075ed179ba4f13e494eb7899", size = 2358595, upload-time = "2025-10-29T13:04:35.595Z" }, + { url = "https://files.pythonhosted.org/packages/dd/06/c511d39eb6c73069af277f4e74991f1f29a05d90cab61f5416b9fc43932f/grimp-3.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:29f68c6e2ff70d782ca0e989ec4ec44df73ba847937bcbb6191499224a2f84e2", size = 2381464, upload-time = "2025-10-29T13:04:48.265Z" }, + { url = "https://files.pythonhosted.org/packages/86/f5/42197d69e4c9e2e7eed091d06493da3824e07c37324155569aa895c3b5f7/grimp-3.13-cp312-cp312-win32.whl", hash = "sha256:cc996dcd1a44ae52d257b9a3e98838f8ecfdc42f7c62c8c82c2fcd3828155c98", size = 1758510, upload-time = "2025-10-29T13:05:11.74Z" }, + { url = "https://files.pythonhosted.org/packages/30/dd/59c5f19f51e25f3dbf1c9e88067a88165f649ba1b8e4174dbaf1c950f78b/grimp-3.13-cp312-cp312-win_amd64.whl", hash = "sha256:e2966435947e45b11568f04a65863dcf836343c11ae44aeefdaa7f07eb1a0576", size = 1859530, upload-time = "2025-10-29T13:05:02.638Z" }, + { url = "https://files.pythonhosted.org/packages/e5/81/82de1b5d82701214b1f8e32b2e71fde8e1edbb4f2cdca9beb22ee6c8796d/grimp-3.13-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5a6a3c76525b018c85c0e3a632d94d72be02225f8ada56670f3f213cf0762be4", size = 2145955, upload-time = "2025-10-29T13:02:47.559Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ae/ada18cb73bdf97094af1c60070a5b85549482a57c509ee9a23fdceed4fc3/grimp-3.13-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:239e9b347af4da4cf69465bfa7b2901127f6057bc73416ba8187fb1eabafc6ea", size = 2107150, upload-time = "2025-10-29T13:02:59.891Z" }, + { url = "https://files.pythonhosted.org/packages/10/5e/6d8c65643ad5a1b6e00cc2cd8f56fc063923485f07c59a756fa61eefe7f2/grimp-3.13-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6db85ce2dc2f804a2edd1c1e9eaa46d282e1f0051752a83ca08ca8b87f87376", size = 2257515, upload-time = "2025-10-29T13:03:36.705Z" }, + { url = "https://files.pythonhosted.org/packages/b2/62/72cbfd7d0f2b95a53edd01d5f6b0d02bde38db739a727e35b76c13e0d0a8/grimp-3.13-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e000f3590bcc6ff7c781ebbc1ac4eb919f97180f13cc4002c868822167bd9aed", size = 2441262, upload-time = "2025-10-29T13:03:12.158Z" }, + { url = "https://files.pythonhosted.org/packages/18/00/b9209ab385567c3bddffb5d9eeecf9cb432b05c30ca8f35904b06e206a89/grimp-3.13-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2374c217c862c1af933a430192d6a7c6723ed1d90303f1abbc26f709bbb9263", size = 2318557, upload-time = "2025-10-29T13:03:23.925Z" }, + { url = "https://files.pythonhosted.org/packages/11/4d/a3d73c11d09da00a53ceafe2884a71c78f5a76186af6d633cadd6c85d850/grimp-3.13-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ed0ff17d559ff2e7fa1be8ae086bc4fedcace5d7b12017f60164db8d9a8d806", size = 2180811, upload-time = "2025-10-29T13:03:47.461Z" }, + { url = "https://files.pythonhosted.org/packages/c1/9a/1cdfaa7d7beefd8859b190dfeba11d5ec074e8702b2903e9f182d662ed63/grimp-3.13-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:43960234aabce018c8d796ec8b77c484a1c9cbb6a3bc036a0d307c8dade9874c", size = 2329205, upload-time = "2025-10-29T13:04:15.845Z" }, + { url = "https://files.pythonhosted.org/packages/86/73/b36f86ef98df96e7e8a6166dfa60c8db5d597f051e613a3112f39a870b4c/grimp-3.13-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:44420b638b3e303f32314bd4d309f15de1666629035acd1cdd3720c15917ac85", size = 2368745, upload-time = "2025-10-29T13:04:29.706Z" }, + { url = "https://files.pythonhosted.org/packages/02/2f/0ce37872fad5c4b82d727f6e435fd5bc76f701279bddc9666710318940cf/grimp-3.13-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:f6127fdb982cf135612504d34aa16b841f421e54751fcd54f80b9531decb2b3f", size = 2358753, upload-time = "2025-10-29T13:04:42.632Z" }, + { url = "https://files.pythonhosted.org/packages/bb/23/935c888ac9ee71184fe5adf5ea86648746739be23c85932857ac19fc1d17/grimp-3.13-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:69893a9ef1edea25226ed17e8e8981e32900c59703972e0780c0e927ce624f75", size = 2383066, upload-time = "2025-10-29T13:04:55.073Z" }, ] [[package]] name = "grpc-google-iam-v1" -version = "0.14.2" +version = "0.14.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "googleapis-common-protos", extra = ["grpc"] }, { name = "grpcio" }, { name = "protobuf" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b9/4e/8d0ca3b035e41fe0b3f31ebbb638356af720335e5a11154c330169b40777/grpc_google_iam_v1-0.14.2.tar.gz", hash = "sha256:b3e1fc387a1a329e41672197d0ace9de22c78dd7d215048c4c78712073f7bd20", size = 16259, upload-time = "2025-03-17T11:40:23.586Z" } +sdist = { url = "https://files.pythonhosted.org/packages/76/1e/1011451679a983f2f5c6771a1682542ecb027776762ad031fd0d7129164b/grpc_google_iam_v1-0.14.3.tar.gz", hash = "sha256:879ac4ef33136c5491a6300e27575a9ec760f6cdf9a2518798c1b8977a5dc389", size = 23745, upload-time = "2025-10-15T21:14:53.318Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/66/6f/dd9b178aee7835b96c2e63715aba6516a9d50f6bebbd1cc1d32c82a2a6c3/grpc_google_iam_v1-0.14.2-py3-none-any.whl", hash = "sha256:a3171468459770907926d56a440b2bb643eec1d7ba215f48f3ecece42b4d8351", size = 19242, upload-time = "2025-03-17T11:40:22.648Z" }, + { url = "https://files.pythonhosted.org/packages/4a/bd/330a1bbdb1afe0b96311249e699b6dc9cfc17916394fd4503ac5aca2514b/grpc_google_iam_v1-0.14.3-py3-none-any.whl", hash = "sha256:7a7f697e017a067206a3dfef44e4c634a34d3dee135fe7d7a4613fe3e59217e6", size = 32690, upload-time = "2025-10-15T21:14:51.72Z" }, ] [[package]] name = "grpcio" -version = "1.75.1" +version = "1.76.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9d/f7/8963848164c7604efb3a3e6ee457fdb3a469653e19002bd24742473254f8/grpcio-1.75.1.tar.gz", hash = "sha256:3e81d89ece99b9ace23a6916880baca613c03a799925afb2857887efa8b1b3d2", size = 12731327, upload-time = "2025-09-26T09:03:36.887Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/e0/318c1ce3ae5a17894d5791e87aea147587c9e702f24122cc7a5c8bbaeeb1/grpcio-1.76.0.tar.gz", hash = "sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73", size = 12785182, upload-time = "2025-10-21T16:23:12.106Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/3c/35ca9747473a306bfad0cee04504953f7098527cd112a4ab55c55af9e7bd/grpcio-1.75.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:573855ca2e58e35032aff30bfbd1ee103fbcf4472e4b28d4010757700918e326", size = 5709761, upload-time = "2025-09-26T09:01:28.528Z" }, - { url = "https://files.pythonhosted.org/packages/c9/2c/ecbcb4241e4edbe85ac2663f885726fea0e947767401288b50d8fdcb9200/grpcio-1.75.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:6a4996a2c8accc37976dc142d5991adf60733e223e5c9a2219e157dc6a8fd3a2", size = 11496691, upload-time = "2025-09-26T09:01:31.214Z" }, - { url = "https://files.pythonhosted.org/packages/81/40/bc07aee2911f0d426fa53fe636216100c31a8ea65a400894f280274cb023/grpcio-1.75.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b1ea1bbe77ecbc1be00af2769f4ae4a88ce93be57a4f3eebd91087898ed749f9", size = 6296084, upload-time = "2025-09-26T09:01:34.596Z" }, - { url = "https://files.pythonhosted.org/packages/b8/d1/10c067f6c67396cbf46448b80f27583b5e8c4b46cdfbe18a2a02c2c2f290/grpcio-1.75.1-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:e5b425aee54cc5e3e3c58f00731e8a33f5567965d478d516d35ef99fd648ab68", size = 6950403, upload-time = "2025-09-26T09:01:36.736Z" }, - { url = "https://files.pythonhosted.org/packages/3f/42/5f628abe360b84dfe8dd8f32be6b0606dc31dc04d3358eef27db791ea4d5/grpcio-1.75.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0049a7bf547dafaeeb1db17079ce79596c298bfe308fc084d023c8907a845b9a", size = 6470166, upload-time = "2025-09-26T09:01:39.474Z" }, - { url = "https://files.pythonhosted.org/packages/c3/93/a24035080251324019882ee2265cfde642d6476c0cf8eb207fc693fcebdc/grpcio-1.75.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b8ea230c7f77c0a1a3208a04a1eda164633fb0767b4cefd65a01079b65e5b1f", size = 7107828, upload-time = "2025-09-26T09:01:41.782Z" }, - { url = "https://files.pythonhosted.org/packages/e4/f8/d18b984c1c9ba0318e3628dbbeb6af77a5007f02abc378c845070f2d3edd/grpcio-1.75.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:36990d629c3c9fb41e546414e5af52d0a7af37ce7113d9682c46d7e2919e4cca", size = 8045421, upload-time = "2025-09-26T09:01:45.835Z" }, - { url = "https://files.pythonhosted.org/packages/7e/b6/4bf9aacff45deca5eac5562547ed212556b831064da77971a4e632917da3/grpcio-1.75.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b10ad908118d38c2453ade7ff790e5bce36580c3742919007a2a78e3a1e521ca", size = 7503290, upload-time = "2025-09-26T09:01:49.28Z" }, - { url = "https://files.pythonhosted.org/packages/3b/15/d8d69d10223cb54c887a2180bd29fe5fa2aec1d4995c8821f7aa6eaf72e4/grpcio-1.75.1-cp311-cp311-win32.whl", hash = "sha256:d6be2b5ee7bea656c954dcf6aa8093c6f0e6a3ef9945c99d99fcbfc88c5c0bfe", size = 3950631, upload-time = "2025-09-26T09:01:51.23Z" }, - { url = "https://files.pythonhosted.org/packages/8a/40/7b8642d45fff6f83300c24eaac0380a840e5e7fe0e8d80afd31b99d7134e/grpcio-1.75.1-cp311-cp311-win_amd64.whl", hash = "sha256:61c692fb05956b17dd6d1ab480f7f10ad0536dba3bc8fd4e3c7263dc244ed772", size = 4646131, upload-time = "2025-09-26T09:01:53.266Z" }, - { url = "https://files.pythonhosted.org/packages/3a/81/42be79e73a50aaa20af66731c2defeb0e8c9008d9935a64dd8ea8e8c44eb/grpcio-1.75.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:7b888b33cd14085d86176b1628ad2fcbff94cfbbe7809465097aa0132e58b018", size = 5668314, upload-time = "2025-09-26T09:01:55.424Z" }, - { url = "https://files.pythonhosted.org/packages/c5/a7/3686ed15822fedc58c22f82b3a7403d9faf38d7c33de46d4de6f06e49426/grpcio-1.75.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:8775036efe4ad2085975531d221535329f5dac99b6c2a854a995456098f99546", size = 11476125, upload-time = "2025-09-26T09:01:57.927Z" }, - { url = "https://files.pythonhosted.org/packages/14/85/21c71d674f03345ab183c634ecd889d3330177e27baea8d5d247a89b6442/grpcio-1.75.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bb658f703468d7fbb5dcc4037c65391b7dc34f808ac46ed9136c24fc5eeb041d", size = 6246335, upload-time = "2025-09-26T09:02:00.76Z" }, - { url = "https://files.pythonhosted.org/packages/fd/db/3beb661bc56a385ae4fa6b0e70f6b91ac99d47afb726fe76aaff87ebb116/grpcio-1.75.1-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:4b7177a1cdb3c51b02b0c0a256b0a72fdab719600a693e0e9037949efffb200b", size = 6916309, upload-time = "2025-09-26T09:02:02.894Z" }, - { url = "https://files.pythonhosted.org/packages/1e/9c/eda9fe57f2b84343d44c1b66cf3831c973ba29b078b16a27d4587a1fdd47/grpcio-1.75.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7d4fa6ccc3ec2e68a04f7b883d354d7fea22a34c44ce535a2f0c0049cf626ddf", size = 6435419, upload-time = "2025-09-26T09:02:05.055Z" }, - { url = "https://files.pythonhosted.org/packages/c3/b8/090c98983e0a9d602e3f919a6e2d4e470a8b489452905f9a0fa472cac059/grpcio-1.75.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3d86880ecaeb5b2f0a8afa63824de93adb8ebe4e49d0e51442532f4e08add7d6", size = 7064893, upload-time = "2025-09-26T09:02:07.275Z" }, - { url = "https://files.pythonhosted.org/packages/ec/c0/6d53d4dbbd00f8bd81571f5478d8a95528b716e0eddb4217cc7cb45aae5f/grpcio-1.75.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a8041d2f9e8a742aeae96f4b047ee44e73619f4f9d24565e84d5446c623673b6", size = 8011922, upload-time = "2025-09-26T09:02:09.527Z" }, - { url = "https://files.pythonhosted.org/packages/f2/7c/48455b2d0c5949678d6982c3e31ea4d89df4e16131b03f7d5c590811cbe9/grpcio-1.75.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3652516048bf4c314ce12be37423c79829f46efffb390ad64149a10c6071e8de", size = 7466181, upload-time = "2025-09-26T09:02:12.279Z" }, - { url = "https://files.pythonhosted.org/packages/fd/12/04a0e79081e3170b6124f8cba9b6275871276be06c156ef981033f691880/grpcio-1.75.1-cp312-cp312-win32.whl", hash = "sha256:44b62345d8403975513af88da2f3d5cc76f73ca538ba46596f92a127c2aea945", size = 3938543, upload-time = "2025-09-26T09:02:14.77Z" }, - { url = "https://files.pythonhosted.org/packages/5f/d7/11350d9d7fb5adc73d2b0ebf6ac1cc70135577701e607407fe6739a90021/grpcio-1.75.1-cp312-cp312-win_amd64.whl", hash = "sha256:b1e191c5c465fa777d4cafbaacf0c01e0d5278022082c0abbd2ee1d6454ed94d", size = 4641938, upload-time = "2025-09-26T09:02:16.927Z" }, + { url = "https://files.pythonhosted.org/packages/a0/00/8163a1beeb6971f66b4bbe6ac9457b97948beba8dd2fc8e1281dce7f79ec/grpcio-1.76.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:2e1743fbd7f5fa713a1b0a8ac8ebabf0ec980b5d8809ec358d488e273b9cf02a", size = 5843567, upload-time = "2025-10-21T16:20:52.829Z" }, + { url = "https://files.pythonhosted.org/packages/10/c1/934202f5cf335e6d852530ce14ddb0fef21be612ba9ecbbcbd4d748ca32d/grpcio-1.76.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:a8c2cf1209497cf659a667d7dea88985e834c24b7c3b605e6254cbb5076d985c", size = 11848017, upload-time = "2025-10-21T16:20:56.705Z" }, + { url = "https://files.pythonhosted.org/packages/11/0b/8dec16b1863d74af6eb3543928600ec2195af49ca58b16334972f6775663/grpcio-1.76.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:08caea849a9d3c71a542827d6df9d5a69067b0a1efbea8a855633ff5d9571465", size = 6412027, upload-time = "2025-10-21T16:20:59.3Z" }, + { url = "https://files.pythonhosted.org/packages/d7/64/7b9e6e7ab910bea9d46f2c090380bab274a0b91fb0a2fe9b0cd399fffa12/grpcio-1.76.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f0e34c2079d47ae9f6188211db9e777c619a21d4faba6977774e8fa43b085e48", size = 7075913, upload-time = "2025-10-21T16:21:01.645Z" }, + { url = "https://files.pythonhosted.org/packages/68/86/093c46e9546073cefa789bd76d44c5cb2abc824ca62af0c18be590ff13ba/grpcio-1.76.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8843114c0cfce61b40ad48df65abcfc00d4dba82eae8718fab5352390848c5da", size = 6615417, upload-time = "2025-10-21T16:21:03.844Z" }, + { url = "https://files.pythonhosted.org/packages/f7/b6/5709a3a68500a9c03da6fb71740dcdd5ef245e39266461a03f31a57036d8/grpcio-1.76.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8eddfb4d203a237da6f3cc8a540dad0517d274b5a1e9e636fd8d2c79b5c1d397", size = 7199683, upload-time = "2025-10-21T16:21:06.195Z" }, + { url = "https://files.pythonhosted.org/packages/91/d3/4b1f2bf16ed52ce0b508161df3a2d186e4935379a159a834cb4a7d687429/grpcio-1.76.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:32483fe2aab2c3794101c2a159070584e5db11d0aa091b2c0ea9c4fc43d0d749", size = 8163109, upload-time = "2025-10-21T16:21:08.498Z" }, + { url = "https://files.pythonhosted.org/packages/5c/61/d9043f95f5f4cf085ac5dd6137b469d41befb04bd80280952ffa2a4c3f12/grpcio-1.76.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:dcfe41187da8992c5f40aa8c5ec086fa3672834d2be57a32384c08d5a05b4c00", size = 7626676, upload-time = "2025-10-21T16:21:10.693Z" }, + { url = "https://files.pythonhosted.org/packages/36/95/fd9a5152ca02d8881e4dd419cdd790e11805979f499a2e5b96488b85cf27/grpcio-1.76.0-cp311-cp311-win32.whl", hash = "sha256:2107b0c024d1b35f4083f11245c0e23846ae64d02f40b2b226684840260ed054", size = 3997688, upload-time = "2025-10-21T16:21:12.746Z" }, + { url = "https://files.pythonhosted.org/packages/60/9c/5c359c8d4c9176cfa3c61ecd4efe5affe1f38d9bae81e81ac7186b4c9cc8/grpcio-1.76.0-cp311-cp311-win_amd64.whl", hash = "sha256:522175aba7af9113c48ec10cc471b9b9bd4f6ceb36aeb4544a8e2c80ed9d252d", size = 4709315, upload-time = "2025-10-21T16:21:15.26Z" }, + { url = "https://files.pythonhosted.org/packages/bf/05/8e29121994b8d959ffa0afd28996d452f291b48cfc0875619de0bde2c50c/grpcio-1.76.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:81fd9652b37b36f16138611c7e884eb82e0cec137c40d3ef7c3f9b3ed00f6ed8", size = 5799718, upload-time = "2025-10-21T16:21:17.939Z" }, + { url = "https://files.pythonhosted.org/packages/d9/75/11d0e66b3cdf998c996489581bdad8900db79ebd83513e45c19548f1cba4/grpcio-1.76.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:04bbe1bfe3a68bbfd4e52402ab7d4eb59d72d02647ae2042204326cf4bbad280", size = 11825627, upload-time = "2025-10-21T16:21:20.466Z" }, + { url = "https://files.pythonhosted.org/packages/28/50/2f0aa0498bc188048f5d9504dcc5c2c24f2eb1a9337cd0fa09a61a2e75f0/grpcio-1.76.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d388087771c837cdb6515539f43b9d4bf0b0f23593a24054ac16f7a960be16f4", size = 6359167, upload-time = "2025-10-21T16:21:23.122Z" }, + { url = "https://files.pythonhosted.org/packages/66/e5/bbf0bb97d29ede1d59d6588af40018cfc345b17ce979b7b45424628dc8bb/grpcio-1.76.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:9f8f757bebaaea112c00dba718fc0d3260052ce714e25804a03f93f5d1c6cc11", size = 7044267, upload-time = "2025-10-21T16:21:25.995Z" }, + { url = "https://files.pythonhosted.org/packages/f5/86/f6ec2164f743d9609691115ae8ece098c76b894ebe4f7c94a655c6b03e98/grpcio-1.76.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6", size = 6573963, upload-time = "2025-10-21T16:21:28.631Z" }, + { url = "https://files.pythonhosted.org/packages/60/bc/8d9d0d8505feccfdf38a766d262c71e73639c165b311c9457208b56d92ae/grpcio-1.76.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f92f88e6c033db65a5ae3d97905c8fea9c725b63e28d5a75cb73b49bda5024d8", size = 7164484, upload-time = "2025-10-21T16:21:30.837Z" }, + { url = "https://files.pythonhosted.org/packages/67/e6/5d6c2fc10b95edf6df9b8f19cf10a34263b7fd48493936fffd5085521292/grpcio-1.76.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4baf3cbe2f0be3289eb68ac8ae771156971848bb8aaff60bad42005539431980", size = 8127777, upload-time = "2025-10-21T16:21:33.577Z" }, + { url = "https://files.pythonhosted.org/packages/3f/c8/dce8ff21c86abe025efe304d9e31fdb0deaaa3b502b6a78141080f206da0/grpcio-1.76.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882", size = 7594014, upload-time = "2025-10-21T16:21:41.882Z" }, + { url = "https://files.pythonhosted.org/packages/e0/42/ad28191ebf983a5d0ecef90bab66baa5a6b18f2bfdef9d0a63b1973d9f75/grpcio-1.76.0-cp312-cp312-win32.whl", hash = "sha256:45d59a649a82df5718fd9527ce775fd66d1af35e6d31abdcdc906a49c6822958", size = 3984750, upload-time = "2025-10-21T16:21:44.006Z" }, + { url = "https://files.pythonhosted.org/packages/9e/00/7bd478cbb851c04a48baccaa49b75abaa8e4122f7d86da797500cccdd771/grpcio-1.76.0-cp312-cp312-win_amd64.whl", hash = "sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347", size = 4704003, upload-time = "2025-10-21T16:21:46.244Z" }, ] [[package]] @@ -2622,55 +2635,51 @@ wheels = [ [[package]] name = "hf-xet" -version = "1.1.10" +version = "1.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/74/31/feeddfce1748c4a233ec1aa5b7396161c07ae1aa9b7bdbc9a72c3c7dd768/hf_xet-1.1.10.tar.gz", hash = "sha256:408aef343800a2102374a883f283ff29068055c111f003ff840733d3b715bb97", size = 487910, upload-time = "2025-09-12T20:10:27.12Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/6e/0f11bacf08a67f7fb5ee09740f2ca54163863b07b70d579356e9222ce5d8/hf_xet-1.2.0.tar.gz", hash = "sha256:a8c27070ca547293b6890c4bf389f713f80e8c478631432962bb7f4bc0bd7d7f", size = 506020, upload-time = "2025-10-24T19:04:32.129Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/a2/343e6d05de96908366bdc0081f2d8607d61200be2ac802769c4284cc65bd/hf_xet-1.1.10-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:686083aca1a6669bc85c21c0563551cbcdaa5cf7876a91f3d074a030b577231d", size = 2761466, upload-time = "2025-09-12T20:10:22.836Z" }, - { url = "https://files.pythonhosted.org/packages/31/f9/6215f948ac8f17566ee27af6430ea72045e0418ce757260248b483f4183b/hf_xet-1.1.10-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:71081925383b66b24eedff3013f8e6bbd41215c3338be4b94ba75fd75b21513b", size = 2623807, upload-time = "2025-09-12T20:10:21.118Z" }, - { url = "https://files.pythonhosted.org/packages/15/07/86397573efefff941e100367bbda0b21496ffcdb34db7ab51912994c32a2/hf_xet-1.1.10-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b6bceb6361c80c1cc42b5a7b4e3efd90e64630bcf11224dcac50ef30a47e435", size = 3186960, upload-time = "2025-09-12T20:10:19.336Z" }, - { url = "https://files.pythonhosted.org/packages/01/a7/0b2e242b918cc30e1f91980f3c4b026ff2eedaf1e2ad96933bca164b2869/hf_xet-1.1.10-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eae7c1fc8a664e54753ffc235e11427ca61f4b0477d757cc4eb9ae374b69f09c", size = 3087167, upload-time = "2025-09-12T20:10:17.255Z" }, - { url = "https://files.pythonhosted.org/packages/4a/25/3e32ab61cc7145b11eee9d745988e2f0f4fafda81b25980eebf97d8cff15/hf_xet-1.1.10-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0a0005fd08f002180f7a12d4e13b22be277725bc23ed0529f8add5c7a6309c06", size = 3248612, upload-time = "2025-09-12T20:10:24.093Z" }, - { url = "https://files.pythonhosted.org/packages/2c/3d/ab7109e607ed321afaa690f557a9ada6d6d164ec852fd6bf9979665dc3d6/hf_xet-1.1.10-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f900481cf6e362a6c549c61ff77468bd59d6dd082f3170a36acfef2eb6a6793f", size = 3353360, upload-time = "2025-09-12T20:10:25.563Z" }, - { url = "https://files.pythonhosted.org/packages/ee/0e/471f0a21db36e71a2f1752767ad77e92d8cde24e974e03d662931b1305ec/hf_xet-1.1.10-cp37-abi3-win_amd64.whl", hash = "sha256:5f54b19cc347c13235ae7ee98b330c26dd65ef1df47e5316ffb1e87713ca7045", size = 2804691, upload-time = "2025-09-12T20:10:28.433Z" }, + { url = "https://files.pythonhosted.org/packages/96/2d/22338486473df5923a9ab7107d375dbef9173c338ebef5098ef593d2b560/hf_xet-1.2.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:46740d4ac024a7ca9b22bebf77460ff43332868b661186a8e46c227fdae01848", size = 2866099, upload-time = "2025-10-24T19:04:15.366Z" }, + { url = "https://files.pythonhosted.org/packages/7f/8c/c5becfa53234299bc2210ba314eaaae36c2875e0045809b82e40a9544f0c/hf_xet-1.2.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:27df617a076420d8845bea087f59303da8be17ed7ec0cd7ee3b9b9f579dff0e4", size = 2722178, upload-time = "2025-10-24T19:04:13.695Z" }, + { url = "https://files.pythonhosted.org/packages/9a/92/cf3ab0b652b082e66876d08da57fcc6fa2f0e6c70dfbbafbd470bb73eb47/hf_xet-1.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3651fd5bfe0281951b988c0facbe726aa5e347b103a675f49a3fa8144c7968fd", size = 3320214, upload-time = "2025-10-24T19:04:03.596Z" }, + { url = "https://files.pythonhosted.org/packages/46/92/3f7ec4a1b6a65bf45b059b6d4a5d38988f63e193056de2f420137e3c3244/hf_xet-1.2.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d06fa97c8562fb3ee7a378dd9b51e343bc5bc8190254202c9771029152f5e08c", size = 3229054, upload-time = "2025-10-24T19:04:01.949Z" }, + { url = "https://files.pythonhosted.org/packages/0b/dd/7ac658d54b9fb7999a0ccb07ad863b413cbaf5cf172f48ebcd9497ec7263/hf_xet-1.2.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4c1428c9ae73ec0939410ec73023c4f842927f39db09b063b9482dac5a3bb737", size = 3413812, upload-time = "2025-10-24T19:04:24.585Z" }, + { url = "https://files.pythonhosted.org/packages/92/68/89ac4e5b12a9ff6286a12174c8538a5930e2ed662091dd2572bbe0a18c8a/hf_xet-1.2.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a55558084c16b09b5ed32ab9ed38421e2d87cf3f1f89815764d1177081b99865", size = 3508920, upload-time = "2025-10-24T19:04:26.927Z" }, + { url = "https://files.pythonhosted.org/packages/cb/44/870d44b30e1dcfb6a65932e3e1506c103a8a5aea9103c337e7a53180322c/hf_xet-1.2.0-cp37-abi3-win_amd64.whl", hash = "sha256:e6584a52253f72c9f52f9e549d5895ca7a471608495c4ecaa6cc73dba2b24d69", size = 2905735, upload-time = "2025-10-24T19:04:35.928Z" }, ] [[package]] name = "hiredis" -version = "3.2.1" +version = "3.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f7/08/24b72f425b75e1de7442fb1740f69ca66d5820b9f9c0e2511ff9aadab3b7/hiredis-3.2.1.tar.gz", hash = "sha256:5a5f64479bf04dd829fe7029fad0ea043eac4023abc6e946668cbbec3493a78d", size = 89096, upload-time = "2025-05-23T11:41:57.227Z" } +sdist = { url = "https://files.pythonhosted.org/packages/65/82/d2817ce0653628e0a0cb128533f6af0dd6318a49f3f3a6a7bd1f2f2154af/hiredis-3.3.0.tar.gz", hash = "sha256:105596aad9249634361815c574351f1bd50455dc23b537c2940066c4a9dea685", size = 89048, upload-time = "2025-10-14T16:33:34.263Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/48/84/2ea9636f2ba0811d9eb3bebbbfa84f488238180ddab70c9cb7fa13419d78/hiredis-3.2.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:e4ae0be44cab5e74e6e4c4a93d04784629a45e781ff483b136cc9e1b9c23975c", size = 82425, upload-time = "2025-05-23T11:39:54.135Z" }, - { url = "https://files.pythonhosted.org/packages/fc/24/b9ebf766a99998fda3975937afa4912e98de9d7f8d0b83f48096bdd961c1/hiredis-3.2.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:24647e84c9f552934eb60b7f3d2116f8b64a7020361da9369e558935ca45914d", size = 45231, upload-time = "2025-05-23T11:39:55.455Z" }, - { url = "https://files.pythonhosted.org/packages/68/4c/c009b4d9abeb964d607f0987561892d1589907f770b9e5617552b34a4a4d/hiredis-3.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6fb3e92d1172da8decc5f836bf8b528c0fc9b6d449f1353e79ceeb9dc1801132", size = 43240, upload-time = "2025-05-23T11:39:57.8Z" }, - { url = "https://files.pythonhosted.org/packages/e9/83/d53f3ae9e4ac51b8a35afb7ccd68db871396ed1d7c8ba02ce2c30de0cf17/hiredis-3.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38ba7a32e51e518b6b3e470142e52ed2674558e04d7d73d86eb19ebcb37d7d40", size = 169624, upload-time = "2025-05-23T11:40:00.055Z" }, - { url = "https://files.pythonhosted.org/packages/91/2f/f9f091526e22a45385d45f3870204dc78aee365b6fe32e679e65674da6a7/hiredis-3.2.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4fc632be73174891d6bb71480247e57b2fd8f572059f0a1153e4d0339e919779", size = 165799, upload-time = "2025-05-23T11:40:01.194Z" }, - { url = "https://files.pythonhosted.org/packages/1c/cc/e561274438cdb19794f0638136a5a99a9ca19affcb42679b12a78016b8ad/hiredis-3.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f03e6839ff21379ad3c195e0700fc9c209e7f344946dea0f8a6d7b5137a2a141", size = 180612, upload-time = "2025-05-23T11:40:02.385Z" }, - { url = "https://files.pythonhosted.org/packages/83/ba/a8a989f465191d55672e57aea2a331bfa3a74b5cbc6f590031c9e11f7491/hiredis-3.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99983873e37c71bb71deb544670ff4f9d6920dab272aaf52365606d87a4d6c73", size = 169934, upload-time = "2025-05-23T11:40:03.524Z" }, - { url = "https://files.pythonhosted.org/packages/52/5f/1148e965df1c67b17bdcaef199f54aec3def0955d19660a39c6ee10a6f55/hiredis-3.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffd982c419f48e3a57f592678c72474429465bb4bfc96472ec805f5d836523f0", size = 170074, upload-time = "2025-05-23T11:40:04.618Z" }, - { url = "https://files.pythonhosted.org/packages/43/5e/e6846ad159a938b539fb8d472e2e68cb6758d7c9454ea0520211f335ea72/hiredis-3.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bc993f4aa4abc029347f309e722f122e05a3b8a0c279ae612849b5cc9dc69f2d", size = 164158, upload-time = "2025-05-23T11:40:05.653Z" }, - { url = "https://files.pythonhosted.org/packages/0a/a1/5891e0615f0993f194c1b51a65aaac063b0db318a70df001b28e49f0579d/hiredis-3.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:dde790d420081f18b5949227649ccb3ed991459df33279419a25fcae7f97cd92", size = 162591, upload-time = "2025-05-23T11:40:07.041Z" }, - { url = "https://files.pythonhosted.org/packages/d4/da/8bce52ca81716f53c1014f689aea4c170ba6411e6848f81a1bed1fc375eb/hiredis-3.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b0c8cae7edbef860afcf3177b705aef43e10b5628f14d5baf0ec69668247d08d", size = 174808, upload-time = "2025-05-23T11:40:09.146Z" }, - { url = "https://files.pythonhosted.org/packages/84/91/fc1ef444ed4dc432b5da9b48e9bd23266c703528db7be19e2b608d67ba06/hiredis-3.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e8a90eaca7e1ce7f175584f07a2cdbbcab13f4863f9f355d7895c4d28805f65b", size = 167060, upload-time = "2025-05-23T11:40:10.757Z" }, - { url = "https://files.pythonhosted.org/packages/66/ad/beebf73a5455f232b97e00564d1e8ad095d4c6e18858c60c6cfdd893ac1e/hiredis-3.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:476031958fa44e245e803827e0787d49740daa4de708fe514370293ce519893a", size = 164833, upload-time = "2025-05-23T11:40:12.001Z" }, - { url = "https://files.pythonhosted.org/packages/75/79/a9591bdc0148c0fbdf54cf6f3d449932d3b3b8779e87f33fa100a5a8088f/hiredis-3.2.1-cp311-cp311-win32.whl", hash = "sha256:eb3f5df2a9593b4b4b676dce3cea53b9c6969fc372875188589ddf2bafc7f624", size = 20402, upload-time = "2025-05-23T11:40:13.216Z" }, - { url = "https://files.pythonhosted.org/packages/9f/05/c93cc6fab31e3c01b671126c82f44372fb211facb8bd4571fd372f50898d/hiredis-3.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:1402e763d8a9fdfcc103bbf8b2913971c0a3f7b8a73deacbda3dfe5f3a9d1e0b", size = 22085, upload-time = "2025-05-23T11:40:14.19Z" }, - { url = "https://files.pythonhosted.org/packages/60/a1/6da1578a22df1926497f7a3f6a3d2408fe1d1559f762c1640af5762a8eb6/hiredis-3.2.1-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:3742d8b17e73c198cabeab11da35f2e2a81999d406f52c6275234592256bf8e8", size = 82627, upload-time = "2025-05-23T11:40:15.362Z" }, - { url = "https://files.pythonhosted.org/packages/6c/b1/1056558ca8dc330be5bb25162fe5f268fee71571c9a535153df9f871a073/hiredis-3.2.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:9c2f3176fb617a79f6cccf22cb7d2715e590acb534af6a82b41f8196ad59375d", size = 45404, upload-time = "2025-05-23T11:40:16.72Z" }, - { url = "https://files.pythonhosted.org/packages/58/4f/13d1fa1a6b02a99e9fed8f546396f2d598c3613c98e6c399a3284fa65361/hiredis-3.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a8bd46189c7fa46174e02670dc44dfecb60f5bd4b67ed88cb050d8f1fd842f09", size = 43299, upload-time = "2025-05-23T11:40:17.697Z" }, - { url = "https://files.pythonhosted.org/packages/c0/25/ddfac123ba5a32eb1f0b40ba1b2ec98a599287f7439def8856c3c7e5dd0d/hiredis-3.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f86ee4488c8575b58139cdfdddeae17f91e9a893ffee20260822add443592e2f", size = 172194, upload-time = "2025-05-23T11:40:19.143Z" }, - { url = "https://files.pythonhosted.org/packages/2c/1e/443a3703ce570b631ca43494094fbaeb051578a0ebe4bfcefde351e1ba25/hiredis-3.2.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3717832f4a557b2fe7060b9d4a7900e5de287a15595e398c3f04df69019ca69d", size = 168429, upload-time = "2025-05-23T11:40:20.329Z" }, - { url = "https://files.pythonhosted.org/packages/3b/d6/0d8c6c706ed79b2298c001b5458c055615e3166533dcee3900e821a18a3e/hiredis-3.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5cb12c21fb9e2403d28c4e6a38120164973342d34d08120f2d7009b66785644", size = 182967, upload-time = "2025-05-23T11:40:21.921Z" }, - { url = "https://files.pythonhosted.org/packages/da/68/da8dd231fbce858b5a20ab7d7bf558912cd125f08bac4c778865ef5fe2c2/hiredis-3.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:080fda1510bbd389af91f919c11a4f2aa4d92f0684afa4709236faa084a42cac", size = 172495, upload-time = "2025-05-23T11:40:23.105Z" }, - { url = "https://files.pythonhosted.org/packages/65/25/83a31420535e2778662caa95533d5c997011fa6a88331f0cdb22afea9ec3/hiredis-3.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1252e10a1f3273d1c6bf2021e461652c2e11b05b83e0915d6eb540ec7539afe2", size = 173142, upload-time = "2025-05-23T11:40:24.24Z" }, - { url = "https://files.pythonhosted.org/packages/41/d7/cb907348889eb75e2aa2e6b63e065b611459e0f21fe1e371a968e13f0d55/hiredis-3.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d9e320e99ab7d2a30dc91ff6f745ba38d39b23f43d345cdee9881329d7b511d6", size = 166433, upload-time = "2025-05-23T11:40:25.287Z" }, - { url = "https://files.pythonhosted.org/packages/01/5d/7cbc69d82af7b29a95723d50f5261555ba3d024bfbdc414bdc3d23c0defb/hiredis-3.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:641668f385f16550fdd6fdc109b0af6988b94ba2acc06770a5e06a16e88f320c", size = 164883, upload-time = "2025-05-23T11:40:26.454Z" }, - { url = "https://files.pythonhosted.org/packages/f9/00/f995b1296b1d7e0247651347aa230f3225a9800e504fdf553cf7cd001cf7/hiredis-3.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1e1f44208c39d6c345ff451f82f21e9eeda6fe9af4ac65972cc3eeb58d41f7cb", size = 177262, upload-time = "2025-05-23T11:40:27.576Z" }, - { url = "https://files.pythonhosted.org/packages/c5/f3/723a67d729e94764ce9e0d73fa5f72a0f87d3ce3c98c9a0b27cbf001cc79/hiredis-3.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:f882a0d6415fffe1ffcb09e6281d0ba8b1ece470e866612bbb24425bf76cf397", size = 169619, upload-time = "2025-05-23T11:40:29.671Z" }, - { url = "https://files.pythonhosted.org/packages/45/58/f69028df00fb1b223e221403f3be2059ae86031e7885f955d26236bdfc17/hiredis-3.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b4e78719a0730ebffe335528531d154bc8867a246418f74ecd88adbc4d938c49", size = 167303, upload-time = "2025-05-23T11:40:30.902Z" }, - { url = "https://files.pythonhosted.org/packages/2b/7d/567411e65cce76cf265a9a4f837fd2ebc564bef6368dd42ac03f7a517c0a/hiredis-3.2.1-cp312-cp312-win32.whl", hash = "sha256:33c4604d9f79a13b84da79950a8255433fca7edaf292bbd3364fd620864ed7b2", size = 20551, upload-time = "2025-05-23T11:40:32.69Z" }, - { url = "https://files.pythonhosted.org/packages/90/74/b4c291eb4a4a874b3690ff9fc311a65d5292072556421b11b1d786e3e1d0/hiredis-3.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7b9749375bf9d171aab8813694f379f2cff0330d7424000f5e92890ad4932dc9", size = 22128, upload-time = "2025-05-23T11:40:33.686Z" }, + { url = "https://files.pythonhosted.org/packages/34/0c/be3b1093f93a7c823ca16fbfbb83d3a1de671bbd2add8da1fe2bcfccb2b8/hiredis-3.3.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:63ee6c1ae6a2462a2439eb93c38ab0315cd5f4b6d769c6a34903058ba538b5d6", size = 81813, upload-time = "2025-10-14T16:32:00.576Z" }, + { url = "https://files.pythonhosted.org/packages/95/2b/ed722d392ac59a7eee548d752506ef32c06ffdd0bce9cf91125a74b8edf9/hiredis-3.3.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:31eda3526e2065268a8f97fbe3d0e9a64ad26f1d89309e953c80885c511ea2ae", size = 46049, upload-time = "2025-10-14T16:32:01.319Z" }, + { url = "https://files.pythonhosted.org/packages/e5/61/8ace8027d5b3f6b28e1dc55f4a504be038ba8aa8bf71882b703e8f874c91/hiredis-3.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a26bae1b61b7bcafe3d0d0c7d012fb66ab3c95f2121dbea336df67e344e39089", size = 41814, upload-time = "2025-10-14T16:32:02.076Z" }, + { url = "https://files.pythonhosted.org/packages/23/0e/380ade1ffb21034976663a5128f0383533f35caccdba13ff0537dd5ace79/hiredis-3.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9546079f7fd5c50fbff9c791710049b32eebe7f9b94debec1e8b9f4c048cba2", size = 167572, upload-time = "2025-10-14T16:32:03.125Z" }, + { url = "https://files.pythonhosted.org/packages/ca/60/b4a8d2177575b896730f73e6890644591aa56790a75c2b6d6f2302a1dae6/hiredis-3.3.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ae327fc13b1157b694d53f92d50920c0051e30b0c245f980a7036e299d039ab4", size = 179373, upload-time = "2025-10-14T16:32:04.04Z" }, + { url = "https://files.pythonhosted.org/packages/31/53/a473a18d27cfe8afda7772ff9adfba1718fd31d5e9c224589dc17774fa0b/hiredis-3.3.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4016e50a8be5740a59c5af5252e5ad16c395021a999ad24c6604f0d9faf4d346", size = 177504, upload-time = "2025-10-14T16:32:04.934Z" }, + { url = "https://files.pythonhosted.org/packages/7e/0f/f6ee4c26b149063dbf5b1b6894b4a7a1f00a50e3d0cfd30a22d4c3479db3/hiredis-3.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c17b473f273465a3d2168a57a5b43846165105ac217d5652a005e14068589ddc", size = 169449, upload-time = "2025-10-14T16:32:05.808Z" }, + { url = "https://files.pythonhosted.org/packages/64/38/e3e113172289e1261ccd43e387a577dd268b0b9270721b5678735803416c/hiredis-3.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9ecd9b09b11bd0b8af87d29c3f5da628d2bdc2a6c23d2dd264d2da082bd4bf32", size = 164010, upload-time = "2025-10-14T16:32:06.695Z" }, + { url = "https://files.pythonhosted.org/packages/8d/9a/ccf4999365691ea73d0dd2ee95ee6ef23ebc9a835a7417f81765bc49eade/hiredis-3.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:00fb04eac208cd575d14f246e74a468561081ce235937ab17d77cde73aefc66c", size = 174623, upload-time = "2025-10-14T16:32:07.627Z" }, + { url = "https://files.pythonhosted.org/packages/ed/c7/ee55fa2ade078b7c4f17e8ddc9bc28881d0b71b794ebf9db4cfe4c8f0623/hiredis-3.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:60814a7d0b718adf3bfe2c32c6878b0e00d6ae290ad8e47f60d7bba3941234a6", size = 167650, upload-time = "2025-10-14T16:32:08.615Z" }, + { url = "https://files.pythonhosted.org/packages/bf/06/f6cd90275dcb0ba03f69767805151eb60b602bc25830648bd607660e1f97/hiredis-3.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fcbd1a15e935aa323b5b2534b38419511b7909b4b8ee548e42b59090a1b37bb1", size = 165452, upload-time = "2025-10-14T16:32:09.561Z" }, + { url = "https://files.pythonhosted.org/packages/c3/10/895177164a6c4409a07717b5ae058d84a908e1ab629f0401110b02aaadda/hiredis-3.3.0-cp311-cp311-win32.whl", hash = "sha256:73679607c5a19f4bcfc9cf6eb54480bcd26617b68708ac8b1079da9721be5449", size = 20394, upload-time = "2025-10-14T16:32:10.469Z" }, + { url = "https://files.pythonhosted.org/packages/3c/c7/1e8416ae4d4134cb62092c61cabd76b3d720507ee08edd19836cdeea4c7a/hiredis-3.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:30a4df3d48f32538de50648d44146231dde5ad7f84f8f08818820f426840ae97", size = 22336, upload-time = "2025-10-14T16:32:11.221Z" }, + { url = "https://files.pythonhosted.org/packages/48/1c/ed28ae5d704f5c7e85b946fa327f30d269e6272c847fef7e91ba5fc86193/hiredis-3.3.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:5b8e1d6a2277ec5b82af5dce11534d3ed5dffeb131fd9b210bc1940643b39b5f", size = 82026, upload-time = "2025-10-14T16:32:12.004Z" }, + { url = "https://files.pythonhosted.org/packages/f4/9b/79f30c5c40e248291023b7412bfdef4ad9a8a92d9e9285d65d600817dac7/hiredis-3.3.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:c4981de4d335f996822419e8a8b3b87367fcef67dc5fb74d3bff4df9f6f17783", size = 46217, upload-time = "2025-10-14T16:32:13.133Z" }, + { url = "https://files.pythonhosted.org/packages/e7/c3/02b9ed430ad9087aadd8afcdf616717452d16271b701fa47edfe257b681e/hiredis-3.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1706480a683e328ae9ba5d704629dee2298e75016aa0207e7067b9c40cecc271", size = 41858, upload-time = "2025-10-14T16:32:13.98Z" }, + { url = "https://files.pythonhosted.org/packages/f1/98/b2a42878b82130a535c7aa20bc937ba2d07d72e9af3ad1ad93e837c419b5/hiredis-3.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a95cef9989736ac313639f8f545b76b60b797e44e65834aabbb54e4fad8d6c8", size = 170195, upload-time = "2025-10-14T16:32:14.728Z" }, + { url = "https://files.pythonhosted.org/packages/66/1d/9dcde7a75115d3601b016113d9b90300726fa8e48aacdd11bf01a453c145/hiredis-3.3.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca2802934557ccc28a954414c245ba7ad904718e9712cb67c05152cf6b9dd0a3", size = 181808, upload-time = "2025-10-14T16:32:15.622Z" }, + { url = "https://files.pythonhosted.org/packages/56/a1/60f6bda9b20b4e73c85f7f5f046bc2c154a5194fc94eb6861e1fd97ced52/hiredis-3.3.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fe730716775f61e76d75810a38ee4c349d3af3896450f1525f5a4034cf8f2ed7", size = 180578, upload-time = "2025-10-14T16:32:16.514Z" }, + { url = "https://files.pythonhosted.org/packages/d9/01/859d21de65085f323a701824e23ea3330a0ac05f8e184544d7aa5c26128d/hiredis-3.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:749faa69b1ce1f741f5eaf743435ac261a9262e2d2d66089192477e7708a9abc", size = 172508, upload-time = "2025-10-14T16:32:17.411Z" }, + { url = "https://files.pythonhosted.org/packages/99/a8/28fd526e554c80853d0fbf57ef2a3235f00e4ed34ce0e622e05d27d0f788/hiredis-3.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:95c9427f2ac3f1dd016a3da4e1161fa9d82f221346c8f3fdd6f3f77d4e28946c", size = 166341, upload-time = "2025-10-14T16:32:18.561Z" }, + { url = "https://files.pythonhosted.org/packages/f2/91/ded746b7d2914f557fbbf77be55e90d21f34ba758ae10db6591927c642c8/hiredis-3.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c863ee44fe7bff25e41f3a5105c936a63938b76299b802d758f40994ab340071", size = 176765, upload-time = "2025-10-14T16:32:19.491Z" }, + { url = "https://files.pythonhosted.org/packages/d6/4c/04aa46ff386532cb5f08ee495c2bf07303e93c0acf2fa13850e031347372/hiredis-3.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2213c7eb8ad5267434891f3241c7776e3bafd92b5933fc57d53d4456247dc542", size = 170312, upload-time = "2025-10-14T16:32:20.404Z" }, + { url = "https://files.pythonhosted.org/packages/90/6e/67f9d481c63f542a9cf4c9f0ea4e5717db0312fb6f37fb1f78f3a66de93c/hiredis-3.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a172bae3e2837d74530cd60b06b141005075db1b814d966755977c69bd882ce8", size = 167965, upload-time = "2025-10-14T16:32:21.259Z" }, + { url = "https://files.pythonhosted.org/packages/7a/df/dde65144d59c3c0d85e43255798f1fa0c48d413e668cfd92b3d9f87924ef/hiredis-3.3.0-cp312-cp312-win32.whl", hash = "sha256:cb91363b9fd6d41c80df9795e12fffbaf5c399819e6ae8120f414dedce6de068", size = 20533, upload-time = "2025-10-14T16:32:22.192Z" }, + { url = "https://files.pythonhosted.org/packages/f5/a9/55a4ac9c16fdf32e92e9e22c49f61affe5135e177ca19b014484e28950f7/hiredis-3.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:04ec150e95eea3de9ff8bac754978aa17b8bf30a86d4ab2689862020945396b0", size = 22379, upload-time = "2025-10-14T16:32:22.916Z" }, ] [[package]] @@ -2777,7 +2786,7 @@ wheels = [ [[package]] name = "huggingface-hub" -version = "0.35.3" +version = "0.36.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, @@ -2789,9 +2798,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/10/7e/a0a97de7c73671863ca6b3f61fa12518caf35db37825e43d63a70956738c/huggingface_hub-0.35.3.tar.gz", hash = "sha256:350932eaa5cc6a4747efae85126ee220e4ef1b54e29d31c3b45c5612ddf0b32a", size = 461798, upload-time = "2025-09-29T14:29:58.625Z" } +sdist = { url = "https://files.pythonhosted.org/packages/98/63/4910c5fa9128fdadf6a9c5ac138e8b1b6cee4ca44bf7915bbfbce4e355ee/huggingface_hub-0.36.0.tar.gz", hash = "sha256:47b3f0e2539c39bf5cde015d63b72ec49baff67b6931c3d97f3f84532e2b8d25", size = 463358, upload-time = "2025-10-23T12:12:01.413Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/a0/651f93d154cb72323358bf2bbae3e642bdb5d2f1bfc874d096f7cb159fa0/huggingface_hub-0.35.3-py3-none-any.whl", hash = "sha256:0e3a01829c19d86d03793e4577816fe3bdfc1602ac62c7fb220d593d351224ba", size = 564262, upload-time = "2025-09-29T14:29:55.813Z" }, + { url = "https://files.pythonhosted.org/packages/cb/bd/1a875e0d592d447cbc02805fd3fe0f497714d6a2583f59d14fa9ebad96eb/huggingface_hub-0.36.0-py3-none-any.whl", hash = "sha256:7bcc9ad17d5b3f07b57c78e79d527102d08313caa278a641993acddcb894548d", size = 566094, upload-time = "2025-10-23T12:11:59.557Z" }, ] [[package]] @@ -2817,15 +2826,14 @@ wheels = [ [[package]] name = "hypothesis" -version = "6.140.3" +version = "6.147.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "attrs" }, { name = "sortedcontainers" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/7f/946343e32881b56adc0eba64e428ad2f85251f9ef16e3e4ec1b6ab80199b/hypothesis-6.140.3.tar.gz", hash = "sha256:4f4a09bf77af21e0cc3dffed1ea639812dc75d38f81308ec9fb0e33f8557b0cb", size = 466925, upload-time = "2025-10-04T22:29:44.499Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/53/e19fe74671fd60db86344a4623c818fac58b813cc3efbb7ea3b3074dcb71/hypothesis-6.147.0.tar.gz", hash = "sha256:72e6004ea3bd1460bdb4640b6389df23b87ba7a4851893fd84d1375635d3e507", size = 468587, upload-time = "2025-11-06T20:27:29.682Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/65/2a/0553ac2a8af432df92f2ffc05ca97e7ed64e00c97a371b019ae2690de325/hypothesis-6.140.3-py3-none-any.whl", hash = "sha256:a2cfff51641a58a56081f5c90ae1da6ccf3d043404f411805f7f0e0d75742d0e", size = 534534, upload-time = "2025-10-04T22:29:40.635Z" }, + { url = "https://files.pythonhosted.org/packages/b2/1b/932eddc3d55c4ed6c585006cffe6c6a133b5e1797d873de0bcf5208e4fed/hypothesis-6.147.0-py3-none-any.whl", hash = "sha256:de588807b6da33550d32f47bcd42b1a86d061df85673aa73e6443680249d185e", size = 535595, upload-time = "2025-11-06T20:27:23.536Z" }, ] [[package]] @@ -2839,16 +2847,16 @@ wheels = [ [[package]] name = "import-linter" -version = "2.5.2" +version = "2.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "grimp" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6c/fd/49913b98fdeb5a8a120ca756abfc9aa7fdef7c20da1d728173e98ce11160/import_linter-2.5.2.tar.gz", hash = "sha256:d8f2dc6432975cc35edc4cc0bfcf1b811f05500b377ce0c3f62729d68f46c698", size = 159664, upload-time = "2025-10-09T10:53:24.635Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/20/37f3661ccbdba41072a74cb7a57a932b6884ab6c489318903d2d870c6c07/import_linter-2.6.tar.gz", hash = "sha256:60429a450eb6ebeed536f6d2b83428b026c5747ca69d029812e2f1360b136f85", size = 161294, upload-time = "2025-11-10T09:59:20.977Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/f4/f20eeb9e6ab178ce011457cd936877202556f14b7af3ef2b3c3e26f3758a/import_linter-2.5.2-py3-none-any.whl", hash = "sha256:a70b64c2451dc6b96ff9ef5af4e3f6a2c8b63532a66a3c96a7c31ca086b10003", size = 44140, upload-time = "2025-10-09T10:53:23.367Z" }, + { url = "https://files.pythonhosted.org/packages/44/df/02389e13d340229baa687bd0b9be4878e13668ce0beadbe531fb2b597386/import_linter-2.6-py3-none-any.whl", hash = "sha256:4e835141294b803325a619b8c789398320b81f0bde7771e0dd36f34524e51b1e", size = 46488, upload-time = "2025-11-10T09:59:19.611Z" }, ] [[package]] @@ -2874,11 +2882,11 @@ wheels = [ [[package]] name = "iniconfig" -version = "2.1.0" +version = "2.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, ] [[package]] @@ -2928,35 +2936,44 @@ wheels = [ [[package]] name = "jiter" -version = "0.11.0" +version = "0.12.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9d/c0/a3bb4cc13aced219dd18191ea66e874266bd8aa7b96744e495e1c733aa2d/jiter-0.11.0.tar.gz", hash = "sha256:1d9637eaf8c1d6a63d6562f2a6e5ab3af946c66037eb1b894e8fad75422266e4", size = 167094, upload-time = "2025-09-15T09:20:38.212Z" } +sdist = { url = "https://files.pythonhosted.org/packages/45/9d/e0660989c1370e25848bb4c52d061c71837239738ad937e83edca174c273/jiter-0.12.0.tar.gz", hash = "sha256:64dfcd7d5c168b38d3f9f8bba7fc639edb3418abcc74f22fdbe6b8938293f30b", size = 168294, upload-time = "2025-11-09T20:49:23.302Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/55/a69fefeef09c2eaabae44b935a1aa81517e49639c0a0c25d861cb18cd7ac/jiter-0.11.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:cb5d9db02979c3f49071fce51a48f4b4e4cf574175fb2b11c7a535fa4867b222", size = 309503, upload-time = "2025-09-15T09:19:08.191Z" }, - { url = "https://files.pythonhosted.org/packages/bd/d5/a6aba9e6551f32f9c127184f398208e4eddb96c59ac065c8a92056089d28/jiter-0.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1dc6a123f3471c4730db7ca8ba75f1bb3dcb6faeb8d46dd781083e7dee88b32d", size = 317688, upload-time = "2025-09-15T09:19:09.918Z" }, - { url = "https://files.pythonhosted.org/packages/bb/f3/5e86f57c1883971cdc8535d0429c2787bf734840a231da30a3be12850562/jiter-0.11.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09858f8d230f031c7b8e557429102bf050eea29c77ad9c34c8fe253c5329acb7", size = 337418, upload-time = "2025-09-15T09:19:11.078Z" }, - { url = "https://files.pythonhosted.org/packages/5e/4f/a71d8a24c2a70664970574a8e0b766663f5ef788f7fe1cc20ee0c016d488/jiter-0.11.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dbe2196c4a0ce760925a74ab4456bf644748ab0979762139626ad138f6dac72d", size = 361423, upload-time = "2025-09-15T09:19:13.286Z" }, - { url = "https://files.pythonhosted.org/packages/8f/e5/b09076f4e7fd9471b91e16f9f3dc7330b161b738f3b39b2c37054a36e26a/jiter-0.11.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5beb56d22b63647bafd0b74979216fdee80c580c0c63410be8c11053860ffd09", size = 486367, upload-time = "2025-09-15T09:19:14.546Z" }, - { url = "https://files.pythonhosted.org/packages/fb/f1/98cb3a36f5e62f80cd860f0179f948d9eab5a316d55d3e1bab98d9767af5/jiter-0.11.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97025d09ef549795d8dc720a824312cee3253c890ac73c621721ddfc75066789", size = 376335, upload-time = "2025-09-15T09:19:15.939Z" }, - { url = "https://files.pythonhosted.org/packages/9f/d8/ec74886497ea393c29dbd7651ddecc1899e86404a6b1f84a3ddab0ab59fd/jiter-0.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d50880a6da65d8c23a2cf53c412847d9757e74cc9a3b95c5704a1d1a24667347", size = 348981, upload-time = "2025-09-15T09:19:17.568Z" }, - { url = "https://files.pythonhosted.org/packages/24/93/d22ad7fa3b86ade66c86153ceea73094fc2af8b20c59cb7fceab9fea4704/jiter-0.11.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:452d80a1c86c095a242007bd9fc5d21b8a8442307193378f891cb8727e469648", size = 385797, upload-time = "2025-09-15T09:19:19.121Z" }, - { url = "https://files.pythonhosted.org/packages/c8/bd/e25ff4a4df226e9b885f7cb01ee4b9dc74e3000e612d6f723860d71a1f34/jiter-0.11.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e84e58198d4894668eec2da660ffff60e0f3e60afa790ecc50cb12b0e02ca1d4", size = 516597, upload-time = "2025-09-15T09:19:20.301Z" }, - { url = "https://files.pythonhosted.org/packages/be/fb/beda613db7d93ffa2fdd2683f90f2f5dce8daf4bc2d0d2829e7de35308c6/jiter-0.11.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:df64edcfc5dd5279a791eea52aa113d432c933119a025b0b5739f90d2e4e75f1", size = 508853, upload-time = "2025-09-15T09:19:22.075Z" }, - { url = "https://files.pythonhosted.org/packages/20/64/c5b0d93490634e41e38e2a15de5d54fdbd2c9f64a19abb0f95305b63373c/jiter-0.11.0-cp311-cp311-win32.whl", hash = "sha256:144fc21337d21b1d048f7f44bf70881e1586401d405ed3a98c95a114a9994982", size = 205140, upload-time = "2025-09-15T09:19:23.351Z" }, - { url = "https://files.pythonhosted.org/packages/a1/e6/c347c0e6f5796e97d4356b7e5ff0ce336498b7f4ef848fae621a56f1ccf3/jiter-0.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:b0f32e644d241293b892b1a6dd8f0b9cc029bfd94c97376b2681c36548aabab7", size = 204311, upload-time = "2025-09-15T09:19:24.591Z" }, - { url = "https://files.pythonhosted.org/packages/ba/b5/3009b112b8f673e568ef79af9863d8309a15f0a8cdcc06ed6092051f377e/jiter-0.11.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:2fb7b377688cc3850bbe5c192a6bd493562a0bc50cbc8b047316428fbae00ada", size = 305510, upload-time = "2025-09-15T09:19:25.893Z" }, - { url = "https://files.pythonhosted.org/packages/fe/82/15514244e03b9e71e086bbe2a6de3e4616b48f07d5f834200c873956fb8c/jiter-0.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a1b7cbe3f25bd0d8abb468ba4302a5d45617ee61b2a7a638f63fee1dc086be99", size = 316521, upload-time = "2025-09-15T09:19:27.525Z" }, - { url = "https://files.pythonhosted.org/packages/92/94/7a2e905f40ad2d6d660e00b68d818f9e29fb87ffe82774f06191e93cbe4a/jiter-0.11.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0a7f0ec81d5b7588c5cade1eb1925b91436ae6726dc2df2348524aeabad5de6", size = 338214, upload-time = "2025-09-15T09:19:28.727Z" }, - { url = "https://files.pythonhosted.org/packages/a8/9c/5791ed5bdc76f12110158d3316a7a3ec0b1413d018b41c5ed399549d3ad5/jiter-0.11.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07630bb46ea2a6b9c6ed986c6e17e35b26148cce2c535454b26ee3f0e8dcaba1", size = 361280, upload-time = "2025-09-15T09:19:30.013Z" }, - { url = "https://files.pythonhosted.org/packages/d4/7f/b7d82d77ff0d2cb06424141000176b53a9e6b16a1125525bb51ea4990c2e/jiter-0.11.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7764f27d28cd4a9cbc61704dfcd80c903ce3aad106a37902d3270cd6673d17f4", size = 487895, upload-time = "2025-09-15T09:19:31.424Z" }, - { url = "https://files.pythonhosted.org/packages/42/44/10a1475d46f1fc1fd5cc2e82c58e7bca0ce5852208e0fa5df2f949353321/jiter-0.11.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1d4a6c4a737d486f77f842aeb22807edecb4a9417e6700c7b981e16d34ba7c72", size = 378421, upload-time = "2025-09-15T09:19:32.746Z" }, - { url = "https://files.pythonhosted.org/packages/9a/5f/0dc34563d8164d31d07bc09d141d3da08157a68dcd1f9b886fa4e917805b/jiter-0.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf408d2a0abd919b60de8c2e7bc5eeab72d4dafd18784152acc7c9adc3291591", size = 347932, upload-time = "2025-09-15T09:19:34.612Z" }, - { url = "https://files.pythonhosted.org/packages/f7/de/b68f32a4fcb7b4a682b37c73a0e5dae32180140cd1caf11aef6ad40ddbf2/jiter-0.11.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cdef53eda7d18e799625023e1e250dbc18fbc275153039b873ec74d7e8883e09", size = 386959, upload-time = "2025-09-15T09:19:35.994Z" }, - { url = "https://files.pythonhosted.org/packages/76/0a/c08c92e713b6e28972a846a81ce374883dac2f78ec6f39a0dad9f2339c3a/jiter-0.11.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:53933a38ef7b551dd9c7f1064f9d7bb235bb3168d0fa5f14f0798d1b7ea0d9c5", size = 517187, upload-time = "2025-09-15T09:19:37.426Z" }, - { url = "https://files.pythonhosted.org/packages/89/b5/4a283bec43b15aad54fcae18d951f06a2ec3f78db5708d3b59a48e9c3fbd/jiter-0.11.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:11840d2324c9ab5162fc1abba23bc922124fedcff0d7b7f85fffa291e2f69206", size = 509461, upload-time = "2025-09-15T09:19:38.761Z" }, - { url = "https://files.pythonhosted.org/packages/34/a5/f8bad793010534ea73c985caaeef8cc22dfb1fedb15220ecdf15c623c07a/jiter-0.11.0-cp312-cp312-win32.whl", hash = "sha256:4f01a744d24a5f2bb4a11657a1b27b61dc038ae2e674621a74020406e08f749b", size = 206664, upload-time = "2025-09-15T09:19:40.096Z" }, - { url = "https://files.pythonhosted.org/packages/ed/42/5823ec2b1469395a160b4bf5f14326b4a098f3b6898fbd327366789fa5d3/jiter-0.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:29fff31190ab3a26de026da2f187814f4b9c6695361e20a9ac2123e4d4378a4c", size = 203520, upload-time = "2025-09-15T09:19:41.798Z" }, - { url = "https://files.pythonhosted.org/packages/70/f3/ce100253c80063a7b8b406e1d1562657fd4b9b4e1b562db40e68645342fb/jiter-0.11.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:902b43386c04739229076bd1c4c69de5d115553d982ab442a8ae82947c72ede7", size = 336380, upload-time = "2025-09-15T09:20:36.867Z" }, + { url = "https://files.pythonhosted.org/packages/32/f9/eaca4633486b527ebe7e681c431f529b63fe2709e7c5242fc0f43f77ce63/jiter-0.12.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d8f8a7e317190b2c2d60eb2e8aa835270b008139562d70fe732e1c0020ec53c9", size = 316435, upload-time = "2025-11-09T20:47:02.087Z" }, + { url = "https://files.pythonhosted.org/packages/10/c1/40c9f7c22f5e6ff715f28113ebaba27ab85f9af2660ad6e1dd6425d14c19/jiter-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2218228a077e784c6c8f1a8e5d6b8cb1dea62ce25811c356364848554b2056cd", size = 320548, upload-time = "2025-11-09T20:47:03.409Z" }, + { url = "https://files.pythonhosted.org/packages/6b/1b/efbb68fe87e7711b00d2cfd1f26bb4bfc25a10539aefeaa7727329ffb9cb/jiter-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9354ccaa2982bf2188fd5f57f79f800ef622ec67beb8329903abf6b10da7d423", size = 351915, upload-time = "2025-11-09T20:47:05.171Z" }, + { url = "https://files.pythonhosted.org/packages/15/2d/c06e659888c128ad1e838123d0638f0efad90cc30860cb5f74dd3f2fc0b3/jiter-0.12.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f2607185ea89b4af9a604d4c7ec40e45d3ad03ee66998b031134bc510232bb7", size = 368966, upload-time = "2025-11-09T20:47:06.508Z" }, + { url = "https://files.pythonhosted.org/packages/6b/20/058db4ae5fb07cf6a4ab2e9b9294416f606d8e467fb74c2184b2a1eeacba/jiter-0.12.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a585a5e42d25f2e71db5f10b171f5e5ea641d3aa44f7df745aa965606111cc2", size = 482047, upload-time = "2025-11-09T20:47:08.382Z" }, + { url = "https://files.pythonhosted.org/packages/49/bb/dc2b1c122275e1de2eb12905015d61e8316b2f888bdaac34221c301495d6/jiter-0.12.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd9e21d34edff5a663c631f850edcb786719c960ce887a5661e9c828a53a95d9", size = 380835, upload-time = "2025-11-09T20:47:09.81Z" }, + { url = "https://files.pythonhosted.org/packages/23/7d/38f9cd337575349de16da575ee57ddb2d5a64d425c9367f5ef9e4612e32e/jiter-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a612534770470686cd5431478dc5a1b660eceb410abade6b1b74e320ca98de6", size = 364587, upload-time = "2025-11-09T20:47:11.529Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a3/b13e8e61e70f0bb06085099c4e2462647f53cc2ca97614f7fedcaa2bb9f3/jiter-0.12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3985aea37d40a908f887b34d05111e0aae822943796ebf8338877fee2ab67725", size = 390492, upload-time = "2025-11-09T20:47:12.993Z" }, + { url = "https://files.pythonhosted.org/packages/07/71/e0d11422ed027e21422f7bc1883c61deba2d9752b720538430c1deadfbca/jiter-0.12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b1207af186495f48f72529f8d86671903c8c10127cac6381b11dddc4aaa52df6", size = 522046, upload-time = "2025-11-09T20:47:14.6Z" }, + { url = "https://files.pythonhosted.org/packages/9f/59/b968a9aa7102a8375dbbdfbd2aeebe563c7e5dddf0f47c9ef1588a97e224/jiter-0.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ef2fb241de583934c9915a33120ecc06d94aa3381a134570f59eed784e87001e", size = 513392, upload-time = "2025-11-09T20:47:16.011Z" }, + { url = "https://files.pythonhosted.org/packages/ca/e4/7df62002499080dbd61b505c5cb351aa09e9959d176cac2aa8da6f93b13b/jiter-0.12.0-cp311-cp311-win32.whl", hash = "sha256:453b6035672fecce8007465896a25b28a6b59cfe8fbc974b2563a92f5a92a67c", size = 206096, upload-time = "2025-11-09T20:47:17.344Z" }, + { url = "https://files.pythonhosted.org/packages/bb/60/1032b30ae0572196b0de0e87dce3b6c26a1eff71aad5fe43dee3082d32e0/jiter-0.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:ca264b9603973c2ad9435c71a8ec8b49f8f715ab5ba421c85a51cde9887e421f", size = 204899, upload-time = "2025-11-09T20:47:19.365Z" }, + { url = "https://files.pythonhosted.org/packages/49/d5/c145e526fccdb834063fb45c071df78b0cc426bbaf6de38b0781f45d956f/jiter-0.12.0-cp311-cp311-win_arm64.whl", hash = "sha256:cb00ef392e7d684f2754598c02c409f376ddcef857aae796d559e6cacc2d78a5", size = 188070, upload-time = "2025-11-09T20:47:20.75Z" }, + { url = "https://files.pythonhosted.org/packages/92/c9/5b9f7b4983f1b542c64e84165075335e8a236fa9e2ea03a0c79780062be8/jiter-0.12.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:305e061fa82f4680607a775b2e8e0bcb071cd2205ac38e6ef48c8dd5ebe1cf37", size = 314449, upload-time = "2025-11-09T20:47:22.999Z" }, + { url = "https://files.pythonhosted.org/packages/98/6e/e8efa0e78de00db0aee82c0cf9e8b3f2027efd7f8a71f859d8f4be8e98ef/jiter-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5c1860627048e302a528333c9307c818c547f214d8659b0705d2195e1a94b274", size = 319855, upload-time = "2025-11-09T20:47:24.779Z" }, + { url = "https://files.pythonhosted.org/packages/20/26/894cd88e60b5d58af53bec5c6759d1292bd0b37a8b5f60f07abf7a63ae5f/jiter-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df37577a4f8408f7e0ec3205d2a8f87672af8f17008358063a4d6425b6081ce3", size = 350171, upload-time = "2025-11-09T20:47:26.469Z" }, + { url = "https://files.pythonhosted.org/packages/f5/27/a7b818b9979ac31b3763d25f3653ec3a954044d5e9f5d87f2f247d679fd1/jiter-0.12.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:75fdd787356c1c13a4f40b43c2156276ef7a71eb487d98472476476d803fb2cf", size = 365590, upload-time = "2025-11-09T20:47:27.918Z" }, + { url = "https://files.pythonhosted.org/packages/ba/7e/e46195801a97673a83746170b17984aa8ac4a455746354516d02ca5541b4/jiter-0.12.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1eb5db8d9c65b112aacf14fcd0faae9913d07a8afea5ed06ccdd12b724e966a1", size = 479462, upload-time = "2025-11-09T20:47:29.654Z" }, + { url = "https://files.pythonhosted.org/packages/ca/75/f833bfb009ab4bd11b1c9406d333e3b4357709ed0570bb48c7c06d78c7dd/jiter-0.12.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:73c568cc27c473f82480abc15d1301adf333a7ea4f2e813d6a2c7d8b6ba8d0df", size = 378983, upload-time = "2025-11-09T20:47:31.026Z" }, + { url = "https://files.pythonhosted.org/packages/71/b3/7a69d77943cc837d30165643db753471aff5df39692d598da880a6e51c24/jiter-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4321e8a3d868919bcb1abb1db550d41f2b5b326f72df29e53b2df8b006eb9403", size = 361328, upload-time = "2025-11-09T20:47:33.286Z" }, + { url = "https://files.pythonhosted.org/packages/b0/ac/a78f90caf48d65ba70d8c6efc6f23150bc39dc3389d65bbec2a95c7bc628/jiter-0.12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a51bad79f8cc9cac2b4b705039f814049142e0050f30d91695a2d9a6611f126", size = 386740, upload-time = "2025-11-09T20:47:34.703Z" }, + { url = "https://files.pythonhosted.org/packages/39/b6/5d31c2cc8e1b6a6bcf3c5721e4ca0a3633d1ab4754b09bc7084f6c4f5327/jiter-0.12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2a67b678f6a5f1dd6c36d642d7db83e456bc8b104788262aaefc11a22339f5a9", size = 520875, upload-time = "2025-11-09T20:47:36.058Z" }, + { url = "https://files.pythonhosted.org/packages/30/b5/4df540fae4e9f68c54b8dab004bd8c943a752f0b00efd6e7d64aa3850339/jiter-0.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efe1a211fe1fd14762adea941e3cfd6c611a136e28da6c39272dbb7a1bbe6a86", size = 511457, upload-time = "2025-11-09T20:47:37.932Z" }, + { url = "https://files.pythonhosted.org/packages/07/65/86b74010e450a1a77b2c1aabb91d4a91dd3cd5afce99f34d75fd1ac64b19/jiter-0.12.0-cp312-cp312-win32.whl", hash = "sha256:d779d97c834b4278276ec703dc3fc1735fca50af63eb7262f05bdb4e62203d44", size = 204546, upload-time = "2025-11-09T20:47:40.47Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c7/6659f537f9562d963488e3e55573498a442503ced01f7e169e96a6110383/jiter-0.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e8269062060212b373316fe69236096aaf4c49022d267c6736eebd66bbbc60bb", size = 205196, upload-time = "2025-11-09T20:47:41.794Z" }, + { url = "https://files.pythonhosted.org/packages/21/f4/935304f5169edadfec7f9c01eacbce4c90bb9a82035ac1de1f3bd2d40be6/jiter-0.12.0-cp312-cp312-win_arm64.whl", hash = "sha256:06cb970936c65de926d648af0ed3d21857f026b1cf5525cb2947aa5e01e05789", size = 186100, upload-time = "2025-11-09T20:47:43.007Z" }, + { url = "https://files.pythonhosted.org/packages/fe/54/5339ef1ecaa881c6948669956567a64d2670941925f245c434f494ffb0e5/jiter-0.12.0-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:4739a4657179ebf08f85914ce50332495811004cc1747852e8b2041ed2aab9b8", size = 311144, upload-time = "2025-11-09T20:49:10.503Z" }, + { url = "https://files.pythonhosted.org/packages/27/74/3446c652bffbd5e81ab354e388b1b5fc1d20daac34ee0ed11ff096b1b01a/jiter-0.12.0-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:41da8def934bf7bec16cb24bd33c0ca62126d2d45d81d17b864bd5ad721393c3", size = 305877, upload-time = "2025-11-09T20:49:12.269Z" }, + { url = "https://files.pythonhosted.org/packages/a1/f4/ed76ef9043450f57aac2d4fbeb27175aa0eb9c38f833be6ef6379b3b9a86/jiter-0.12.0-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c44ee814f499c082e69872d426b624987dbc5943ab06e9bbaa4f81989fdb79e", size = 340419, upload-time = "2025-11-09T20:49:13.803Z" }, + { url = "https://files.pythonhosted.org/packages/21/01/857d4608f5edb0664aa791a3d45702e1a5bcfff9934da74035e7b9803846/jiter-0.12.0-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd2097de91cf03eaa27b3cbdb969addf83f0179c6afc41bbc4513705e013c65d", size = 347212, upload-time = "2025-11-09T20:49:15.643Z" }, + { url = "https://files.pythonhosted.org/packages/cb/f5/12efb8ada5f5c9edc1d4555fe383c1fb2eac05ac5859258a72d61981d999/jiter-0.12.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:e8547883d7b96ef2e5fe22b88f8a4c8725a56e7f4abafff20fd5272d634c7ecb", size = 309974, upload-time = "2025-11-09T20:49:17.187Z" }, + { url = "https://files.pythonhosted.org/packages/85/15/d6eb3b770f6a0d332675141ab3962fd4a7c270ede3515d9f3583e1d28276/jiter-0.12.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:89163163c0934854a668ed783a2546a0617f71706a2551a4a0666d91ab365d6b", size = 304233, upload-time = "2025-11-09T20:49:18.734Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3e/e7e06743294eea2cf02ced6aa0ff2ad237367394e37a0e2b4a1108c67a36/jiter-0.12.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d96b264ab7d34bbb2312dedc47ce07cd53f06835eacbc16dde3761f47c3a9e7f", size = 338537, upload-time = "2025-11-09T20:49:20.317Z" }, + { url = "https://files.pythonhosted.org/packages/2f/9c/6753e6522b8d0ef07d3a3d239426669e984fb0eba15a315cdbc1253904e4/jiter-0.12.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24e864cb30ab82311c6425655b0cdab0a98c5d973b065c66a3f020740c2324c", size = 346110, upload-time = "2025-11-09T20:49:21.817Z" }, ] [[package]] @@ -2979,11 +2996,11 @@ wheels = [ [[package]] name = "json-repair" -version = "0.52.0" +version = "0.53.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/63/2c3c3c8cc1c28a0a20a9ab0eff5439c989ce3cc5956d8a4c7cf1eae0a06e/json_repair-0.52.0.tar.gz", hash = "sha256:0eee59cb3145b462b0734d4cf3246b797686caa669d52eee8dd30e09ea6d7876", size = 35384, upload-time = "2025-10-05T17:18:12.387Z" } +sdist = { url = "https://files.pythonhosted.org/packages/69/9c/be1d84106529aeacbe6151c1e1dc202f5a5cfa0d9bac748d4a1039ebb913/json_repair-0.53.0.tar.gz", hash = "sha256:97fcbf1eea0bbcf6d5cc94befc573623ab4bbba6abdc394cfd3b933a2571266d", size = 36204, upload-time = "2025-11-08T13:45:15.807Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/7f/3a4e456da9a0f9ac54d9842ed51e96960826a98456f0826a9b3e808713c4/json_repair-0.52.0-py3-none-any.whl", hash = "sha256:c783069906a456f62e2a553fbef32a420a4745ff943e2014411728edcc7bf60a", size = 26350, upload-time = "2025-10-05T17:18:10.859Z" }, + { url = "https://files.pythonhosted.org/packages/ba/49/e588ec59b64222c8d38585f9ceffbf71870c3cbfb2873e53297c4f4afd0b/json_repair-0.53.0-py3-none-any.whl", hash = "sha256:17f7439e41ae39964e1d678b1def38cb8ec43d607340564acf3e62d8ce47a727", size = 27404, upload-time = "2025-11-08T13:45:14.464Z" }, ] [[package]] @@ -3039,13 +3056,12 @@ wheels = [ [[package]] name = "kubernetes" -version = "33.1.0" +version = "34.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "certifi" }, { name = "durationpy" }, { name = "google-auth" }, - { name = "oauthlib" }, { name = "python-dateutil" }, { name = "pyyaml" }, { name = "requests" }, @@ -3054,9 +3070,9 @@ dependencies = [ { name = "urllib3" }, { name = "websocket-client" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ae/52/19ebe8004c243fdfa78268a96727c71e08f00ff6fe69a301d0b7fcbce3c2/kubernetes-33.1.0.tar.gz", hash = "sha256:f64d829843a54c251061a8e7a14523b521f2dc5c896cf6d65ccf348648a88993", size = 1036779, upload-time = "2025-06-09T21:57:58.521Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/55/3f880ef65f559cbed44a9aa20d3bdbc219a2c3a3bac4a30a513029b03ee9/kubernetes-34.1.0.tar.gz", hash = "sha256:8fe8edb0b5d290a2f3ac06596b23f87c658977d46b5f8df9d0f4ea83d0003912", size = 1083771, upload-time = "2025-09-29T20:23:49.283Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/89/43/d9bebfc3db7dea6ec80df5cb2aad8d274dd18ec2edd6c4f21f32c237cbbb/kubernetes-33.1.0-py2.py3-none-any.whl", hash = "sha256:544de42b24b64287f7e0aa9513c93cb503f7f40eea39b20f66810011a86eabc5", size = 1941335, upload-time = "2025-06-09T21:57:56.327Z" }, + { url = "https://files.pythonhosted.org/packages/ca/ec/65f7d563aa4a62dd58777e8f6aa882f15db53b14eb29aba0c28a20f7eb26/kubernetes-34.1.0-py2.py3-none-any.whl", hash = "sha256:bffba2272534e224e6a7a74d582deb0b545b7c9879d2cd9e4aae9481d1f2cc2a", size = 2008380, upload-time = "2025-09-29T20:23:47.684Z" }, ] [[package]] @@ -3202,26 +3218,26 @@ wheels = [ [[package]] name = "lz4" -version = "4.4.4" +version = "4.4.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c6/5a/945f5086326d569f14c84ac6f7fcc3229f0b9b1e8cc536b951fd53dfb9e1/lz4-4.4.4.tar.gz", hash = "sha256:070fd0627ec4393011251a094e08ed9fdcc78cb4e7ab28f507638eee4e39abda", size = 171884, upload-time = "2025-04-01T22:55:58.62Z" } +sdist = { url = "https://files.pythonhosted.org/packages/57/51/f1b86d93029f418033dddf9b9f79c8d2641e7454080478ee2aab5123173e/lz4-4.4.5.tar.gz", hash = "sha256:5f0b9e53c1e82e88c10d7c180069363980136b9d7a8306c4dca4f760d60c39f0", size = 172886, upload-time = "2025-11-03T13:02:36.061Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/28/e8/63843dc5ecb1529eb38e1761ceed04a0ad52a9ad8929ab8b7930ea2e4976/lz4-4.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ddfc7194cd206496c445e9e5b0c47f970ce982c725c87bd22de028884125b68f", size = 220898, upload-time = "2025-04-01T22:55:23.085Z" }, - { url = "https://files.pythonhosted.org/packages/e4/94/c53de5f07c7dc11cf459aab2a1d754f5df5f693bfacbbe1e4914bfd02f1e/lz4-4.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:714f9298c86f8e7278f1c6af23e509044782fa8220eb0260f8f8f1632f820550", size = 189685, upload-time = "2025-04-01T22:55:24.413Z" }, - { url = "https://files.pythonhosted.org/packages/fe/59/c22d516dd0352f2a3415d1f665ccef2f3e74ecec3ca6a8f061a38f97d50d/lz4-4.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8474c91de47733856c6686df3c4aca33753741da7e757979369c2c0d32918ba", size = 1239225, upload-time = "2025-04-01T22:55:25.737Z" }, - { url = "https://files.pythonhosted.org/packages/81/af/665685072e71f3f0e626221b7922867ec249cd8376aca761078c8f11f5da/lz4-4.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80dd27d7d680ea02c261c226acf1d41de2fd77af4fb2da62b278a9376e380de0", size = 1265881, upload-time = "2025-04-01T22:55:26.817Z" }, - { url = "https://files.pythonhosted.org/packages/90/04/b4557ae381d3aa451388a29755cc410066f5e2f78c847f66f154f4520a68/lz4-4.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9b7d6dddfd01b49aedb940fdcaf32f41dc58c926ba35f4e31866aeec2f32f4f4", size = 1185593, upload-time = "2025-04-01T22:55:27.896Z" }, - { url = "https://files.pythonhosted.org/packages/7b/e4/03636979f4e8bf92c557f998ca98ee4e6ef92e92eaf0ed6d3c7f2524e790/lz4-4.4.4-cp311-cp311-win32.whl", hash = "sha256:4134b9fd70ac41954c080b772816bb1afe0c8354ee993015a83430031d686a4c", size = 88259, upload-time = "2025-04-01T22:55:29.03Z" }, - { url = "https://files.pythonhosted.org/packages/07/f0/9efe53b4945441a5d2790d455134843ad86739855b7e6199977bf6dc8898/lz4-4.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:f5024d3ca2383470f7c4ef4d0ed8eabad0b22b23eeefde1c192cf1a38d5e9f78", size = 99916, upload-time = "2025-04-01T22:55:29.933Z" }, - { url = "https://files.pythonhosted.org/packages/87/c8/1675527549ee174b9e1db089f7ddfbb962a97314657269b1e0344a5eaf56/lz4-4.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:6ea715bb3357ea1665f77874cf8f55385ff112553db06f3742d3cdcec08633f7", size = 89741, upload-time = "2025-04-01T22:55:31.184Z" }, - { url = "https://files.pythonhosted.org/packages/f7/2d/5523b4fabe11cd98f040f715728d1932eb7e696bfe94391872a823332b94/lz4-4.4.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:23ae267494fdd80f0d2a131beff890cf857f1b812ee72dbb96c3204aab725553", size = 220669, upload-time = "2025-04-01T22:55:32.032Z" }, - { url = "https://files.pythonhosted.org/packages/91/06/1a5bbcacbfb48d8ee5b6eb3fca6aa84143a81d92946bdb5cd6b005f1863e/lz4-4.4.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fff9f3a1ed63d45cb6514bfb8293005dc4141341ce3500abdfeb76124c0b9b2e", size = 189661, upload-time = "2025-04-01T22:55:33.413Z" }, - { url = "https://files.pythonhosted.org/packages/fa/08/39eb7ac907f73e11a69a11576a75a9e36406b3241c0ba41453a7eb842abb/lz4-4.4.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ea7f07329f85a8eda4d8cf937b87f27f0ac392c6400f18bea2c667c8b7f8ecc", size = 1238775, upload-time = "2025-04-01T22:55:34.835Z" }, - { url = "https://files.pythonhosted.org/packages/e9/26/05840fbd4233e8d23e88411a066ab19f1e9de332edddb8df2b6a95c7fddc/lz4-4.4.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ccab8f7f7b82f9fa9fc3b0ba584d353bd5aa818d5821d77d5b9447faad2aaad", size = 1265143, upload-time = "2025-04-01T22:55:35.933Z" }, - { url = "https://files.pythonhosted.org/packages/b7/5d/5f2db18c298a419932f3ab2023deb689863cf8fd7ed875b1c43492479af2/lz4-4.4.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43e9d48b2daf80e486213128b0763deed35bbb7a59b66d1681e205e1702d735", size = 1185032, upload-time = "2025-04-01T22:55:37.454Z" }, - { url = "https://files.pythonhosted.org/packages/c4/e6/736ab5f128694b0f6aac58343bcf37163437ac95997276cd0be3ea4c3342/lz4-4.4.4-cp312-cp312-win32.whl", hash = "sha256:33e01e18e4561b0381b2c33d58e77ceee850a5067f0ece945064cbaac2176962", size = 88284, upload-time = "2025-04-01T22:55:38.536Z" }, - { url = "https://files.pythonhosted.org/packages/40/b8/243430cb62319175070e06e3a94c4c7bd186a812e474e22148ae1290d47d/lz4-4.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:d21d1a2892a2dcc193163dd13eaadabb2c1b803807a5117d8f8588b22eaf9f12", size = 99918, upload-time = "2025-04-01T22:55:39.628Z" }, - { url = "https://files.pythonhosted.org/packages/6c/e1/0686c91738f3e6c2e1a243e0fdd4371667c4d2e5009b0a3605806c2aa020/lz4-4.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:2f4f2965c98ab254feddf6b5072854a6935adab7bc81412ec4fe238f07b85f62", size = 89736, upload-time = "2025-04-01T22:55:40.5Z" }, + { url = "https://files.pythonhosted.org/packages/93/5b/6edcd23319d9e28b1bedf32768c3d1fd56eed8223960a2c47dacd2cec2af/lz4-4.4.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d6da84a26b3aa5da13a62e4b89ab36a396e9327de8cd48b436a3467077f8ccd4", size = 207391, upload-time = "2025-11-03T13:01:36.644Z" }, + { url = "https://files.pythonhosted.org/packages/34/36/5f9b772e85b3d5769367a79973b8030afad0d6b724444083bad09becd66f/lz4-4.4.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61d0ee03e6c616f4a8b69987d03d514e8896c8b1b7cc7598ad029e5c6aedfd43", size = 207146, upload-time = "2025-11-03T13:01:37.928Z" }, + { url = "https://files.pythonhosted.org/packages/04/f4/f66da5647c0d72592081a37c8775feacc3d14d2625bbdaabd6307c274565/lz4-4.4.5-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:33dd86cea8375d8e5dd001e41f321d0a4b1eb7985f39be1b6a4f466cd480b8a7", size = 1292623, upload-time = "2025-11-03T13:01:39.341Z" }, + { url = "https://files.pythonhosted.org/packages/85/fc/5df0f17467cdda0cad464a9197a447027879197761b55faad7ca29c29a04/lz4-4.4.5-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:609a69c68e7cfcfa9d894dc06be13f2e00761485b62df4e2472f1b66f7b405fb", size = 1279982, upload-time = "2025-11-03T13:01:40.816Z" }, + { url = "https://files.pythonhosted.org/packages/25/3b/b55cb577aa148ed4e383e9700c36f70b651cd434e1c07568f0a86c9d5fbb/lz4-4.4.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:75419bb1a559af00250b8f1360d508444e80ed4b26d9d40ec5b09fe7875cb989", size = 1368674, upload-time = "2025-11-03T13:01:42.118Z" }, + { url = "https://files.pythonhosted.org/packages/fb/31/e97e8c74c59ea479598e5c55cbe0b1334f03ee74ca97726e872944ed42df/lz4-4.4.5-cp311-cp311-win32.whl", hash = "sha256:12233624f1bc2cebc414f9efb3113a03e89acce3ab6f72035577bc61b270d24d", size = 88168, upload-time = "2025-11-03T13:01:43.282Z" }, + { url = "https://files.pythonhosted.org/packages/18/47/715865a6c7071f417bef9b57c8644f29cb7a55b77742bd5d93a609274e7e/lz4-4.4.5-cp311-cp311-win_amd64.whl", hash = "sha256:8a842ead8ca7c0ee2f396ca5d878c4c40439a527ebad2b996b0444f0074ed004", size = 99491, upload-time = "2025-11-03T13:01:44.167Z" }, + { url = "https://files.pythonhosted.org/packages/14/e7/ac120c2ca8caec5c945e6356ada2aa5cfabd83a01e3170f264a5c42c8231/lz4-4.4.5-cp311-cp311-win_arm64.whl", hash = "sha256:83bc23ef65b6ae44f3287c38cbf82c269e2e96a26e560aa551735883388dcc4b", size = 91271, upload-time = "2025-11-03T13:01:45.016Z" }, + { url = "https://files.pythonhosted.org/packages/1b/ac/016e4f6de37d806f7cc8f13add0a46c9a7cfc41a5ddc2bc831d7954cf1ce/lz4-4.4.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:df5aa4cead2044bab83e0ebae56e0944cc7fcc1505c7787e9e1057d6d549897e", size = 207163, upload-time = "2025-11-03T13:01:45.895Z" }, + { url = "https://files.pythonhosted.org/packages/8d/df/0fadac6e5bd31b6f34a1a8dbd4db6a7606e70715387c27368586455b7fc9/lz4-4.4.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6d0bf51e7745484d2092b3a51ae6eb58c3bd3ce0300cf2b2c14f76c536d5697a", size = 207150, upload-time = "2025-11-03T13:01:47.205Z" }, + { url = "https://files.pythonhosted.org/packages/b7/17/34e36cc49bb16ca73fb57fbd4c5eaa61760c6b64bce91fcb4e0f4a97f852/lz4-4.4.5-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7b62f94b523c251cf32aa4ab555f14d39bd1a9df385b72443fd76d7c7fb051f5", size = 1292045, upload-time = "2025-11-03T13:01:48.667Z" }, + { url = "https://files.pythonhosted.org/packages/90/1c/b1d8e3741e9fc89ed3b5f7ef5f22586c07ed6bb04e8343c2e98f0fa7ff04/lz4-4.4.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c3ea562c3af274264444819ae9b14dbbf1ab070aff214a05e97db6896c7597e", size = 1279546, upload-time = "2025-11-03T13:01:50.159Z" }, + { url = "https://files.pythonhosted.org/packages/55/d9/e3867222474f6c1b76e89f3bd914595af69f55bf2c1866e984c548afdc15/lz4-4.4.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:24092635f47538b392c4eaeff14c7270d2c8e806bf4be2a6446a378591c5e69e", size = 1368249, upload-time = "2025-11-03T13:01:51.273Z" }, + { url = "https://files.pythonhosted.org/packages/b2/e7/d667d337367686311c38b580d1ca3d5a23a6617e129f26becd4f5dc458df/lz4-4.4.5-cp312-cp312-win32.whl", hash = "sha256:214e37cfe270948ea7eb777229e211c601a3e0875541c1035ab408fbceaddf50", size = 88189, upload-time = "2025-11-03T13:01:52.605Z" }, + { url = "https://files.pythonhosted.org/packages/a5/0b/a54cd7406995ab097fceb907c7eb13a6ddd49e0b231e448f1a81a50af65c/lz4-4.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:713a777de88a73425cf08eb11f742cd2c98628e79a8673d6a52e3c5f0c116f33", size = 99497, upload-time = "2025-11-03T13:01:53.477Z" }, + { url = "https://files.pythonhosted.org/packages/6a/7e/dc28a952e4bfa32ca16fa2eb026e7a6ce5d1411fcd5986cd08c74ec187b9/lz4-4.4.5-cp312-cp312-win_arm64.whl", hash = "sha256:a88cbb729cc333334ccfb52f070463c21560fca63afcf636a9f160a55fac3301", size = 91279, upload-time = "2025-11-03T13:01:54.419Z" }, ] [[package]] @@ -3484,14 +3500,14 @@ wheels = [ [[package]] name = "mypy-boto3-bedrock-runtime" -version = "1.40.41" +version = "1.40.62" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "python_full_version < '3.12'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c7/38/79989f7bce998776ed1a01c17f3f58e7bc6f5fc2bcbdff929701526fa2f1/mypy_boto3_bedrock_runtime-1.40.41.tar.gz", hash = "sha256:ee9bda6d6d478c8d0995e84e884bdf1798e150d437974ae27c175774a58ffaa5", size = 28333, upload-time = "2025-09-29T19:26:04.804Z" } +sdist = { url = "https://files.pythonhosted.org/packages/51/d0/ca3c58a1284f9142959fb00889322d4889278c2e4b165350d8e294c07d9c/mypy_boto3_bedrock_runtime-1.40.62.tar.gz", hash = "sha256:5505a60e2b5f9c845ee4778366d49c93c3723f6790d0cec116d8fc5f5609d846", size = 28611, upload-time = "2025-10-29T21:43:02.599Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/6c/d3431dadf473bb76aa590b1ed8cc91726a48b029b542eff9d3024f2d70b9/mypy_boto3_bedrock_runtime-1.40.41-py3-none-any.whl", hash = "sha256:d65dff200986ff06c6b3579ddcea102555f2067c8987fca379bf4f9ed8ba3121", size = 34181, upload-time = "2025-09-29T19:26:01.898Z" }, + { url = "https://files.pythonhosted.org/packages/4b/c5/ad62e5f80684ce5fe878d320634189ef29d00ee294cd62a37f3e51719f47/mypy_boto3_bedrock_runtime-1.40.62-py3-none-any.whl", hash = "sha256:e383e70b5dffb0b335b49fc1b2772f0d35118f99994bc7e731445ba0ab237831", size = 34497, upload-time = "2025-10-29T21:43:01.591Z" }, ] [[package]] @@ -3505,30 +3521,21 @@ wheels = [ [[package]] name = "mysql-connector-python" -version = "9.4.0" +version = "9.5.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/02/77/2b45e6460d05b1f1b7a4c8eb79a50440b4417971973bb78c9ef6cad630a6/mysql_connector_python-9.4.0.tar.gz", hash = "sha256:d111360332ae78933daf3d48ff497b70739aa292ab0017791a33e826234e743b", size = 12185532, upload-time = "2025-07-22T08:02:05.788Z" } +sdist = { url = "https://files.pythonhosted.org/packages/39/33/b332b001bc8c5ee09255a0d4b09a254da674450edd6a3e5228b245ca82a0/mysql_connector_python-9.5.0.tar.gz", hash = "sha256:92fb924285a86d8c146ebd63d94f9eaefa548da7813bc46271508fdc6cc1d596", size = 12251077, upload-time = "2025-10-22T09:05:45.423Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/0c/4365a802129be9fa63885533c38be019f1c6b6f5bcf8844ac53902314028/mysql_connector_python-9.4.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:7df1a8ddd182dd8adc914f6dc902a986787bf9599705c29aca7b2ce84e79d361", size = 17501627, upload-time = "2025-07-22T07:57:45.416Z" }, - { url = "https://files.pythonhosted.org/packages/c0/bf/ca596c00d7a6eaaf8ef2f66c9b23cd312527f483073c43ffac7843049cb4/mysql_connector_python-9.4.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:3892f20472e13e63b1fb4983f454771dd29f211b09724e69a9750e299542f2f8", size = 18369494, upload-time = "2025-07-22T07:57:49.714Z" }, - { url = "https://files.pythonhosted.org/packages/25/14/6510a11ed9f80d77f743dc207773092c4ab78d5efa454b39b48480315d85/mysql_connector_python-9.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:d3e87142103d71c4df647ece30f98e85e826652272ed1c74822b56f6acdc38e7", size = 33516187, upload-time = "2025-07-22T07:57:55.294Z" }, - { url = "https://files.pythonhosted.org/packages/16/a8/4f99d80f1cf77733ce9a44b6adb7f0dd7079e7afa51ca4826515ef0c3e16/mysql_connector_python-9.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:b27fcd403436fe83bafb2fe7fcb785891e821e639275c4ad3b3bd1e25f533206", size = 33917818, upload-time = "2025-07-22T07:58:00.523Z" }, - { url = "https://files.pythonhosted.org/packages/15/9c/127f974ca9d5ee25373cb5433da06bb1f36e05f2a6b7436da1fe9c6346b0/mysql_connector_python-9.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd6ff5afb9c324b0bbeae958c93156cce4168c743bf130faf224d52818d1f0ee", size = 16392378, upload-time = "2025-07-22T07:58:04.669Z" }, - { url = "https://files.pythonhosted.org/packages/03/7c/a543fb17c2dfa6be8548dfdc5879a0c7924cd5d1c79056c48472bb8fe858/mysql_connector_python-9.4.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:4efa3898a24aba6a4bfdbf7c1f5023c78acca3150d72cc91199cca2ccd22f76f", size = 17503693, upload-time = "2025-07-22T07:58:08.96Z" }, - { url = "https://files.pythonhosted.org/packages/cb/6e/c22fbee05f5cfd6ba76155b6d45f6261d8d4c1e36e23de04e7f25fbd01a4/mysql_connector_python-9.4.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:665c13e7402235162e5b7a2bfdee5895192121b64ea455c90a81edac6a48ede5", size = 18371987, upload-time = "2025-07-22T07:58:13.273Z" }, - { url = "https://files.pythonhosted.org/packages/b4/fd/f426f5f35a3d3180c7f84d1f96b4631be2574df94ca1156adab8618b236c/mysql_connector_python-9.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:815aa6cad0f351c1223ef345781a538f2e5e44ef405fdb3851eb322bd9c4ca2b", size = 33516214, upload-time = "2025-07-22T07:58:18.967Z" }, - { url = "https://files.pythonhosted.org/packages/45/5a/1b053ae80b43cd3ccebc4bb99a98826969b3b0f8adebdcc2530750ad76ed/mysql_connector_python-9.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b3436a2c8c0ec7052932213e8d01882e6eb069dbab33402e685409084b133a1c", size = 33918565, upload-time = "2025-07-22T07:58:25.28Z" }, - { url = "https://files.pythonhosted.org/packages/cb/69/36b989de675d98ba8ff7d45c96c30c699865c657046f2e32db14e78f13d9/mysql_connector_python-9.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:57b0c224676946b70548c56798d5023f65afa1ba5b8ac9f04a143d27976c7029", size = 16392563, upload-time = "2025-07-22T07:58:29.623Z" }, - { url = "https://files.pythonhosted.org/packages/36/34/b6165e15fd45a8deb00932d8e7d823de7650270873b4044c4db6688e1d8f/mysql_connector_python-9.4.0-py2.py3-none-any.whl", hash = "sha256:56e679169c704dab279b176fab2a9ee32d2c632a866c0f7cd48a8a1e2cf802c4", size = 406574, upload-time = "2025-07-22T07:59:08.394Z" }, -] - -[[package]] -name = "nest-asyncio" -version = "1.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, + { url = "https://files.pythonhosted.org/packages/05/03/77347d58b0027ce93a41858477e08422e498c6ebc24348b1f725ed7a67ae/mysql_connector_python-9.5.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:653e70cd10cf2d18dd828fae58dff5f0f7a5cf7e48e244f2093314dddf84a4b9", size = 17578984, upload-time = "2025-10-22T09:01:41.213Z" }, + { url = "https://files.pythonhosted.org/packages/a5/bb/0f45c7ee55ebc56d6731a593d85c0e7f25f83af90a094efebfd5be9fe010/mysql_connector_python-9.5.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:5add93f60b3922be71ea31b89bc8a452b876adbb49262561bd559860dae96b3f", size = 18445067, upload-time = "2025-10-22T09:01:43.215Z" }, + { url = "https://files.pythonhosted.org/packages/1c/ec/054de99d4aa50d851a37edca9039280f7194cc1bfd30aab38f5bd6977ebe/mysql_connector_python-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:20950a5e44896c03e3dc93ceb3a5e9b48c9acae18665ca6e13249b3fe5b96811", size = 33668029, upload-time = "2025-10-22T09:01:45.74Z" }, + { url = "https://files.pythonhosted.org/packages/90/a2/e6095dc3a7ad5c959fe4a65681db63af131f572e57cdffcc7816bc84e3ad/mysql_connector_python-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:7fdd3205b9242c284019310fa84437f3357b13f598e3f9b5d80d337d4a6406b8", size = 34101687, upload-time = "2025-10-22T09:01:48.462Z" }, + { url = "https://files.pythonhosted.org/packages/9c/88/bc13c33fca11acaf808bd1809d8602d78f5bb84f7b1e7b1a288c383a14fd/mysql_connector_python-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:c021d8b0830958b28712c70c53b206b4cf4766948dae201ea7ca588a186605e0", size = 16511749, upload-time = "2025-10-22T09:01:51.032Z" }, + { url = "https://files.pythonhosted.org/packages/02/89/167ebee82f4b01ba7339c241c3cc2518886a2be9f871770a1efa81b940a0/mysql_connector_python-9.5.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a72c2ef9d50b84f3c567c31b3bf30901af740686baa2a4abead5f202e0b7ea61", size = 17581904, upload-time = "2025-10-22T09:01:53.21Z" }, + { url = "https://files.pythonhosted.org/packages/67/46/630ca969ce10b30fdc605d65dab4a6157556d8cc3b77c724f56c2d83cb79/mysql_connector_python-9.5.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:bd9ba5a946cfd3b3b2688a75135357e862834b0321ed936fd968049be290872b", size = 18448195, upload-time = "2025-10-22T09:01:55.378Z" }, + { url = "https://files.pythonhosted.org/packages/f6/87/4c421f41ad169d8c9065ad5c46673c7af889a523e4899c1ac1d6bfd37262/mysql_connector_python-9.5.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:5ef7accbdf8b5f6ec60d2a1550654b7e27e63bf6f7b04020d5fb4191fb02bc4d", size = 33668638, upload-time = "2025-10-22T09:01:57.896Z" }, + { url = "https://files.pythonhosted.org/packages/a6/01/67cf210d50bfefbb9224b9a5c465857c1767388dade1004c903c8e22a991/mysql_connector_python-9.5.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:a6e0a4a0274d15e3d4c892ab93f58f46431222117dba20608178dfb2cc4d5fd8", size = 34102899, upload-time = "2025-10-22T09:02:00.291Z" }, + { url = "https://files.pythonhosted.org/packages/cd/ef/3d1a67d503fff38cc30e11d111cf28f0976987fb175f47b10d44494e1080/mysql_connector_python-9.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:b6c69cb37600b7e22f476150034e2afbd53342a175e20aea887f8158fc5e3ff6", size = 16512684, upload-time = "2025-10-22T09:02:02.411Z" }, + { url = "https://files.pythonhosted.org/packages/95/e1/45373c06781340c7b74fe9b88b85278ac05321889a307eaa5be079a997d4/mysql_connector_python-9.5.0-py2.py3-none-any.whl", hash = "sha256:ace137b88eb6fdafa1e5b2e03ac76ce1b8b1844b3a4af1192a02ae7c1a45bdee", size = 479047, upload-time = "2025-10-22T09:02:27.809Z" }, ] [[package]] @@ -3685,7 +3692,7 @@ wheels = [ [[package]] name = "onnxruntime" -version = "1.23.1" +version = "1.23.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "coloredlogs" }, @@ -3696,21 +3703,21 @@ dependencies = [ { name = "sympy" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/61/ee52bb2c9402cd1a0d550fc65b826c174f8eed49677dd3833ac1bfc0e35a/onnxruntime-1.23.1-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:9ba6e52fb7bc2758a61d1e421d060cf71d5e4259f95ea8a6f72320ae4415f229", size = 17194265, upload-time = "2025-10-08T04:25:24.479Z" }, - { url = "https://files.pythonhosted.org/packages/d3/67/67122b7b4138815090e0d304c8893fefb77370066a847d08e185f04f75fe/onnxruntime-1.23.1-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:7f130f4b0d31ba17c8789053a641958d0d341d96a1bff578d613fb52ded218c2", size = 19150493, upload-time = "2025-10-08T04:24:21.839Z" }, - { url = "https://files.pythonhosted.org/packages/73/e6/66cebc4dcdb217ccb1027cfcbcc01d6399e999c294d986806991c144cbe7/onnxruntime-1.23.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b89fd116f20b70e1140a77286954a7715eb9347260ff2008ee7ec94994df039", size = 15216531, upload-time = "2025-10-08T04:24:04.973Z" }, - { url = "https://files.pythonhosted.org/packages/38/47/083847220c4a429e272ce9407bc8c47fa77b62e0c787ef2cc94fe9776c1b/onnxruntime-1.23.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:61139a29d536b71db6045c75462e593a53feecc19756dc222531971cd08e5efe", size = 17368047, upload-time = "2025-10-08T04:24:48.426Z" }, - { url = "https://files.pythonhosted.org/packages/ac/8e/b3d861a7d199fd9c6a0b4af9b5d813bcc853d2e4dd4dac2c70b6c23097ed/onnxruntime-1.23.1-cp311-cp311-win_amd64.whl", hash = "sha256:7973186e8eb66e32ea20cb238ae92b604091e4d1df632653ec830abf7584d0b3", size = 13466816, upload-time = "2025-10-08T04:25:15.037Z" }, - { url = "https://files.pythonhosted.org/packages/00/3c/4b4f56b5df4596d1d95aafe13cbc987d050a89364ff5b2f90308376901fb/onnxruntime-1.23.1-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:564d6add1688efdb0720cf2158b50314fc35b744ad2623155ee3b805c381d9ce", size = 17194708, upload-time = "2025-10-08T04:25:27.188Z" }, - { url = "https://files.pythonhosted.org/packages/b4/97/05529b97142c1a09bde2caefea4fd29f71329b9275b52bacdbc2c4f9e964/onnxruntime-1.23.1-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:3864c39307714eff1753149215ad86324a9372e3172a0275d5b16ffd296574bf", size = 19152841, upload-time = "2025-10-08T04:24:24.157Z" }, - { url = "https://files.pythonhosted.org/packages/3a/b9/1232fd295fa9c818aa2a7883d87a2f864fb5edee56ec757c6e857fdd1863/onnxruntime-1.23.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e6b6b5ea80a96924f67fe1e5519f6c6f9cd716fdb5a4fd1ecb4f2b0971e8d00", size = 15223749, upload-time = "2025-10-08T04:24:08.088Z" }, - { url = "https://files.pythonhosted.org/packages/c4/b0/4663a333a82c77f159e48fe8639b1f03e4a05036625be9129c20c4d71d12/onnxruntime-1.23.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:576502dad714ffe5f3b4e1918c5b3368766b222063c585e5fd88415c063e4c80", size = 17378483, upload-time = "2025-10-08T04:24:50.712Z" }, - { url = "https://files.pythonhosted.org/packages/7c/60/8100d98690cbf1de03e08d1f3eff33ff00c652806c7130658a48a8f60584/onnxruntime-1.23.1-cp312-cp312-win_amd64.whl", hash = "sha256:1b89b7c4d4c00a67debc2b0a1484d7f51b23fef85fbd80ac83ed2d17b2161bd6", size = 13467773, upload-time = "2025-10-08T04:25:17.097Z" }, + { url = "https://files.pythonhosted.org/packages/44/be/467b00f09061572f022ffd17e49e49e5a7a789056bad95b54dfd3bee73ff/onnxruntime-1.23.2-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:6f91d2c9b0965e86827a5ba01531d5b669770b01775b23199565d6c1f136616c", size = 17196113, upload-time = "2025-10-22T03:47:33.526Z" }, + { url = "https://files.pythonhosted.org/packages/9f/a8/3c23a8f75f93122d2b3410bfb74d06d0f8da4ac663185f91866b03f7da1b/onnxruntime-1.23.2-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:87d8b6eaf0fbeb6835a60a4265fde7a3b60157cf1b2764773ac47237b4d48612", size = 19153857, upload-time = "2025-10-22T03:46:37.578Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d8/506eed9af03d86f8db4880a4c47cd0dffee973ef7e4f4cff9f1d4bcf7d22/onnxruntime-1.23.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bbfd2fca76c855317568c1b36a885ddea2272c13cb0e395002c402f2360429a6", size = 15220095, upload-time = "2025-10-22T03:46:24.769Z" }, + { url = "https://files.pythonhosted.org/packages/e9/80/113381ba832d5e777accedc6cb41d10f9eca82321ae31ebb6bcede530cea/onnxruntime-1.23.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:da44b99206e77734c5819aa2142c69e64f3b46edc3bd314f6a45a932defc0b3e", size = 17372080, upload-time = "2025-10-22T03:47:00.265Z" }, + { url = "https://files.pythonhosted.org/packages/3a/db/1b4a62e23183a0c3fe441782462c0ede9a2a65c6bbffb9582fab7c7a0d38/onnxruntime-1.23.2-cp311-cp311-win_amd64.whl", hash = "sha256:902c756d8b633ce0dedd889b7c08459433fbcf35e9c38d1c03ddc020f0648c6e", size = 13468349, upload-time = "2025-10-22T03:47:25.783Z" }, + { url = "https://files.pythonhosted.org/packages/1b/9e/f748cd64161213adeef83d0cb16cb8ace1e62fa501033acdd9f9341fff57/onnxruntime-1.23.2-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:b8f029a6b98d3cf5be564d52802bb50a8489ab73409fa9db0bf583eabb7c2321", size = 17195929, upload-time = "2025-10-22T03:47:36.24Z" }, + { url = "https://files.pythonhosted.org/packages/91/9d/a81aafd899b900101988ead7fb14974c8a58695338ab6a0f3d6b0100f30b/onnxruntime-1.23.2-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:218295a8acae83905f6f1aed8cacb8e3eb3bd7513a13fe4ba3b2664a19fc4a6b", size = 19157705, upload-time = "2025-10-22T03:46:40.415Z" }, + { url = "https://files.pythonhosted.org/packages/3c/35/4e40f2fba272a6698d62be2cd21ddc3675edfc1a4b9ddefcc4648f115315/onnxruntime-1.23.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:76ff670550dc23e58ea9bc53b5149b99a44e63b34b524f7b8547469aaa0dcb8c", size = 15226915, upload-time = "2025-10-22T03:46:27.773Z" }, + { url = "https://files.pythonhosted.org/packages/ef/88/9cc25d2bafe6bc0d4d3c1db3ade98196d5b355c0b273e6a5dc09c5d5d0d5/onnxruntime-1.23.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f9b4ae77f8e3c9bee50c27bc1beede83f786fe1d52e99ac85aa8d65a01e9b77", size = 17382649, upload-time = "2025-10-22T03:47:02.782Z" }, + { url = "https://files.pythonhosted.org/packages/c0/b4/569d298f9fc4d286c11c45e85d9ffa9e877af12ace98af8cab52396e8f46/onnxruntime-1.23.2-cp312-cp312-win_amd64.whl", hash = "sha256:25de5214923ce941a3523739d34a520aac30f21e631de53bba9174dc9c004435", size = 13470528, upload-time = "2025-10-22T03:47:28.106Z" }, ] [[package]] name = "openai" -version = "2.3.0" +version = "2.7.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -3722,9 +3729,9 @@ dependencies = [ { name = "tqdm" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/de/90/8f26554d24d63ed4f94d33c24271559863223a67e624f4d2e65ba8e48dca/openai-2.3.0.tar.gz", hash = "sha256:8d213ee5aaf91737faea2d7fc1cd608657a5367a18966372a3756ceaabfbd812", size = 589616, upload-time = "2025-10-10T01:12:50.851Z" } +sdist = { url = "https://files.pythonhosted.org/packages/71/e3/cec27fa28ef36c4ccea71e9e8c20be9b8539618732989a82027575aab9d4/openai-2.7.2.tar.gz", hash = "sha256:082ef61163074d8efad0035dd08934cf5e3afd37254f70fc9165dd6a8c67dcbd", size = 595732, upload-time = "2025-11-10T16:42:31.108Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/5b/4be258ff072ed8ee15f6bfd8d5a1a4618aa4704b127c0c5959212ad177d6/openai-2.3.0-py3-none-any.whl", hash = "sha256:a7aa83be6f7b0ab2e4d4d7bcaf36e3d790874c0167380c5d0afd0ed99a86bd7b", size = 999768, upload-time = "2025-10-10T01:12:48.647Z" }, + { url = "https://files.pythonhosted.org/packages/25/66/22cfe4b695b5fd042931b32c67d685e867bfd169ebf46036b95b57314c33/openai-2.7.2-py3-none-any.whl", hash = "sha256:116f522f4427f8a0a59b51655a356da85ce092f3ed6abeca65f03c8be6e073d9", size = 1008375, upload-time = "2025-11-10T16:42:28.574Z" }, ] [[package]] @@ -3745,7 +3752,7 @@ wheels = [ [[package]] name = "openinference-instrumentation" -version = "0.1.40" +version = "0.1.42" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "openinference-semantic-conventions" }, @@ -3753,18 +3760,18 @@ dependencies = [ { name = "opentelemetry-sdk" }, { name = "wrapt" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/37/59/750c25a353260a72287e618b9ccabd57f02db6bfd571c6dbf132202abeff/openinference_instrumentation-0.1.40.tar.gz", hash = "sha256:3080785479793a56023806c71dccbc39418925947407667794c651f992f700a2", size = 23824, upload-time = "2025-10-10T03:48:48.606Z" } +sdist = { url = "https://files.pythonhosted.org/packages/00/d0/b19061a21fd6127d2857c77744a36073bba9c1502d1d5e8517b708eb8b7c/openinference_instrumentation-0.1.42.tar.gz", hash = "sha256:2275babc34022e151b5492cfba41d3b12e28377f8e08cb45e5d64fe2d9d7fe37", size = 23954, upload-time = "2025-11-05T01:37:46.869Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/fd/2b6ea9d95f3eb1deba10975a14b80d7fe79528258111771580a0437d4f44/openinference_instrumentation-0.1.40-py3-none-any.whl", hash = "sha256:d2e894f25addb1dfba563789213139876c5a01fca0a1fa8aa52a455a988a11d4", size = 29967, upload-time = "2025-10-10T03:48:46.518Z" }, + { url = "https://files.pythonhosted.org/packages/c3/71/43ee4616fc95dbd2f560550f199c6652a5eb93f84e8aa0039bc95c19cfe0/openinference_instrumentation-0.1.42-py3-none-any.whl", hash = "sha256:e7521ff90833ef7cc65db526a2f59b76a496180abeaaee30ec6abbbc0b43f8ec", size = 30086, upload-time = "2025-11-05T01:37:43.866Z" }, ] [[package]] name = "openinference-semantic-conventions" -version = "0.1.24" +version = "0.1.25" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/07/15/be7566a4bba4b57f7c70b088f42735f2005e2c0adce646a537f63dcf21de/openinference_semantic_conventions-0.1.24.tar.gz", hash = "sha256:3223b8c3958525457a369d58ebf0c56230a1f00567ae1e99f1c2049a8ac2cacd", size = 12741, upload-time = "2025-10-10T03:49:13.987Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/68/81c8a0b90334ff11e4f285e4934c57f30bea3ef0c0b9f99b65e7b80fae3b/openinference_semantic_conventions-0.1.25.tar.gz", hash = "sha256:f0a8c2cfbd00195d1f362b4803518341e80867d446c2959bf1743f1894fce31d", size = 12767, upload-time = "2025-11-05T01:37:45.89Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/c5/fa81b19042b387826151f984a91fa3d0b52b08374e4d5786521ac2d9e704/openinference_semantic_conventions-0.1.24-py3-none-any.whl", hash = "sha256:b2d650ca7e39c5fb02bf908b8049d6ece2a2657757448e1925a38b59548a80b3", size = 10373, upload-time = "2025-10-10T03:49:00.318Z" }, + { url = "https://files.pythonhosted.org/packages/fd/3d/dd14ee2eb8a3f3054249562e76b253a1545c76adbbfd43a294f71acde5c3/openinference_semantic_conventions-0.1.25-py3-none-any.whl", hash = "sha256:3814240f3bd61f05d9562b761de70ee793d55b03bca1634edf57d7a2735af238", size = 10395, upload-time = "2025-11-05T01:37:43.697Z" }, ] [[package]] @@ -4085,7 +4092,7 @@ wheels = [ [[package]] name = "opik" -version = "1.8.74" +version = "1.8.102" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "boto3-stubs", extra = ["bedrock-runtime"] }, @@ -4104,9 +4111,9 @@ dependencies = [ { name = "tqdm" }, { name = "uuid6" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3b/31/887f133aa82aeb4cb8a01d98ad6ae73cb0580c2c9395d76bae1d67dbb6f6/opik-1.8.74.tar.gz", hash = "sha256:4b18248dbd741dab16dab399c1ab7197f1f6c6775ee06285ff07d3d22e1810de", size = 412504, upload-time = "2025-10-13T13:43:03.117Z" } +sdist = { url = "https://files.pythonhosted.org/packages/30/af/f6382cea86bdfbfd0f9571960a15301da4a6ecd1506070d9252a0c0a7564/opik-1.8.102.tar.gz", hash = "sha256:c836a113e8b7fdf90770a3854dcc859b3c30d6347383d7c11e52971a530ed2c3", size = 490462, upload-time = "2025-11-05T18:54:50.142Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/37/5d/11c12e2471880effa7a597d96bce848271fa93007f7f543ed607fb31822a/opik-1.8.74-py3-none-any.whl", hash = "sha256:34ffbff2c447da117e58bcc2fdf53b3b534dd1ffe9a293eb912f5419fc9904c3", size = 772547, upload-time = "2025-10-13T13:43:01.29Z" }, + { url = "https://files.pythonhosted.org/packages/b9/8b/9b15a01f8360201100b9a5d3e0aeeeda57833fca2b16d34b9fada147fc4b/opik-1.8.102-py3-none-any.whl", hash = "sha256:d8501134bf62bf95443de036f6eaa4f66006f81f9b99e0a8a09e21d8be8c1628", size = 885834, upload-time = "2025-11-05T18:54:48.22Z" }, ] [[package]] @@ -4150,40 +4157,40 @@ wheels = [ [[package]] name = "orjson" -version = "3.11.3" +version = "3.11.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/be/4d/8df5f83256a809c22c4d6792ce8d43bb503be0fb7a8e4da9025754b09658/orjson-3.11.3.tar.gz", hash = "sha256:1c0603b1d2ffcd43a411d64797a19556ef76958aef1c182f22dc30860152a98a", size = 5482394, upload-time = "2025-08-26T17:46:43.171Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c6/fe/ed708782d6709cc60eb4c2d8a361a440661f74134675c72990f2c48c785f/orjson-3.11.4.tar.gz", hash = "sha256:39485f4ab4c9b30a3943cfe99e1a213c4776fb69e8abd68f66b83d5a0b0fdc6d", size = 5945188, upload-time = "2025-10-24T15:50:38.027Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cd/8b/360674cd817faef32e49276187922a946468579fcaf37afdfb6c07046e92/orjson-3.11.3-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9d2ae0cc6aeb669633e0124531f342a17d8e97ea999e42f12a5ad4adaa304c5f", size = 238238, upload-time = "2025-08-26T17:44:54.214Z" }, - { url = "https://files.pythonhosted.org/packages/05/3d/5fa9ea4b34c1a13be7d9046ba98d06e6feb1d8853718992954ab59d16625/orjson-3.11.3-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:ba21dbb2493e9c653eaffdc38819b004b7b1b246fb77bfc93dc016fe664eac91", size = 127713, upload-time = "2025-08-26T17:44:55.596Z" }, - { url = "https://files.pythonhosted.org/packages/e5/5f/e18367823925e00b1feec867ff5f040055892fc474bf5f7875649ecfa586/orjson-3.11.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00f1a271e56d511d1569937c0447d7dce5a99a33ea0dec76673706360a051904", size = 123241, upload-time = "2025-08-26T17:44:57.185Z" }, - { url = "https://files.pythonhosted.org/packages/0f/bd/3c66b91c4564759cf9f473251ac1650e446c7ba92a7c0f9f56ed54f9f0e6/orjson-3.11.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b67e71e47caa6680d1b6f075a396d04fa6ca8ca09aafb428731da9b3ea32a5a6", size = 127895, upload-time = "2025-08-26T17:44:58.349Z" }, - { url = "https://files.pythonhosted.org/packages/82/b5/dc8dcd609db4766e2967a85f63296c59d4722b39503e5b0bf7fd340d387f/orjson-3.11.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d7d012ebddffcce8c85734a6d9e5f08180cd3857c5f5a3ac70185b43775d043d", size = 130303, upload-time = "2025-08-26T17:44:59.491Z" }, - { url = "https://files.pythonhosted.org/packages/48/c2/d58ec5fd1270b2aa44c862171891adc2e1241bd7dab26c8f46eb97c6c6f1/orjson-3.11.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd759f75d6b8d1b62012b7f5ef9461d03c804f94d539a5515b454ba3a6588038", size = 132366, upload-time = "2025-08-26T17:45:00.654Z" }, - { url = "https://files.pythonhosted.org/packages/73/87/0ef7e22eb8dd1ef940bfe3b9e441db519e692d62ed1aae365406a16d23d0/orjson-3.11.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6890ace0809627b0dff19cfad92d69d0fa3f089d3e359a2a532507bb6ba34efb", size = 135180, upload-time = "2025-08-26T17:45:02.424Z" }, - { url = "https://files.pythonhosted.org/packages/bb/6a/e5bf7b70883f374710ad74faf99bacfc4b5b5a7797c1d5e130350e0e28a3/orjson-3.11.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9d4a5e041ae435b815e568537755773d05dac031fee6a57b4ba70897a44d9d2", size = 132741, upload-time = "2025-08-26T17:45:03.663Z" }, - { url = "https://files.pythonhosted.org/packages/bd/0c/4577fd860b6386ffaa56440e792af01c7882b56d2766f55384b5b0e9d39b/orjson-3.11.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2d68bf97a771836687107abfca089743885fb664b90138d8761cce61d5625d55", size = 131104, upload-time = "2025-08-26T17:45:04.939Z" }, - { url = "https://files.pythonhosted.org/packages/66/4b/83e92b2d67e86d1c33f2ea9411742a714a26de63641b082bdbf3d8e481af/orjson-3.11.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:bfc27516ec46f4520b18ef645864cee168d2a027dbf32c5537cb1f3e3c22dac1", size = 403887, upload-time = "2025-08-26T17:45:06.228Z" }, - { url = "https://files.pythonhosted.org/packages/6d/e5/9eea6a14e9b5ceb4a271a1fd2e1dec5f2f686755c0fab6673dc6ff3433f4/orjson-3.11.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f66b001332a017d7945e177e282a40b6997056394e3ed7ddb41fb1813b83e824", size = 145855, upload-time = "2025-08-26T17:45:08.338Z" }, - { url = "https://files.pythonhosted.org/packages/45/78/8d4f5ad0c80ba9bf8ac4d0fc71f93a7d0dc0844989e645e2074af376c307/orjson-3.11.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:212e67806525d2561efbfe9e799633b17eb668b8964abed6b5319b2f1cfbae1f", size = 135361, upload-time = "2025-08-26T17:45:09.625Z" }, - { url = "https://files.pythonhosted.org/packages/0b/5f/16386970370178d7a9b438517ea3d704efcf163d286422bae3b37b88dbb5/orjson-3.11.3-cp311-cp311-win32.whl", hash = "sha256:6e8e0c3b85575a32f2ffa59de455f85ce002b8bdc0662d6b9c2ed6d80ab5d204", size = 136190, upload-time = "2025-08-26T17:45:10.962Z" }, - { url = "https://files.pythonhosted.org/packages/09/60/db16c6f7a41dd8ac9fb651f66701ff2aeb499ad9ebc15853a26c7c152448/orjson-3.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:6be2f1b5d3dc99a5ce5ce162fc741c22ba9f3443d3dd586e6a1211b7bc87bc7b", size = 131389, upload-time = "2025-08-26T17:45:12.285Z" }, - { url = "https://files.pythonhosted.org/packages/3e/2a/bb811ad336667041dea9b8565c7c9faf2f59b47eb5ab680315eea612ef2e/orjson-3.11.3-cp311-cp311-win_arm64.whl", hash = "sha256:fafb1a99d740523d964b15c8db4eabbfc86ff29f84898262bf6e3e4c9e97e43e", size = 126120, upload-time = "2025-08-26T17:45:13.515Z" }, - { url = "https://files.pythonhosted.org/packages/3d/b0/a7edab2a00cdcb2688e1c943401cb3236323e7bfd2839815c6131a3742f4/orjson-3.11.3-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8c752089db84333e36d754c4baf19c0e1437012242048439c7e80eb0e6426e3b", size = 238259, upload-time = "2025-08-26T17:45:15.093Z" }, - { url = "https://files.pythonhosted.org/packages/e1/c6/ff4865a9cc398a07a83342713b5932e4dc3cb4bf4bc04e8f83dedfc0d736/orjson-3.11.3-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:9b8761b6cf04a856eb544acdd82fc594b978f12ac3602d6374a7edb9d86fd2c2", size = 127633, upload-time = "2025-08-26T17:45:16.417Z" }, - { url = "https://files.pythonhosted.org/packages/6e/e6/e00bea2d9472f44fe8794f523e548ce0ad51eb9693cf538a753a27b8bda4/orjson-3.11.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b13974dc8ac6ba22feaa867fc19135a3e01a134b4f7c9c28162fed4d615008a", size = 123061, upload-time = "2025-08-26T17:45:17.673Z" }, - { url = "https://files.pythonhosted.org/packages/54/31/9fbb78b8e1eb3ac605467cb846e1c08d0588506028b37f4ee21f978a51d4/orjson-3.11.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f83abab5bacb76d9c821fd5c07728ff224ed0e52d7a71b7b3de822f3df04e15c", size = 127956, upload-time = "2025-08-26T17:45:19.172Z" }, - { url = "https://files.pythonhosted.org/packages/36/88/b0604c22af1eed9f98d709a96302006915cfd724a7ebd27d6dd11c22d80b/orjson-3.11.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e6fbaf48a744b94091a56c62897b27c31ee2da93d826aa5b207131a1e13d4064", size = 130790, upload-time = "2025-08-26T17:45:20.586Z" }, - { url = "https://files.pythonhosted.org/packages/0e/9d/1c1238ae9fffbfed51ba1e507731b3faaf6b846126a47e9649222b0fd06f/orjson-3.11.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc779b4f4bba2847d0d2940081a7b6f7b5877e05408ffbb74fa1faf4a136c424", size = 132385, upload-time = "2025-08-26T17:45:22.036Z" }, - { url = "https://files.pythonhosted.org/packages/a3/b5/c06f1b090a1c875f337e21dd71943bc9d84087f7cdf8c6e9086902c34e42/orjson-3.11.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd4b909ce4c50faa2192da6bb684d9848d4510b736b0611b6ab4020ea6fd2d23", size = 135305, upload-time = "2025-08-26T17:45:23.4Z" }, - { url = "https://files.pythonhosted.org/packages/a0/26/5f028c7d81ad2ebbf84414ba6d6c9cac03f22f5cd0d01eb40fb2d6a06b07/orjson-3.11.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:524b765ad888dc5518bbce12c77c2e83dee1ed6b0992c1790cc5fb49bb4b6667", size = 132875, upload-time = "2025-08-26T17:45:25.182Z" }, - { url = "https://files.pythonhosted.org/packages/fe/d4/b8df70d9cfb56e385bf39b4e915298f9ae6c61454c8154a0f5fd7efcd42e/orjson-3.11.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:84fd82870b97ae3cdcea9d8746e592b6d40e1e4d4527835fc520c588d2ded04f", size = 130940, upload-time = "2025-08-26T17:45:27.209Z" }, - { url = "https://files.pythonhosted.org/packages/da/5e/afe6a052ebc1a4741c792dd96e9f65bf3939d2094e8b356503b68d48f9f5/orjson-3.11.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:fbecb9709111be913ae6879b07bafd4b0785b44c1eb5cac8ac76da048b3885a1", size = 403852, upload-time = "2025-08-26T17:45:28.478Z" }, - { url = "https://files.pythonhosted.org/packages/f8/90/7bbabafeb2ce65915e9247f14a56b29c9334003536009ef5b122783fe67e/orjson-3.11.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9dba358d55aee552bd868de348f4736ca5a4086d9a62e2bfbbeeb5629fe8b0cc", size = 146293, upload-time = "2025-08-26T17:45:29.86Z" }, - { url = "https://files.pythonhosted.org/packages/27/b3/2d703946447da8b093350570644a663df69448c9d9330e5f1d9cce997f20/orjson-3.11.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:eabcf2e84f1d7105f84580e03012270c7e97ecb1fb1618bda395061b2a84a049", size = 135470, upload-time = "2025-08-26T17:45:31.243Z" }, - { url = "https://files.pythonhosted.org/packages/38/70/b14dcfae7aff0e379b0119c8a812f8396678919c431efccc8e8a0263e4d9/orjson-3.11.3-cp312-cp312-win32.whl", hash = "sha256:3782d2c60b8116772aea8d9b7905221437fdf53e7277282e8d8b07c220f96cca", size = 136248, upload-time = "2025-08-26T17:45:32.567Z" }, - { url = "https://files.pythonhosted.org/packages/35/b8/9e3127d65de7fff243f7f3e53f59a531bf6bb295ebe5db024c2503cc0726/orjson-3.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:79b44319268af2eaa3e315b92298de9a0067ade6e6003ddaef72f8e0bedb94f1", size = 131437, upload-time = "2025-08-26T17:45:34.949Z" }, - { url = "https://files.pythonhosted.org/packages/51/92/a946e737d4d8a7fd84a606aba96220043dcc7d6988b9e7551f7f6d5ba5ad/orjson-3.11.3-cp312-cp312-win_arm64.whl", hash = "sha256:0e92a4e83341ef79d835ca21b8bd13e27c859e4e9e4d7b63defc6e58462a3710", size = 125978, upload-time = "2025-08-26T17:45:36.422Z" }, + { url = "https://files.pythonhosted.org/packages/63/1d/1ea6005fffb56715fd48f632611e163d1604e8316a5bad2288bee9a1c9eb/orjson-3.11.4-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5e59d23cd93ada23ec59a96f215139753fbfe3a4d989549bcb390f8c00370b39", size = 243498, upload-time = "2025-10-24T15:48:48.101Z" }, + { url = "https://files.pythonhosted.org/packages/37/d7/ffed10c7da677f2a9da307d491b9eb1d0125b0307019c4ad3d665fd31f4f/orjson-3.11.4-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:5c3aedecfc1beb988c27c79d52ebefab93b6c3921dbec361167e6559aba2d36d", size = 128961, upload-time = "2025-10-24T15:48:49.571Z" }, + { url = "https://files.pythonhosted.org/packages/a2/96/3e4d10a18866d1368f73c8c44b7fe37cc8a15c32f2a7620be3877d4c55a3/orjson-3.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da9e5301f1c2caa2a9a4a303480d79c9ad73560b2e7761de742ab39fe59d9175", size = 130321, upload-time = "2025-10-24T15:48:50.713Z" }, + { url = "https://files.pythonhosted.org/packages/eb/1f/465f66e93f434f968dd74d5b623eb62c657bdba2332f5a8be9f118bb74c7/orjson-3.11.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8873812c164a90a79f65368f8f96817e59e35d0cc02786a5356f0e2abed78040", size = 129207, upload-time = "2025-10-24T15:48:52.193Z" }, + { url = "https://files.pythonhosted.org/packages/28/43/d1e94837543321c119dff277ae8e348562fe8c0fafbb648ef7cb0c67e521/orjson-3.11.4-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d7feb0741ebb15204e748f26c9638e6665a5fa93c37a2c73d64f1669b0ddc63", size = 136323, upload-time = "2025-10-24T15:48:54.806Z" }, + { url = "https://files.pythonhosted.org/packages/bf/04/93303776c8890e422a5847dd012b4853cdd88206b8bbd3edc292c90102d1/orjson-3.11.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01ee5487fefee21e6910da4c2ee9eef005bee568a0879834df86f888d2ffbdd9", size = 137440, upload-time = "2025-10-24T15:48:56.326Z" }, + { url = "https://files.pythonhosted.org/packages/1e/ef/75519d039e5ae6b0f34d0336854d55544ba903e21bf56c83adc51cd8bf82/orjson-3.11.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d40d46f348c0321df01507f92b95a377240c4ec31985225a6668f10e2676f9a", size = 136680, upload-time = "2025-10-24T15:48:57.476Z" }, + { url = "https://files.pythonhosted.org/packages/b5/18/bf8581eaae0b941b44efe14fee7b7862c3382fbc9a0842132cfc7cf5ecf4/orjson-3.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95713e5fc8af84d8edc75b785d2386f653b63d62b16d681687746734b4dfc0be", size = 136160, upload-time = "2025-10-24T15:48:59.631Z" }, + { url = "https://files.pythonhosted.org/packages/c4/35/a6d582766d351f87fc0a22ad740a641b0a8e6fc47515e8614d2e4790ae10/orjson-3.11.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ad73ede24f9083614d6c4ca9a85fe70e33be7bf047ec586ee2363bc7418fe4d7", size = 140318, upload-time = "2025-10-24T15:49:00.834Z" }, + { url = "https://files.pythonhosted.org/packages/76/b3/5a4801803ab2e2e2d703bce1a56540d9f99a9143fbec7bf63d225044fef8/orjson-3.11.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:842289889de515421f3f224ef9c1f1efb199a32d76d8d2ca2706fa8afe749549", size = 406330, upload-time = "2025-10-24T15:49:02.327Z" }, + { url = "https://files.pythonhosted.org/packages/80/55/a8f682f64833e3a649f620eafefee175cbfeb9854fc5b710b90c3bca45df/orjson-3.11.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3b2427ed5791619851c52a1261b45c233930977e7de8cf36de05636c708fa905", size = 149580, upload-time = "2025-10-24T15:49:03.517Z" }, + { url = "https://files.pythonhosted.org/packages/ad/e4/c132fa0c67afbb3eb88274fa98df9ac1f631a675e7877037c611805a4413/orjson-3.11.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3c36e524af1d29982e9b190573677ea02781456b2e537d5840e4538a5ec41907", size = 139846, upload-time = "2025-10-24T15:49:04.761Z" }, + { url = "https://files.pythonhosted.org/packages/54/06/dc3491489efd651fef99c5908e13951abd1aead1257c67f16135f95ce209/orjson-3.11.4-cp311-cp311-win32.whl", hash = "sha256:87255b88756eab4a68ec61837ca754e5d10fa8bc47dc57f75cedfeaec358d54c", size = 135781, upload-time = "2025-10-24T15:49:05.969Z" }, + { url = "https://files.pythonhosted.org/packages/79/b7/5e5e8d77bd4ea02a6ac54c42c818afb01dd31961be8a574eb79f1d2cfb1e/orjson-3.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:e2d5d5d798aba9a0e1fede8d853fa899ce2cb930ec0857365f700dffc2c7af6a", size = 131391, upload-time = "2025-10-24T15:49:07.355Z" }, + { url = "https://files.pythonhosted.org/packages/0f/dc/9484127cc1aa213be398ed735f5f270eedcb0c0977303a6f6ddc46b60204/orjson-3.11.4-cp311-cp311-win_arm64.whl", hash = "sha256:6bb6bb41b14c95d4f2702bce9975fda4516f1db48e500102fc4d8119032ff045", size = 126252, upload-time = "2025-10-24T15:49:08.869Z" }, + { url = "https://files.pythonhosted.org/packages/63/51/6b556192a04595b93e277a9ff71cd0cc06c21a7df98bcce5963fa0f5e36f/orjson-3.11.4-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d4371de39319d05d3f482f372720b841c841b52f5385bd99c61ed69d55d9ab50", size = 243571, upload-time = "2025-10-24T15:49:10.008Z" }, + { url = "https://files.pythonhosted.org/packages/1c/2c/2602392ddf2601d538ff11848b98621cd465d1a1ceb9db9e8043181f2f7b/orjson-3.11.4-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e41fd3b3cac850eaae78232f37325ed7d7436e11c471246b87b2cd294ec94853", size = 128891, upload-time = "2025-10-24T15:49:11.297Z" }, + { url = "https://files.pythonhosted.org/packages/4e/47/bf85dcf95f7a3a12bf223394a4f849430acd82633848d52def09fa3f46ad/orjson-3.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:600e0e9ca042878c7fdf189cf1b028fe2c1418cc9195f6cb9824eb6ed99cb938", size = 130137, upload-time = "2025-10-24T15:49:12.544Z" }, + { url = "https://files.pythonhosted.org/packages/b4/4d/a0cb31007f3ab6f1fd2a1b17057c7c349bc2baf8921a85c0180cc7be8011/orjson-3.11.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7bbf9b333f1568ef5da42bc96e18bf30fd7f8d54e9ae066d711056add508e415", size = 129152, upload-time = "2025-10-24T15:49:13.754Z" }, + { url = "https://files.pythonhosted.org/packages/f7/ef/2811def7ce3d8576b19e3929fff8f8f0d44bc5eb2e0fdecb2e6e6cc6c720/orjson-3.11.4-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4806363144bb6e7297b8e95870e78d30a649fdc4e23fc84daa80c8ebd366ce44", size = 136834, upload-time = "2025-10-24T15:49:15.307Z" }, + { url = "https://files.pythonhosted.org/packages/00/d4/9aee9e54f1809cec8ed5abd9bc31e8a9631d19460e3b8470145d25140106/orjson-3.11.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad355e8308493f527d41154e9053b86a5be892b3b359a5c6d5d95cda23601cb2", size = 137519, upload-time = "2025-10-24T15:49:16.557Z" }, + { url = "https://files.pythonhosted.org/packages/db/ea/67bfdb5465d5679e8ae8d68c11753aaf4f47e3e7264bad66dc2f2249e643/orjson-3.11.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a7517482667fb9f0ff1b2f16fe5829296ed7a655d04d68cd9711a4d8a4e708", size = 136749, upload-time = "2025-10-24T15:49:17.796Z" }, + { url = "https://files.pythonhosted.org/packages/01/7e/62517dddcfce6d53a39543cd74d0dccfcbdf53967017c58af68822100272/orjson-3.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97eb5942c7395a171cbfecc4ef6701fc3c403e762194683772df4c54cfbb2210", size = 136325, upload-time = "2025-10-24T15:49:19.347Z" }, + { url = "https://files.pythonhosted.org/packages/18/ae/40516739f99ab4c7ec3aaa5cc242d341fcb03a45d89edeeaabc5f69cb2cf/orjson-3.11.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:149d95d5e018bdd822e3f38c103b1a7c91f88d38a88aada5c4e9b3a73a244241", size = 140204, upload-time = "2025-10-24T15:49:20.545Z" }, + { url = "https://files.pythonhosted.org/packages/82/18/ff5734365623a8916e3a4037fcef1cd1782bfc14cf0992afe7940c5320bf/orjson-3.11.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:624f3951181eb46fc47dea3d221554e98784c823e7069edb5dbd0dc826ac909b", size = 406242, upload-time = "2025-10-24T15:49:21.884Z" }, + { url = "https://files.pythonhosted.org/packages/e1/43/96436041f0a0c8c8deca6a05ebeaf529bf1de04839f93ac5e7c479807aec/orjson-3.11.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:03bfa548cf35e3f8b3a96c4e8e41f753c686ff3d8e182ce275b1751deddab58c", size = 150013, upload-time = "2025-10-24T15:49:23.185Z" }, + { url = "https://files.pythonhosted.org/packages/1b/48/78302d98423ed8780479a1e682b9aecb869e8404545d999d34fa486e573e/orjson-3.11.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:525021896afef44a68148f6ed8a8bf8375553d6066c7f48537657f64823565b9", size = 139951, upload-time = "2025-10-24T15:49:24.428Z" }, + { url = "https://files.pythonhosted.org/packages/4a/7b/ad613fdcdaa812f075ec0875143c3d37f8654457d2af17703905425981bf/orjson-3.11.4-cp312-cp312-win32.whl", hash = "sha256:b58430396687ce0f7d9eeb3dd47761ca7d8fda8e9eb92b3077a7a353a75efefa", size = 136049, upload-time = "2025-10-24T15:49:25.973Z" }, + { url = "https://files.pythonhosted.org/packages/b9/3c/9cf47c3ff5f39b8350fb21ba65d789b6a1129d4cbb3033ba36c8a9023520/orjson-3.11.4-cp312-cp312-win_amd64.whl", hash = "sha256:c6dbf422894e1e3c80a177133c0dda260f81428f9de16d61041949f6a2e5c140", size = 131461, upload-time = "2025-10-24T15:49:27.259Z" }, + { url = "https://files.pythonhosted.org/packages/c6/3b/e2425f61e5825dc5b08c2a5a2b3af387eaaca22a12b9c8c01504f8614c36/orjson-3.11.4-cp312-cp312-win_arm64.whl", hash = "sha256:d38d2bc06d6415852224fcc9c0bfa834c25431e466dc319f0edd56cca81aa96e", size = 126167, upload-time = "2025-10-24T15:49:28.511Z" }, ] [[package]] @@ -4331,39 +4338,39 @@ wheels = [ [[package]] name = "pillow" -version = "11.3.0" +version = "12.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload-time = "2025-07-01T09:16:30.666Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/cace85a1b0c9775a9f8f5d5423c8261c858760e2466c79b2dd184638b056/pillow-12.0.0.tar.gz", hash = "sha256:87d4f8125c9988bfbed67af47dd7a953e2fc7b0cc1e7800ec6d2080d490bb353", size = 47008828, upload-time = "2025-10-15T18:24:14.008Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/26/77f8ed17ca4ffd60e1dcd220a6ec6d71210ba398cfa33a13a1cd614c5613/pillow-11.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1cd110edf822773368b396281a2293aeb91c90a2db00d78ea43e7e861631b722", size = 5316531, upload-time = "2025-07-01T09:13:59.203Z" }, - { url = "https://files.pythonhosted.org/packages/cb/39/ee475903197ce709322a17a866892efb560f57900d9af2e55f86db51b0a5/pillow-11.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c412fddd1b77a75aa904615ebaa6001f169b26fd467b4be93aded278266b288", size = 4686560, upload-time = "2025-07-01T09:14:01.101Z" }, - { url = "https://files.pythonhosted.org/packages/d5/90/442068a160fd179938ba55ec8c97050a612426fae5ec0a764e345839f76d/pillow-11.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1aa4de119a0ecac0a34a9c8bde33f34022e2e8f99104e47a3ca392fd60e37d", size = 5870978, upload-time = "2025-07-03T13:09:55.638Z" }, - { url = "https://files.pythonhosted.org/packages/13/92/dcdd147ab02daf405387f0218dcf792dc6dd5b14d2573d40b4caeef01059/pillow-11.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:91da1d88226663594e3f6b4b8c3c8d85bd504117d043740a8e0ec449087cc494", size = 7641168, upload-time = "2025-07-03T13:10:00.37Z" }, - { url = "https://files.pythonhosted.org/packages/6e/db/839d6ba7fd38b51af641aa904e2960e7a5644d60ec754c046b7d2aee00e5/pillow-11.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:643f189248837533073c405ec2f0bb250ba54598cf80e8c1e043381a60632f58", size = 5973053, upload-time = "2025-07-01T09:14:04.491Z" }, - { url = "https://files.pythonhosted.org/packages/f2/2f/d7675ecae6c43e9f12aa8d58b6012683b20b6edfbdac7abcb4e6af7a3784/pillow-11.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:106064daa23a745510dabce1d84f29137a37224831d88eb4ce94bb187b1d7e5f", size = 6640273, upload-time = "2025-07-01T09:14:06.235Z" }, - { url = "https://files.pythonhosted.org/packages/45/ad/931694675ede172e15b2ff03c8144a0ddaea1d87adb72bb07655eaffb654/pillow-11.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd8ff254faf15591e724dc7c4ddb6bf4793efcbe13802a4ae3e863cd300b493e", size = 6082043, upload-time = "2025-07-01T09:14:07.978Z" }, - { url = "https://files.pythonhosted.org/packages/3a/04/ba8f2b11fc80d2dd462d7abec16351b45ec99cbbaea4387648a44190351a/pillow-11.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:932c754c2d51ad2b2271fd01c3d121daaa35e27efae2a616f77bf164bc0b3e94", size = 6715516, upload-time = "2025-07-01T09:14:10.233Z" }, - { url = "https://files.pythonhosted.org/packages/48/59/8cd06d7f3944cc7d892e8533c56b0acb68399f640786313275faec1e3b6f/pillow-11.3.0-cp311-cp311-win32.whl", hash = "sha256:b4b8f3efc8d530a1544e5962bd6b403d5f7fe8b9e08227c6b255f98ad82b4ba0", size = 6274768, upload-time = "2025-07-01T09:14:11.921Z" }, - { url = "https://files.pythonhosted.org/packages/f1/cc/29c0f5d64ab8eae20f3232da8f8571660aa0ab4b8f1331da5c2f5f9a938e/pillow-11.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:1a992e86b0dd7aeb1f053cd506508c0999d710a8f07b4c791c63843fc6a807ac", size = 6986055, upload-time = "2025-07-01T09:14:13.623Z" }, - { url = "https://files.pythonhosted.org/packages/c6/df/90bd886fabd544c25addd63e5ca6932c86f2b701d5da6c7839387a076b4a/pillow-11.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:30807c931ff7c095620fe04448e2c2fc673fcbb1ffe2a7da3fb39613489b1ddd", size = 2423079, upload-time = "2025-07-01T09:14:15.268Z" }, - { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800, upload-time = "2025-07-01T09:14:17.648Z" }, - { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296, upload-time = "2025-07-01T09:14:19.828Z" }, - { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726, upload-time = "2025-07-03T13:10:04.448Z" }, - { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652, upload-time = "2025-07-03T13:10:10.391Z" }, - { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787, upload-time = "2025-07-01T09:14:21.63Z" }, - { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236, upload-time = "2025-07-01T09:14:23.321Z" }, - { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950, upload-time = "2025-07-01T09:14:25.237Z" }, - { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358, upload-time = "2025-07-01T09:14:27.053Z" }, - { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload-time = "2025-07-01T09:14:30.104Z" }, - { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload-time = "2025-07-01T09:14:31.899Z" }, - { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload-time = "2025-07-01T09:14:33.709Z" }, - { url = "https://files.pythonhosted.org/packages/9e/e3/6fa84033758276fb31da12e5fb66ad747ae83b93c67af17f8c6ff4cc8f34/pillow-11.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7c8ec7a017ad1bd562f93dbd8505763e688d388cde6e4a010ae1486916e713e6", size = 5270566, upload-time = "2025-07-01T09:16:19.801Z" }, - { url = "https://files.pythonhosted.org/packages/5b/ee/e8d2e1ab4892970b561e1ba96cbd59c0d28cf66737fc44abb2aec3795a4e/pillow-11.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9ab6ae226de48019caa8074894544af5b53a117ccb9d3b3dcb2871464c829438", size = 4654618, upload-time = "2025-07-01T09:16:21.818Z" }, - { url = "https://files.pythonhosted.org/packages/f2/6d/17f80f4e1f0761f02160fc433abd4109fa1548dcfdca46cfdadaf9efa565/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe27fb049cdcca11f11a7bfda64043c37b30e6b91f10cb5bab275806c32f6ab3", size = 4874248, upload-time = "2025-07-03T13:11:20.738Z" }, - { url = "https://files.pythonhosted.org/packages/de/5f/c22340acd61cef960130585bbe2120e2fd8434c214802f07e8c03596b17e/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:465b9e8844e3c3519a983d58b80be3f668e2a7a5db97f2784e7079fbc9f9822c", size = 6583963, upload-time = "2025-07-03T13:11:26.283Z" }, - { url = "https://files.pythonhosted.org/packages/31/5e/03966aedfbfcbb4d5f8aa042452d3361f325b963ebbadddac05b122e47dd/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5418b53c0d59b3824d05e029669efa023bbef0f3e92e75ec8428f3799487f361", size = 4957170, upload-time = "2025-07-01T09:16:23.762Z" }, - { url = "https://files.pythonhosted.org/packages/cc/2d/e082982aacc927fc2cab48e1e731bdb1643a1406acace8bed0900a61464e/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:504b6f59505f08ae014f724b6207ff6222662aab5cc9542577fb084ed0676ac7", size = 5581505, upload-time = "2025-07-01T09:16:25.593Z" }, - { url = "https://files.pythonhosted.org/packages/34/e7/ae39f538fd6844e982063c3a5e4598b8ced43b9633baa3a85ef33af8c05c/pillow-11.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c84d689db21a1c397d001aa08241044aa2069e7587b398c8cc63020390b1c1b8", size = 6984598, upload-time = "2025-07-01T09:16:27.732Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/a2f6773b64edb921a756eb0729068acad9fc5208a53f4a349396e9436721/pillow-12.0.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0fd00cac9c03256c8b2ff58f162ebcd2587ad3e1f2e397eab718c47e24d231cc", size = 5289798, upload-time = "2025-10-15T18:21:47.763Z" }, + { url = "https://files.pythonhosted.org/packages/2e/05/069b1f8a2e4b5a37493da6c5868531c3f77b85e716ad7a590ef87d58730d/pillow-12.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3475b96f5908b3b16c47533daaa87380c491357d197564e0ba34ae75c0f3257", size = 4650589, upload-time = "2025-10-15T18:21:49.515Z" }, + { url = "https://files.pythonhosted.org/packages/61/e3/2c820d6e9a36432503ead175ae294f96861b07600a7156154a086ba7111a/pillow-12.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:110486b79f2d112cf6add83b28b627e369219388f64ef2f960fef9ebaf54c642", size = 6230472, upload-time = "2025-10-15T18:21:51.052Z" }, + { url = "https://files.pythonhosted.org/packages/4f/89/63427f51c64209c5e23d4d52071c8d0f21024d3a8a487737caaf614a5795/pillow-12.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5269cc1caeedb67e6f7269a42014f381f45e2e7cd42d834ede3c703a1d915fe3", size = 8033887, upload-time = "2025-10-15T18:21:52.604Z" }, + { url = "https://files.pythonhosted.org/packages/f6/1b/c9711318d4901093c15840f268ad649459cd81984c9ec9887756cca049a5/pillow-12.0.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa5129de4e174daccbc59d0a3b6d20eaf24417d59851c07ebb37aeb02947987c", size = 6343964, upload-time = "2025-10-15T18:21:54.619Z" }, + { url = "https://files.pythonhosted.org/packages/41/1e/db9470f2d030b4995083044cd8738cdd1bf773106819f6d8ba12597d5352/pillow-12.0.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bee2a6db3a7242ea309aa7ee8e2780726fed67ff4e5b40169f2c940e7eb09227", size = 7034756, upload-time = "2025-10-15T18:21:56.151Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b0/6177a8bdd5ee4ed87cba2de5a3cc1db55ffbbec6176784ce5bb75aa96798/pillow-12.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:90387104ee8400a7b4598253b4c406f8958f59fcf983a6cea2b50d59f7d63d0b", size = 6458075, upload-time = "2025-10-15T18:21:57.759Z" }, + { url = "https://files.pythonhosted.org/packages/bc/5e/61537aa6fa977922c6a03253a0e727e6e4a72381a80d63ad8eec350684f2/pillow-12.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bc91a56697869546d1b8f0a3ff35224557ae7f881050e99f615e0119bf934b4e", size = 7125955, upload-time = "2025-10-15T18:21:59.372Z" }, + { url = "https://files.pythonhosted.org/packages/1f/3d/d5033539344ee3cbd9a4d69e12e63ca3a44a739eb2d4c8da350a3d38edd7/pillow-12.0.0-cp311-cp311-win32.whl", hash = "sha256:27f95b12453d165099c84f8a8bfdfd46b9e4bda9e0e4b65f0635430027f55739", size = 6298440, upload-time = "2025-10-15T18:22:00.982Z" }, + { url = "https://files.pythonhosted.org/packages/4d/42/aaca386de5cc8bd8a0254516957c1f265e3521c91515b16e286c662854c4/pillow-12.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:b583dc9070312190192631373c6c8ed277254aa6e6084b74bdd0a6d3b221608e", size = 6999256, upload-time = "2025-10-15T18:22:02.617Z" }, + { url = "https://files.pythonhosted.org/packages/ba/f1/9197c9c2d5708b785f631a6dfbfa8eb3fb9672837cb92ae9af812c13b4ed/pillow-12.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:759de84a33be3b178a64c8ba28ad5c135900359e85fb662bc6e403ad4407791d", size = 2436025, upload-time = "2025-10-15T18:22:04.598Z" }, + { url = "https://files.pythonhosted.org/packages/2c/90/4fcce2c22caf044e660a198d740e7fbc14395619e3cb1abad12192c0826c/pillow-12.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:53561a4ddc36facb432fae7a9d8afbfaf94795414f5cdc5fc52f28c1dca90371", size = 5249377, upload-time = "2025-10-15T18:22:05.993Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e0/ed960067543d080691d47d6938ebccbf3976a931c9567ab2fbfab983a5dd/pillow-12.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:71db6b4c1653045dacc1585c1b0d184004f0d7e694c7b34ac165ca70c0838082", size = 4650343, upload-time = "2025-10-15T18:22:07.718Z" }, + { url = "https://files.pythonhosted.org/packages/e7/a1/f81fdeddcb99c044bf7d6faa47e12850f13cee0849537a7d27eeab5534d4/pillow-12.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2fa5f0b6716fc88f11380b88b31fe591a06c6315e955c096c35715788b339e3f", size = 6232981, upload-time = "2025-10-15T18:22:09.287Z" }, + { url = "https://files.pythonhosted.org/packages/88/e1/9098d3ce341a8750b55b0e00c03f1630d6178f38ac191c81c97a3b047b44/pillow-12.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:82240051c6ca513c616f7f9da06e871f61bfd7805f566275841af15015b8f98d", size = 8041399, upload-time = "2025-10-15T18:22:10.872Z" }, + { url = "https://files.pythonhosted.org/packages/a7/62/a22e8d3b602ae8cc01446d0c57a54e982737f44b6f2e1e019a925143771d/pillow-12.0.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55f818bd74fe2f11d4d7cbc65880a843c4075e0ac7226bc1a23261dbea531953", size = 6347740, upload-time = "2025-10-15T18:22:12.769Z" }, + { url = "https://files.pythonhosted.org/packages/4f/87/424511bdcd02c8d7acf9f65caa09f291a519b16bd83c3fb3374b3d4ae951/pillow-12.0.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b87843e225e74576437fd5b6a4c2205d422754f84a06942cfaf1dc32243e45a8", size = 7040201, upload-time = "2025-10-15T18:22:14.813Z" }, + { url = "https://files.pythonhosted.org/packages/dc/4d/435c8ac688c54d11755aedfdd9f29c9eeddf68d150fe42d1d3dbd2365149/pillow-12.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c607c90ba67533e1b2355b821fef6764d1dd2cbe26b8c1005ae84f7aea25ff79", size = 6462334, upload-time = "2025-10-15T18:22:16.375Z" }, + { url = "https://files.pythonhosted.org/packages/2b/f2/ad34167a8059a59b8ad10bc5c72d4d9b35acc6b7c0877af8ac885b5f2044/pillow-12.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:21f241bdd5080a15bc86d3466a9f6074a9c2c2b314100dd896ac81ee6db2f1ba", size = 7134162, upload-time = "2025-10-15T18:22:17.996Z" }, + { url = "https://files.pythonhosted.org/packages/0c/b1/a7391df6adacf0a5c2cf6ac1cf1fcc1369e7d439d28f637a847f8803beb3/pillow-12.0.0-cp312-cp312-win32.whl", hash = "sha256:dd333073e0cacdc3089525c7df7d39b211bcdf31fc2824e49d01c6b6187b07d0", size = 6298769, upload-time = "2025-10-15T18:22:19.923Z" }, + { url = "https://files.pythonhosted.org/packages/a2/0b/d87733741526541c909bbf159e338dcace4f982daac6e5a8d6be225ca32d/pillow-12.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:9fe611163f6303d1619bbcb653540a4d60f9e55e622d60a3108be0d5b441017a", size = 7001107, upload-time = "2025-10-15T18:22:21.644Z" }, + { url = "https://files.pythonhosted.org/packages/bc/96/aaa61ce33cc98421fb6088af2a03be4157b1e7e0e87087c888e2370a7f45/pillow-12.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:7dfb439562f234f7d57b1ac6bc8fe7f838a4bd49c79230e0f6a1da93e82f1fad", size = 2436012, upload-time = "2025-10-15T18:22:23.621Z" }, + { url = "https://files.pythonhosted.org/packages/1d/b3/582327e6c9f86d037b63beebe981425d6811104cb443e8193824ef1a2f27/pillow-12.0.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b22bd8c974942477156be55a768f7aa37c46904c175be4e158b6a86e3a6b7ca8", size = 5215068, upload-time = "2025-10-15T18:23:59.594Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d6/67748211d119f3b6540baf90f92fae73ae51d5217b171b0e8b5f7e5d558f/pillow-12.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:805ebf596939e48dbb2e4922a1d3852cfc25c38160751ce02da93058b48d252a", size = 4614994, upload-time = "2025-10-15T18:24:01.669Z" }, + { url = "https://files.pythonhosted.org/packages/2d/e1/f8281e5d844c41872b273b9f2c34a4bf64ca08905668c8ae730eedc7c9fa/pillow-12.0.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cae81479f77420d217def5f54b5b9d279804d17e982e0f2fa19b1d1e14ab5197", size = 5246639, upload-time = "2025-10-15T18:24:03.403Z" }, + { url = "https://files.pythonhosted.org/packages/94/5a/0d8ab8ffe8a102ff5df60d0de5af309015163bf710c7bb3e8311dd3b3ad0/pillow-12.0.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aeaefa96c768fc66818730b952a862235d68825c178f1b3ffd4efd7ad2edcb7c", size = 6986839, upload-time = "2025-10-15T18:24:05.344Z" }, + { url = "https://files.pythonhosted.org/packages/20/2e/3434380e8110b76cd9eb00a363c484b050f949b4bbe84ba770bb8508a02c/pillow-12.0.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09f2d0abef9e4e2f349305a4f8cc784a8a6c2f58a8c4892eea13b10a943bd26e", size = 5313505, upload-time = "2025-10-15T18:24:07.137Z" }, + { url = "https://files.pythonhosted.org/packages/57/ca/5a9d38900d9d74785141d6580950fe705de68af735ff6e727cb911b64740/pillow-12.0.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bdee52571a343d721fb2eb3b090a82d959ff37fc631e3f70422e0c2e029f3e76", size = 5963654, upload-time = "2025-10-15T18:24:09.579Z" }, + { url = "https://files.pythonhosted.org/packages/95/7e/f896623c3c635a90537ac093c6a618ebe1a90d87206e42309cb5d98a1b9e/pillow-12.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:b290fd8aa38422444d4b50d579de197557f182ef1068b75f5aa8558638b8d0a5", size = 6997850, upload-time = "2025-10-15T18:24:11.495Z" }, ] [[package]] @@ -4446,7 +4453,7 @@ wheels = [ [[package]] name = "posthog" -version = "6.7.6" +version = "7.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "backoff" }, @@ -4456,9 +4463,9 @@ dependencies = [ { name = "six" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e2/ce/11d6fa30ab517018796e1d675498992da585479e7079770ec8fa99a61561/posthog-6.7.6.tar.gz", hash = "sha256:ee5c5ad04b857d96d9b7a4f715e23916a2f206bfcf25e5a9d328a3d27664b0d3", size = 119129, upload-time = "2025-09-22T18:11:12.365Z" } +sdist = { url = "https://files.pythonhosted.org/packages/15/4d/16d777528149cd0e06306973081b5b070506abcd0fe831c6cb6966260d59/posthog-7.0.0.tar.gz", hash = "sha256:94973227f5fe5e7d656d305ff48c8bff3d505fd1e78b6fcd7ccc9dfe8d3401c2", size = 126504, upload-time = "2025-11-11T18:13:06.986Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/de/84/586422d8861b5391c8414360b10f603c0b7859bb09ad688e64430ed0df7b/posthog-6.7.6-py3-none-any.whl", hash = "sha256:b09a7e65a042ec416c28874b397d3accae412a80a8b0ef3fa686fbffc99e4d4b", size = 137348, upload-time = "2025-09-22T18:11:10.807Z" }, + { url = "https://files.pythonhosted.org/packages/ca/9a/dc29b9ff4e5233a3c071b6b4c85dba96f4fcb9169c460bc81abd98555fb3/posthog-7.0.0-py3-none-any.whl", hash = "sha256:676d8a5197a17bf7bd00e31020a5f232988f249f57aab532f0d01c6243835934", size = 144727, upload-time = "2025-11-11T18:13:05.444Z" }, ] [[package]] @@ -4540,18 +4547,16 @@ wheels = [ [[package]] name = "psutil" -version = "7.1.0" +version = "7.1.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b3/31/4723d756b59344b643542936e37a31d1d3204bcdc42a7daa8ee9eb06fb50/psutil-7.1.0.tar.gz", hash = "sha256:655708b3c069387c8b77b072fc429a57d0e214221d01c0a772df7dfedcb3bcd2", size = 497660, upload-time = "2025-09-17T20:14:52.902Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/88/bdd0a41e5857d5d703287598cbf08dad90aed56774ea52ae071bae9071b6/psutil-7.1.3.tar.gz", hash = "sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74", size = 489059, upload-time = "2025-11-02T12:25:54.619Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/46/62/ce4051019ee20ce0ed74432dd73a5bb087a6704284a470bb8adff69a0932/psutil-7.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:76168cef4397494250e9f4e73eb3752b146de1dd950040b29186d0cce1d5ca13", size = 245242, upload-time = "2025-09-17T20:14:56.126Z" }, - { url = "https://files.pythonhosted.org/packages/38/61/f76959fba841bf5b61123fbf4b650886dc4094c6858008b5bf73d9057216/psutil-7.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:5d007560c8c372efdff9e4579c2846d71de737e4605f611437255e81efcca2c5", size = 246682, upload-time = "2025-09-17T20:14:58.25Z" }, - { url = "https://files.pythonhosted.org/packages/88/7a/37c99d2e77ec30d63398ffa6a660450b8a62517cabe44b3e9bae97696e8d/psutil-7.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22e4454970b32472ce7deaa45d045b34d3648ce478e26a04c7e858a0a6e75ff3", size = 287994, upload-time = "2025-09-17T20:14:59.901Z" }, - { url = "https://files.pythonhosted.org/packages/9d/de/04c8c61232f7244aa0a4b9a9fbd63a89d5aeaf94b2fc9d1d16e2faa5cbb0/psutil-7.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c70e113920d51e89f212dd7be06219a9b88014e63a4cec69b684c327bc474e3", size = 291163, upload-time = "2025-09-17T20:15:01.481Z" }, - { url = "https://files.pythonhosted.org/packages/f4/58/c4f976234bf6d4737bc8c02a81192f045c307b72cf39c9e5c5a2d78927f6/psutil-7.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d4a113425c037300de3ac8b331637293da9be9713855c4fc9d2d97436d7259d", size = 293625, upload-time = "2025-09-17T20:15:04.492Z" }, - { url = "https://files.pythonhosted.org/packages/79/87/157c8e7959ec39ced1b11cc93c730c4fb7f9d408569a6c59dbd92ceb35db/psutil-7.1.0-cp37-abi3-win32.whl", hash = "sha256:09ad740870c8d219ed8daae0ad3b726d3bf9a028a198e7f3080f6a1888b99bca", size = 244812, upload-time = "2025-09-17T20:15:07.462Z" }, - { url = "https://files.pythonhosted.org/packages/bf/e9/b44c4f697276a7a95b8e94d0e320a7bf7f3318521b23de69035540b39838/psutil-7.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:57f5e987c36d3146c0dd2528cd42151cf96cd359b9d67cfff836995cc5df9a3d", size = 247965, upload-time = "2025-09-17T20:15:09.673Z" }, - { url = "https://files.pythonhosted.org/packages/26/65/1070a6e3c036f39142c2820c4b52e9243246fcfc3f96239ac84472ba361e/psutil-7.1.0-cp37-abi3-win_arm64.whl", hash = "sha256:6937cb68133e7c97b6cc9649a570c9a18ba0efebed46d8c5dae4c07fa1b67a07", size = 244971, upload-time = "2025-09-17T20:15:12.262Z" }, + { url = "https://files.pythonhosted.org/packages/ef/94/46b9154a800253e7ecff5aaacdf8ebf43db99de4a2dfa18575b02548654e/psutil-7.1.3-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab", size = 238359, upload-time = "2025-11-02T12:26:25.284Z" }, + { url = "https://files.pythonhosted.org/packages/68/3a/9f93cff5c025029a36d9a92fef47220ab4692ee7f2be0fba9f92813d0cb8/psutil-7.1.3-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880", size = 239171, upload-time = "2025-11-02T12:26:27.23Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b1/5f49af514f76431ba4eea935b8ad3725cdeb397e9245ab919dbc1d1dc20f/psutil-7.1.3-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3", size = 263261, upload-time = "2025-11-02T12:26:29.48Z" }, + { url = "https://files.pythonhosted.org/packages/e0/95/992c8816a74016eb095e73585d747e0a8ea21a061ed3689474fabb29a395/psutil-7.1.3-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b", size = 264635, upload-time = "2025-11-02T12:26:31.74Z" }, + { url = "https://files.pythonhosted.org/packages/55/4c/c3ed1a622b6ae2fd3c945a366e64eb35247a31e4db16cf5095e269e8eb3c/psutil-7.1.3-cp37-abi3-win_amd64.whl", hash = "sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd", size = 247633, upload-time = "2025-11-02T12:26:33.887Z" }, + { url = "https://files.pythonhosted.org/packages/c9/ad/33b2ccec09bf96c2b2ef3f9a6f66baac8253d7565d8839e024a6b905d45d/psutil-7.1.3-cp37-abi3-win_arm64.whl", hash = "sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1", size = 244608, upload-time = "2025-11-02T12:26:36.136Z" }, ] [[package]] @@ -4796,7 +4801,7 @@ crypto = [ [[package]] name = "pymilvus" -version = "2.5.16" +version = "2.5.17" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "grpcio" }, @@ -4807,9 +4812,9 @@ dependencies = [ { name = "setuptools" }, { name = "ujson" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/24/e2/5613bc7b2af0ccd760177ca4255243c284cfc0f2cba3f10ff63325c4ca34/pymilvus-2.5.16.tar.gz", hash = "sha256:65f56b81806bc217cca3cf29b70a27d053dea4b1ffada910cf63a38f96381618", size = 1280614, upload-time = "2025-09-19T07:02:14.747Z" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/85/91828a9282bb7f9b210c0a93831979c5829cba5533ac12e87014b6e2208b/pymilvus-2.5.17.tar.gz", hash = "sha256:48ff55db9598e1b4cc25f4fe645b00d64ebcfb03f79f9f741267fc2a35526d43", size = 1281485, upload-time = "2025-11-10T03:24:53.058Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/09/b67a55abee0a53ea50ba0de0cba6e1c0f7ca7ce2c15ffd6f40c059c25e88/pymilvus-2.5.16-py3-none-any.whl", hash = "sha256:76258a324f19c60fee247467e11cd7d6f35a64d2a9c753f5d7b1a5fa15dd6c8a", size = 243272, upload-time = "2025-09-19T07:02:12.443Z" }, + { url = "https://files.pythonhosted.org/packages/59/44/ee0c64617f58c123f570293f36b40f7b56fc123a2aa9573aa22e6ff0fb86/pymilvus-2.5.17-py3-none-any.whl", hash = "sha256:a43d36f2e5f793040917d35858d1ed2532307b7dfb03bc3eaf813aac085bc5a4", size = 244036, upload-time = "2025-11-10T03:24:51.496Z" }, ] [[package]] @@ -4837,7 +4842,7 @@ wheels = [ [[package]] name = "pyobvector" -version = "0.2.17" +version = "0.2.19" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiomysql" }, @@ -4847,18 +4852,17 @@ dependencies = [ { name = "sqlalchemy" }, { name = "sqlglot" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fa/a5/88bd908c6fb9c42544f4d114cbb65eeba4424077c2b0a4255b9052a622c9/pyobvector-0.2.17.tar.gz", hash = "sha256:9af080bbd9593aff86bb3d65db2869c548fcbcededefa6efbe7ce66252815f8c", size = 42476, upload-time = "2025-11-03T06:45:02.204Z" } +sdist = { url = "https://files.pythonhosted.org/packages/19/9a/03da0d77f6033694ab7e7214abdd48c372102a185142db880ba00d6a6172/pyobvector-0.2.19.tar.gz", hash = "sha256:5e6847f08679cf6ded800b5b8ae89353173c33f5d90fd1392f55e5fafa4fb886", size = 46314, upload-time = "2025-11-10T08:30:10.186Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/89/293a0511300398ee526a82e9e3f935cc1cc700ed29a7d66688ce4f4af6f2/pyobvector-0.2.17-py3-none-any.whl", hash = "sha256:2fac85d7b02a34ef41806496b0db731b05979a7dceba41855e67c10a93a25bff", size = 57046, upload-time = "2025-11-03T06:45:00.754Z" }, + { url = "https://files.pythonhosted.org/packages/72/48/d6b60ae86a2a2c0c607a33e0c8fc9e469500e06e5bb07ea7e9417910f458/pyobvector-0.2.19-py3-none-any.whl", hash = "sha256:0a6b93c950722ecbab72571e0ab81d0f8f4d1f52df9c25c00693392477e45e4b", size = 59886, upload-time = "2025-11-10T08:30:08.627Z" }, ] [[package]] name = "pypandoc" -version = "1.15" +version = "1.16" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e1/88/26e650d053df5f3874aa3c05901a14166ce3271f58bfe114fd776987efbd/pypandoc-1.15.tar.gz", hash = "sha256:ea25beebe712ae41d63f7410c08741a3cab0e420f6703f95bc9b3a749192ce13", size = 32940, upload-time = "2025-01-08T17:39:58.705Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/61/06/0763e0ccc81754d3eadb21b2cb86cf21bdedc9b52698c2ad6785db7f0a4e/pypandoc-1.15-py3-none-any.whl", hash = "sha256:4ededcc76c8770f27aaca6dff47724578428eca84212a31479403a9731fc2b16", size = 21321, upload-time = "2025-01-08T17:39:09.928Z" }, + { url = "https://files.pythonhosted.org/packages/24/77/af1fc54740a0712988f9518e629d38edc7b8ffccd7549203f19c3d8a2db6/pypandoc-1.16-py3-none-any.whl", hash = "sha256:868f390d48388743e7a5885915cbbaa005dea36a825ecdfd571f8c523416c822", size = 19425, upload-time = "2025-11-08T15:44:38.429Z" }, ] [[package]] @@ -4872,11 +4876,11 @@ wheels = [ [[package]] name = "pypdf" -version = "6.1.3" +version = "6.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/13/3d/b6ead84ee437444f96862beb68f9796da8c199793bed08e9397b77579f23/pypdf-6.1.3.tar.gz", hash = "sha256:8d420d1e79dc1743f31a57707cabb6dcd5b17e8b9a302af64b30202c5700ab9d", size = 5076271, upload-time = "2025-10-22T16:13:46.061Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/2b/8795ec0378384000b0a37a2b5e6d67fa3d84802945aa2c612a78a784d7d4/pypdf-6.2.0.tar.gz", hash = "sha256:46b4d8495d68ae9c818e7964853cd9984e6a04c19fe7112760195395992dce48", size = 5272001, upload-time = "2025-11-09T11:10:41.911Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/ed/494fd0cc1190a7c335e6958eeaee6f373a281869830255c2ed4785dac135/pypdf-6.1.3-py3-none-any.whl", hash = "sha256:eb049195e46f014fc155f566fa20e09d70d4646a9891164ac25fa0cbcfcdbcb5", size = 323863, upload-time = "2025-10-22T16:13:44.174Z" }, + { url = "https://files.pythonhosted.org/packages/de/ba/743ddcaf1a8fb439342399645921e2cf2c600464cba5531a11f1cc0822b6/pypdf-6.2.0-py3-none-any.whl", hash = "sha256:4c0f3e62677217a777ab79abe22bf1285442d70efabf552f61c7a03b6f5c569f", size = 326592, upload-time = "2025-11-09T11:10:39.941Z" }, ] [[package]] @@ -5002,46 +5006,46 @@ wheels = [ [[package]] name = "python-calamine" -version = "0.5.3" +version = "0.5.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/ca/295b37a97275d53f072c7307c9d0c4bfec565d3d74157e7fe336ea18de0a/python_calamine-0.5.3.tar.gz", hash = "sha256:b4529c955fa64444184630d5bc8c82c472d1cf6bfe631f0a7bfc5e4802d4e996", size = 130874, upload-time = "2025-09-08T05:41:27.18Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/e4/bb2c84aee0909868e4cf251a4813d82ba9bcb97e772e28a6746fb7133e15/python_calamine-0.5.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:522dcad340efef3114d3bc4081e8f12d3a471455038df6b20f199e14b3f1a1df", size = 847891, upload-time = "2025-09-08T05:38:58.681Z" }, - { url = "https://files.pythonhosted.org/packages/00/aa/7dab22cc2d7aa869e9bce2426fd53cefea19010496116aa0b8a1a658768d/python_calamine-0.5.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2c667dc044eefc233db115e96f77772c89ec61f054ba94ef2faf71e92ce2b23", size = 820897, upload-time = "2025-09-08T05:39:00.123Z" }, - { url = "https://files.pythonhosted.org/packages/93/95/aa82413e119365fb7a0fd1345879d22982638affab96ff9bbf4f22f6e403/python_calamine-0.5.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f28cc65ad7da395e0a885c989a1872f9a1939d4c3c846a7bd189b70d7255640", size = 889556, upload-time = "2025-09-08T05:39:01.595Z" }, - { url = "https://files.pythonhosted.org/packages/ae/ab/63bb196a121f6ede57cbb8012e0b642162da088e9e9419531215ab528823/python_calamine-0.5.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8642f3e9b0501e0a639913319107ce6a4fa350919d428c4b06129b1917fa12f8", size = 882632, upload-time = "2025-09-08T05:39:03.426Z" }, - { url = "https://files.pythonhosted.org/packages/6b/60/236db1deecf7a46454c3821b9315a230ad6247f6e823ef948a6b591001cd/python_calamine-0.5.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:88c6b7c9962bec16fcfb326c271077a2a9350b8a08e5cfda2896014d8cd04c84", size = 1032778, upload-time = "2025-09-08T05:39:04.939Z" }, - { url = "https://files.pythonhosted.org/packages/be/18/d143b8c3ee609354859442458e749a0f00086d11b1c003e6d0a61b1f6573/python_calamine-0.5.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:229dd29b0a61990a1c7763a9fadc40a56f8674e6dd5700cb6761cd8e8a731a88", size = 932695, upload-time = "2025-09-08T05:39:06.471Z" }, - { url = "https://files.pythonhosted.org/packages/ee/25/a50886897b6fbf74c550dcaefd9e25487c02514bbdd7ec405fd44c8b52d2/python_calamine-0.5.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ac37001bebcb0016770248acfdf3adba2ded352b69ee57924145cb5b6daa0e", size = 905138, upload-time = "2025-09-08T05:39:07.94Z" }, - { url = "https://files.pythonhosted.org/packages/72/37/7f30152f4d5053eb1390fede14c3d8cce6bd6d3383f056a7e14fdf2724b3/python_calamine-0.5.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1ee817d2d4de7cccf3d50a38a37442af83985cc4a96ca5d511852109c3b71d87", size = 944337, upload-time = "2025-09-08T05:39:09.493Z" }, - { url = "https://files.pythonhosted.org/packages/77/9f/4c44d49ad1177f7730f089bb2e6df555e41319241c90529adb5d5a2bec2e/python_calamine-0.5.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:592a6e15ca1e8cc644bf227f3afa2f6e8ba2eece7d51e6237a84b8269de47734", size = 1067713, upload-time = "2025-09-08T05:39:11.684Z" }, - { url = "https://files.pythonhosted.org/packages/33/b5/bf61a39af88f78562f3a2ca137f7db95d7495e034658f44ee7381014a9a4/python_calamine-0.5.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:51d7f63e4a74fc504398e970a06949f44306078e1cdf112543a60c3745f97f77", size = 1075283, upload-time = "2025-09-08T05:39:13.425Z" }, - { url = "https://files.pythonhosted.org/packages/a4/50/6b96c45c43a7bb78359de9b9ebf78c91148d9448ab3b021a81df4ffdddfe/python_calamine-0.5.3-cp311-cp311-win32.whl", hash = "sha256:54747fd59956cf10e170c85f063be21d1016e85551ba6dea20ac66f21bcb6d1d", size = 669120, upload-time = "2025-09-08T05:39:14.848Z" }, - { url = "https://files.pythonhosted.org/packages/11/3f/ff15f5651bb84199660a4f024b32f9bcb948c1e73d5d533ec58fab31c36d/python_calamine-0.5.3-cp311-cp311-win_amd64.whl", hash = "sha256:49f5f311e4040e251b65f2a2c3493e338f51b1ba30c632f41f8151f95071ed65", size = 713536, upload-time = "2025-09-08T05:39:16.317Z" }, - { url = "https://files.pythonhosted.org/packages/d9/1b/e33ea19a1881934d8dc1c6cbc3dffeef7288cbd2c313fb1249f07bf9c76d/python_calamine-0.5.3-cp311-cp311-win_arm64.whl", hash = "sha256:1201908dc0981e3684ab916bebc83399657a10118f4003310e465ab07dd67d09", size = 679691, upload-time = "2025-09-08T05:39:17.783Z" }, - { url = "https://files.pythonhosted.org/packages/05/24/f6e3369be221baa6a50476b8a02f5100980ae487a630d80d4983b4c73879/python_calamine-0.5.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b9a78e471bc02d3f76c294bf996562a9d0fbf2ad0a49d628330ba247865190f1", size = 844280, upload-time = "2025-09-08T05:39:19.991Z" }, - { url = "https://files.pythonhosted.org/packages/e7/32/f9b689fe40616376457d1a6fd5ab84834066db31fa5ffd10a5b02f996a44/python_calamine-0.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bcbd277a4d0a0108aa2f5126a89ca3f2bb18d0bec7ba7d614da02a4556d18ef2", size = 814054, upload-time = "2025-09-08T05:39:21.888Z" }, - { url = "https://files.pythonhosted.org/packages/f7/26/a07bb6993ae0a524251060397edc710af413dbb175d56f1e1bbc7a2c39c9/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04e6b68b26346f559a086bb84c960d4e9ddc79be8c3499752c1ba96051fea98f", size = 889447, upload-time = "2025-09-08T05:39:23.332Z" }, - { url = "https://files.pythonhosted.org/packages/d8/79/5902d00658e2dd4efe3a4062b710a7eaa6082001c199717468fbcd8cef69/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e60ebeafebf66889753bfad0055edaa38068663961bb9a18e9f89aef2c9cec50", size = 883540, upload-time = "2025-09-08T05:39:25.15Z" }, - { url = "https://files.pythonhosted.org/packages/d0/85/6299c909fcbba0663b527b82c87d204372e6f469b4ed5602f7bc1f7f1103/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d9da11edb40e9d2fb214fcf575be8004b44b1b407930eceb2458f1a84be634f", size = 1034891, upload-time = "2025-09-08T05:39:26.666Z" }, - { url = "https://files.pythonhosted.org/packages/65/2c/d0cfd9161b3404528bfba9fe000093be19f2c83ede42c255da4ebfd4da17/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:44d22bc52fe26b72a6dc07ab8a167d5d97aeb28282957f52b930e92106a35e3c", size = 935055, upload-time = "2025-09-08T05:39:28.727Z" }, - { url = "https://files.pythonhosted.org/packages/b8/69/420c382535d1aca9af6bc929c78ad6b9f8416312aa4955b7977f5f864082/python_calamine-0.5.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b9ace667e04ea6631a0ada0e43dbc796c56e0d021f04bd64cdacb44de4504da", size = 904143, upload-time = "2025-09-08T05:39:30.23Z" }, - { url = "https://files.pythonhosted.org/packages/d8/2b/19cc87654f9c85fbb6265a7ebe92cf0f649c308f0cf8f262b5c3de754d19/python_calamine-0.5.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7ec0da29de7366258de2eb765a90b9e9fbe9f9865772f3609dacff302b894393", size = 948890, upload-time = "2025-09-08T05:39:31.779Z" }, - { url = "https://files.pythonhosted.org/packages/18/e8/3547cb72d3a0f67c173ca07d9137046f2a6c87fdc31316b10e2d7d851f2a/python_calamine-0.5.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bba5adf123200503e6c07c667a8ce82c3b62ba02f9b3e99205be24fc73abc49", size = 1067802, upload-time = "2025-09-08T05:39:33.264Z" }, - { url = "https://files.pythonhosted.org/packages/cb/69/31ab3e8010cbed814b5fcdb2ace43e5b76d6464f8abb1dfab9191416ca3d/python_calamine-0.5.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4c49bc58f3cfd1e9595a05cab7e71aa94f6cff5bf3916de2b87cdaa9b4ce9a3", size = 1074607, upload-time = "2025-09-08T05:39:34.803Z" }, - { url = "https://files.pythonhosted.org/packages/c4/40/112d113d974bee5fff564e355b01df5bd524dbd5820c913c9dae574fe80a/python_calamine-0.5.3-cp312-cp312-win32.whl", hash = "sha256:42315463e139f5e44f4dedb9444fa0971c51e82573e872428050914f0dec4194", size = 669578, upload-time = "2025-09-08T05:39:36.305Z" }, - { url = "https://files.pythonhosted.org/packages/3e/87/0af1cf4ad01a2df273cfd3abb7efaba4fba50395b98f5e871cee016d4f09/python_calamine-0.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:8a24bd4c72bd984311f5ebf2e17a8aa3ce4e5ae87eda517c61c3507db8c045de", size = 713021, upload-time = "2025-09-08T05:39:37.942Z" }, - { url = "https://files.pythonhosted.org/packages/5d/4e/6ed2ed3bb4c4c479e85d3444742f101f7b3099db1819e422bf861cf9923b/python_calamine-0.5.3-cp312-cp312-win_arm64.whl", hash = "sha256:e4a713e56d3cca752d1a7d6a00dca81b224e2e1a0567d370bc0db537e042d6b0", size = 679615, upload-time = "2025-09-08T05:39:39.487Z" }, - { url = "https://files.pythonhosted.org/packages/df/d4/fbe043cf6310d831e9af07772be12ec977148e31ec404b37bcb20c471ab0/python_calamine-0.5.3-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a74fb8379a9caff19c5fe5ac637fcb86ca56698d1e06f5773d5612dea5254c2f", size = 849328, upload-time = "2025-09-08T05:41:10.129Z" }, - { url = "https://files.pythonhosted.org/packages/a4/b3/d1258e3e7f31684421d75f9bde83ccc14064fbfeaf1e26e4f4207f1cf704/python_calamine-0.5.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:37efba7ed0234ea73e8d7433c6feabedefdcc4edfdd54546ee28709b950809da", size = 822183, upload-time = "2025-09-08T05:41:11.936Z" }, - { url = "https://files.pythonhosted.org/packages/bb/45/cadba216db106c7de7cd5210efb6e6adbf1c3a5d843ed255e039f3f6d7c7/python_calamine-0.5.3-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3449b4766d19fa33087a4a9eddae097539661f9678ea4160d9c3888d6ba93e01", size = 891063, upload-time = "2025-09-08T05:41:13.644Z" }, - { url = "https://files.pythonhosted.org/packages/ff/a6/d710452f6f32fd2483aaaf3a12fdbb888f7f89d5fcad287eeed6daf0f6c6/python_calamine-0.5.3-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:683f398d800104930345282905088c095969ca26145f86f35681061dee6eb881", size = 884047, upload-time = "2025-09-08T05:41:15.339Z" }, - { url = "https://files.pythonhosted.org/packages/d6/bc/8fead09adbd8069022ae39b97879cb90acbc02d768488ac8d76423a85783/python_calamine-0.5.3-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b6bfdd64204ad6b9f3132951246b7eb9986a55dc10a805240c7751a1f3bc7d9", size = 1031566, upload-time = "2025-09-08T05:41:17.143Z" }, - { url = "https://files.pythonhosted.org/packages/d0/cd/7259e9a181f31d861cb8e0d98f8e0f17fad2bead885b48a17e8049fcecb5/python_calamine-0.5.3-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81c3654edac2eaf84066a90ea31b544fdeed8847a1ad8a8323118448522b84c9", size = 933438, upload-time = "2025-09-08T05:41:18.822Z" }, - { url = "https://files.pythonhosted.org/packages/39/39/bd737005731591066d6a7d1c4ce1e8d72befe32e028ba11df410937b2aec/python_calamine-0.5.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8ff1a449545d9a4b5a72c4e204d16b26477b82484e9b2010935fa63ad66c607", size = 905036, upload-time = "2025-09-08T05:41:20.555Z" }, - { url = "https://files.pythonhosted.org/packages/b5/20/94a4af86b11ee318770e72081c89545e99b78cdbbe05227e083d92c55c52/python_calamine-0.5.3-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:340046e7c937d02bb314e09fda8c0dc2e11ef2692e60fb5956fbd091b6d82725", size = 946582, upload-time = "2025-09-08T05:41:22.307Z" }, - { url = "https://files.pythonhosted.org/packages/4f/3b/2448580b510a28718802c51f80fbc4d3df668a6824817e7024853b715813/python_calamine-0.5.3-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:421947eef983e0caa245f37ac81234e7e62663bdf423bbee5013a469a3bf632c", size = 1068960, upload-time = "2025-09-08T05:41:23.989Z" }, - { url = "https://files.pythonhosted.org/packages/23/a4/5b13bfaa355d6e20aae87c1230aa5e40403c14386bd9806491ac3a89b840/python_calamine-0.5.3-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e970101cc4c0e439b14a5f697a43eb508343fd0dc604c5bb5145e5774c4eb0c8", size = 1075022, upload-time = "2025-09-08T05:41:25.697Z" }, + { url = "https://files.pythonhosted.org/packages/25/1a/ff59788a7e8bfeded91a501abdd068dc7e2f5865ee1a55432133b0f7f08c/python_calamine-0.5.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:944bcc072aca29d346456b4e42675c4831c52c25641db3e976c6013cdd07d4cd", size = 854308, upload-time = "2025-10-21T07:10:55.17Z" }, + { url = "https://files.pythonhosted.org/packages/24/7d/33fc441a70b771093d10fa5086831be289766535cbcb2b443ff1d5e549d8/python_calamine-0.5.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e637382e50cabc263a37eda7a3cd33f054271e4391a304f68cecb2e490827533", size = 830841, upload-time = "2025-10-21T07:10:57.353Z" }, + { url = "https://files.pythonhosted.org/packages/0f/38/b5b25e6ce0a983c9751fb026bd8c5d77eb81a775948cc3d9ce2b18b2fc91/python_calamine-0.5.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b2a31d1e711c5661b4f04efd89975d311788bd9a43a111beff74d7c4c8f8d7a", size = 898287, upload-time = "2025-10-21T07:10:58.977Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e9/ab288cd489999f962f791d6c8544803c29dcf24e9b6dde24634c41ec09dd/python_calamine-0.5.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2078ede35cbd26cf7186673405ff13321caacd9e45a5e57b54ce7b3ef0eec2ff", size = 886960, upload-time = "2025-10-21T07:11:00.462Z" }, + { url = "https://files.pythonhosted.org/packages/f0/4d/2a261f2ccde7128a683cdb20733f9bc030ab37a90803d8de836bf6113e5b/python_calamine-0.5.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:faab9f59bb9cedba2b35c6e1f5dc72461d8f2837e8f6ab24fafff0d054ddc4b5", size = 1044123, upload-time = "2025-10-21T07:11:02.153Z" }, + { url = "https://files.pythonhosted.org/packages/20/dc/a84c5a5a2c38816570bcc96ae4c9c89d35054e59c4199d3caef9c60b65cf/python_calamine-0.5.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:300d8d5e6c63bdecf79268d3b6d2a84078cda39cb3394ed09c5c00a61ce9ff32", size = 941997, upload-time = "2025-10-21T07:11:03.537Z" }, + { url = "https://files.pythonhosted.org/packages/dd/92/b970d8316c54f274d9060e7c804b79dbfa250edeb6390cd94f5fcfeb5f87/python_calamine-0.5.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0019a74f1c0b1cbf08fee9ece114d310522837cdf63660a46fe46d3688f215ea", size = 905881, upload-time = "2025-10-21T07:11:05.228Z" }, + { url = "https://files.pythonhosted.org/packages/ac/88/9186ac8d3241fc6f90995cc7539bdbd75b770d2dab20978a702c36fbce5f/python_calamine-0.5.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:30b40ffb374f7fb9ce20ca87f43a609288f568e41872f8a72e5af313a9e20af0", size = 947224, upload-time = "2025-10-21T07:11:06.618Z" }, + { url = "https://files.pythonhosted.org/packages/ee/ec/6ac1882dc6b6fa829e2d1d94ffa58bd0c67df3dba074b2e2f3134d7f573a/python_calamine-0.5.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:206242690a5a5dff73a193fb1a1ca3c7a8aed95e2f9f10c875dece5a22068801", size = 1078351, upload-time = "2025-10-21T07:11:08.368Z" }, + { url = "https://files.pythonhosted.org/packages/3e/f1/07aff6966b04b7452c41a802b37199d9e9ac656d66d6092b83ab0937e212/python_calamine-0.5.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:88628e1a17a6f352d6433b0abf6edc4cb2295b8fbb3451392390f3a6a7a8cada", size = 1150148, upload-time = "2025-10-21T07:11:10.18Z" }, + { url = "https://files.pythonhosted.org/packages/4e/be/90aedeb0b77ea592a698a20db09014a5217ce46a55b699121849e239c8e7/python_calamine-0.5.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:22524cfb7720d15894a02392bbd49f8e7a8c173493f0628a45814d78e4243fff", size = 1080101, upload-time = "2025-10-21T07:11:11.489Z" }, + { url = "https://files.pythonhosted.org/packages/30/89/1fadd511d132d5ea9326c003c8753b6d234d61d9a72775fb1632cc94beb9/python_calamine-0.5.4-cp311-cp311-win32.whl", hash = "sha256:d159e98ef3475965555b67354f687257648f5c3686ed08e7faa34d54cc9274e1", size = 679593, upload-time = "2025-10-21T07:11:12.758Z" }, + { url = "https://files.pythonhosted.org/packages/e9/ba/d7324400a02491549ef30e0e480561a3a841aa073ac7c096313bc2cea555/python_calamine-0.5.4-cp311-cp311-win_amd64.whl", hash = "sha256:0d019b082f9a114cf1e130dc52b77f9f881325ab13dc31485d7b4563ad9e0812", size = 721570, upload-time = "2025-10-21T07:11:14.336Z" }, + { url = "https://files.pythonhosted.org/packages/4f/15/8c7895e603b4ae63ff279aae4aa6120658a15f805750ccdb5d8b311df616/python_calamine-0.5.4-cp311-cp311-win_arm64.whl", hash = "sha256:bb20875776e5b4c85134c2bf49fea12288e64448ed49f1d89a3a83f5bb16bd59", size = 685789, upload-time = "2025-10-21T07:11:15.646Z" }, + { url = "https://files.pythonhosted.org/packages/ff/60/b1ace7a0fd636581b3bb27f1011cb7b2fe4d507b58401c4d328cfcb5c849/python_calamine-0.5.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:4d711f91283d28f19feb111ed666764de69e6d2a0201df8f84e81a238f68d193", size = 850087, upload-time = "2025-10-21T07:11:17.002Z" }, + { url = "https://files.pythonhosted.org/packages/7f/32/32ca71ce50f9b7c7d6e7ec5fcc579a97ddd8b8ce314fe143ba2a19441dc7/python_calamine-0.5.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ed67afd3adedb5bcfb428cf1f2d7dfd936dea9fe979ab631194495ab092973ba", size = 825659, upload-time = "2025-10-21T07:11:18.248Z" }, + { url = "https://files.pythonhosted.org/packages/63/c5/27ba71a9da2a09be9ff2f0dac522769956c8c89d6516565b21c9c78bfae6/python_calamine-0.5.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13662895dac487315ccce25ea272a1ea7e7ac05d899cde4e33d59d6c43274c54", size = 897332, upload-time = "2025-10-21T07:11:19.89Z" }, + { url = "https://files.pythonhosted.org/packages/5a/e7/c4be6ff8e8899ace98cacc9604a2dd1abc4901839b733addfb6ef32c22ba/python_calamine-0.5.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:23e354755583cfaa824ddcbe8b099c5c7ac19bf5179320426e7a88eea2f14bc5", size = 886885, upload-time = "2025-10-21T07:11:21.912Z" }, + { url = "https://files.pythonhosted.org/packages/38/24/80258fb041435021efa10d0b528df6842e442585e48cbf130e73fed2529b/python_calamine-0.5.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e1bc3f22107dcbdeb32d4d3c5c1e8831d3c85d4b004a8606dd779721b29843d", size = 1043907, upload-time = "2025-10-21T07:11:23.3Z" }, + { url = "https://files.pythonhosted.org/packages/f2/20/157340787d03ef6113a967fd8f84218e867ba4c2f7fc58cc645d8665a61a/python_calamine-0.5.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:182b314117e47dbd952adaa2b19c515555083a48d6f9146f46faaabd9dab2f81", size = 942376, upload-time = "2025-10-21T07:11:24.866Z" }, + { url = "https://files.pythonhosted.org/packages/98/f5/aec030f567ee14c60b6fc9028a78767687f484071cb080f7cfa328d6496e/python_calamine-0.5.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8f882e092ab23f72ea07e2e48f5f2efb1885c1836fb949f22fd4540ae11742e", size = 906455, upload-time = "2025-10-21T07:11:26.203Z" }, + { url = "https://files.pythonhosted.org/packages/29/58/4affc0d1389f837439ad45f400f3792e48030b75868ec757e88cb35d7626/python_calamine-0.5.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:62a9b4b7b9bd99d03373e58884dfb60d5a1c292c8e04e11f8b7420b77a46813e", size = 948132, upload-time = "2025-10-21T07:11:27.507Z" }, + { url = "https://files.pythonhosted.org/packages/b4/2e/70ed04f39e682a9116730f56b7fbb54453244ccc1c3dae0662d4819f1c1d/python_calamine-0.5.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:98bb011d33c0e2d183ff30ab3d96792c3493f56f67a7aa2fcadad9a03539e79b", size = 1077436, upload-time = "2025-10-21T07:11:28.801Z" }, + { url = "https://files.pythonhosted.org/packages/cb/ce/806f8ce06b5bb9db33007f85045c304cda410970e7aa07d08f6eaee67913/python_calamine-0.5.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:6b218a95489ff2f1cc1de0bba2a16fcc82981254bbb23f31d41d29191282b9ad", size = 1150570, upload-time = "2025-10-21T07:11:30.237Z" }, + { url = "https://files.pythonhosted.org/packages/18/da/61f13c8d107783128c1063cf52ca9cacdc064c58d58d3cf49c1728ce8296/python_calamine-0.5.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e8296a4872dbe834205d25d26dd6cfcb33ee9da721668d81b21adc25a07c07e4", size = 1080286, upload-time = "2025-10-21T07:11:31.564Z" }, + { url = "https://files.pythonhosted.org/packages/99/85/c5612a63292eb7d0648b17c5ff32ad5d6c6f3e1d78825f01af5c765f4d3f/python_calamine-0.5.4-cp312-cp312-win32.whl", hash = "sha256:cebb9c88983ae676c60c8c02aa29a9fe13563f240579e66de5c71b969ace5fd9", size = 676617, upload-time = "2025-10-21T07:11:32.833Z" }, + { url = "https://files.pythonhosted.org/packages/bb/18/5a037942de8a8df0c805224b2fba06df6d25c1be3c9484ba9db1ca4f3ee6/python_calamine-0.5.4-cp312-cp312-win_amd64.whl", hash = "sha256:15abd7aff98fde36d7df91ac051e86e66e5d5326a7fa98d54697afe95a613501", size = 721464, upload-time = "2025-10-21T07:11:34.383Z" }, + { url = "https://files.pythonhosted.org/packages/d1/8b/89ca17b44bcd8be5d0e8378d87b880ae17a837573553bd2147cceca7e759/python_calamine-0.5.4-cp312-cp312-win_arm64.whl", hash = "sha256:1cef0d0fc936974020a24acf1509ed2a285b30a4e1adf346c057112072e84251", size = 687268, upload-time = "2025-10-21T07:11:36.324Z" }, + { url = "https://files.pythonhosted.org/packages/ab/a8/0e05992489f8ca99eadfb52e858a7653b01b27a7c66d040abddeb4bdf799/python_calamine-0.5.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:8d4be45952555f129584e0ca6ddb442bed5cb97b8d7cd0fd5ae463237b98eb15", size = 856420, upload-time = "2025-10-21T07:13:20.962Z" }, + { url = "https://files.pythonhosted.org/packages/f0/b0/5bbe52c97161acb94066e7020c2fed7eafbca4bf6852a4b02ed80bf0b24b/python_calamine-0.5.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b387d12cb8cae98c8e0c061c5400f80bad1f43f26fafcf95ff5934df995f50b", size = 833240, upload-time = "2025-10-21T07:13:22.801Z" }, + { url = "https://files.pythonhosted.org/packages/c7/b9/44fa30f6bf479072d9042856d3fab8bdd1532d2d901e479e199bc1de0e6c/python_calamine-0.5.4-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2103714954b7dbed72a0b0eff178b08e854bba130be283e3ae3d7c95521e8f69", size = 899470, upload-time = "2025-10-21T07:13:25.176Z" }, + { url = "https://files.pythonhosted.org/packages/0e/f2/acbb2c1d6acba1eaf6b1efb6485c98995050bddedfb6b93ce05be2753a85/python_calamine-0.5.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c09fdebe23a5045d09e12b3366ff8fd45165b6fb56f55e9a12342a5daddbd11a", size = 906108, upload-time = "2025-10-21T07:13:26.709Z" }, + { url = "https://files.pythonhosted.org/packages/77/28/ff007e689539d6924223565995db876ac044466b8859bade371696294659/python_calamine-0.5.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fa992d72fbd38f09107430100b7688c03046d8c1994e4cff9bbbd2a825811796", size = 948580, upload-time = "2025-10-21T07:13:30.816Z" }, + { url = "https://files.pythonhosted.org/packages/a4/06/b423655446fb27e22bfc1ca5e5b11f3449e0350fe8fefa0ebd68675f7e85/python_calamine-0.5.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:88e608c7589412d3159be40d270a90994e38c9eafc125bf8ad5a9c92deffd6dd", size = 1079516, upload-time = "2025-10-21T07:13:32.288Z" }, + { url = "https://files.pythonhosted.org/packages/76/f5/c7132088978b712a5eddf1ca6bf64ae81335fbca9443ed486330519954c3/python_calamine-0.5.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:51a007801aef12f6bc93a545040a36df48e9af920a7da9ded915584ad9a002b1", size = 1152379, upload-time = "2025-10-21T07:13:33.739Z" }, + { url = "https://files.pythonhosted.org/packages/bd/c8/37a8d80b7e55e7cfbe649f7a92a7e838defc746aac12dca751aad5dd06a6/python_calamine-0.5.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b056db205e45ab9381990a5c15d869f1021c1262d065740c9cd296fc5d3fb248", size = 1080420, upload-time = "2025-10-21T07:13:35.33Z" }, + { url = "https://files.pythonhosted.org/packages/10/52/9a96d06e75862d356dc80a4a465ad88fba544a19823568b4ff484e7a12f2/python_calamine-0.5.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:dd8f4123b2403fc22c92ec4f5e51c495427cf3739c5cb614b9829745a80922db", size = 722350, upload-time = "2025-10-21T07:13:37.074Z" }, ] [[package]] @@ -5089,11 +5093,11 @@ wheels = [ [[package]] name = "python-iso639" -version = "2025.2.18" +version = "2025.11.11" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d5/19/45aa1917c7b1f4eb71104795b9b0cbf97169b99ec46cd303445883536549/python_iso639-2025.2.18.tar.gz", hash = "sha256:34e31e8e76eb3fc839629e257b12bcfd957c6edcbd486bbf66ba5185d1f566e8", size = 173552, upload-time = "2025-02-18T13:48:08.607Z" } +sdist = { url = "https://files.pythonhosted.org/packages/89/6f/45bc5ae1c132ab7852a8642d66d25ffff6e4b398195127ac66158d3b5f4d/python_iso639-2025.11.11.tar.gz", hash = "sha256:75fab30f1a0f46b4e8161eafb84afe4ecd07eaada05e2c5364f14b0f9c864477", size = 173897, upload-time = "2025-11-11T15:23:00.893Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/a3/3ceaf89a17a1e1d5e7bbdfe5514aa3055d91285b37a5c8fed662969e3d56/python_iso639-2025.2.18-py3-none-any.whl", hash = "sha256:b2d471c37483a26f19248458b20e7bd96492e15368b01053b540126bcc23152f", size = 167631, upload-time = "2025-02-18T13:48:06.602Z" }, + { url = "https://files.pythonhosted.org/packages/03/69/081960288e4cd541cbdb90e1768373e1198b040bf2ae40cd25b9c9799205/python_iso639-2025.11.11-py3-none-any.whl", hash = "sha256:02ea4cfca2c189b5665e4e8adc8c17c62ab6e4910932541a23baddea33207ea2", size = 167723, upload-time = "2025-11-11T15:22:59.819Z" }, ] [[package]] @@ -5212,43 +5216,37 @@ wheels = [ [[package]] name = "rapidfuzz" -version = "3.14.1" +version = "3.14.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ed/fc/a98b616db9a42dcdda7c78c76bdfdf6fe290ac4c5ffbb186f73ec981ad5b/rapidfuzz-3.14.1.tar.gz", hash = "sha256:b02850e7f7152bd1edff27e9d584505b84968cacedee7a734ec4050c655a803c", size = 57869570, upload-time = "2025-09-08T21:08:15.922Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/28/9d808fe62375b9aab5ba92fa9b29371297b067c2790b2d7cda648b1e2f8d/rapidfuzz-3.14.3.tar.gz", hash = "sha256:2491937177868bc4b1e469087601d53f925e8d270ccc21e07404b4b5814b7b5f", size = 57863900, upload-time = "2025-11-01T11:54:52.321Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/c7/c3c860d512606225c11c8ee455b4dc0b0214dbcfac90a2c22dddf55320f3/rapidfuzz-3.14.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d976701060886a791c8a9260b1d4139d14c1f1e9a6ab6116b45a1acf3baff67", size = 1938398, upload-time = "2025-09-08T21:05:44.031Z" }, - { url = "https://files.pythonhosted.org/packages/c0/f3/67f5c5cd4d728993c48c1dcb5da54338d77c03c34b4903cc7839a3b89faf/rapidfuzz-3.14.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e6ba7e6eb2ab03870dcab441d707513db0b4264c12fba7b703e90e8b4296df2", size = 1392819, upload-time = "2025-09-08T21:05:45.549Z" }, - { url = "https://files.pythonhosted.org/packages/d5/06/400d44842f4603ce1bebeaeabe776f510e329e7dbf6c71b6f2805e377889/rapidfuzz-3.14.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e532bf46de5fd3a1efde73a16a4d231d011bce401c72abe3c6ecf9de681003f", size = 1391798, upload-time = "2025-09-08T21:05:47.044Z" }, - { url = "https://files.pythonhosted.org/packages/90/97/a6944955713b47d88e8ca4305ca7484940d808c4e6c4e28b6fa0fcbff97e/rapidfuzz-3.14.1-cp311-cp311-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f9b6a6fb8ed9b951e5f3b82c1ce6b1665308ec1a0da87f799b16e24fc59e4662", size = 1699136, upload-time = "2025-09-08T21:05:48.919Z" }, - { url = "https://files.pythonhosted.org/packages/a8/1e/f311a5c95ddf922db6dd8666efeceb9ac69e1319ed098ac80068a4041732/rapidfuzz-3.14.1-cp311-cp311-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5b6ac3f9810949caef0e63380b11a3c32a92f26bacb9ced5e32c33560fcdf8d1", size = 2236238, upload-time = "2025-09-08T21:05:50.844Z" }, - { url = "https://files.pythonhosted.org/packages/85/27/e14e9830255db8a99200f7111b158ddef04372cf6332a415d053fe57cc9c/rapidfuzz-3.14.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e52e4c34fd567f77513e886b66029c1ae02f094380d10eba18ba1c68a46d8b90", size = 3183685, upload-time = "2025-09-08T21:05:52.362Z" }, - { url = "https://files.pythonhosted.org/packages/61/b2/42850c9616ddd2887904e5dd5377912cbabe2776fdc9fd4b25e6e12fba32/rapidfuzz-3.14.1-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:2ef72e41b1a110149f25b14637f1cedea6df192462120bea3433980fe9d8ac05", size = 1231523, upload-time = "2025-09-08T21:05:53.927Z" }, - { url = "https://files.pythonhosted.org/packages/de/b5/6b90ed7127a1732efef39db46dd0afc911f979f215b371c325a2eca9cb15/rapidfuzz-3.14.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fb654a35b373d712a6b0aa2a496b2b5cdd9d32410cfbaecc402d7424a90ba72a", size = 2415209, upload-time = "2025-09-08T21:05:55.422Z" }, - { url = "https://files.pythonhosted.org/packages/70/60/af51c50d238c82f2179edc4b9f799cc5a50c2c0ebebdcfaa97ded7d02978/rapidfuzz-3.14.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:2b2c12e5b9eb8fe9a51b92fe69e9ca362c0970e960268188a6d295e1dec91e6d", size = 2532957, upload-time = "2025-09-08T21:05:57.048Z" }, - { url = "https://files.pythonhosted.org/packages/50/92/29811d2ba7c984251a342c4f9ccc7cc4aa09d43d800af71510cd51c36453/rapidfuzz-3.14.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4f069dec5c450bd987481e752f0a9979e8fdf8e21e5307f5058f5c4bb162fa56", size = 2815720, upload-time = "2025-09-08T21:05:58.618Z" }, - { url = "https://files.pythonhosted.org/packages/78/69/cedcdee16a49e49d4985eab73b59447f211736c5953a58f1b91b6c53a73f/rapidfuzz-3.14.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:4d0d9163725b7ad37a8c46988cae9ebab255984db95ad01bf1987ceb9e3058dd", size = 3323704, upload-time = "2025-09-08T21:06:00.576Z" }, - { url = "https://files.pythonhosted.org/packages/76/3e/5a3f9a5540f18e0126e36f86ecf600145344acb202d94b63ee45211a18b8/rapidfuzz-3.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db656884b20b213d846f6bc990c053d1f4a60e6d4357f7211775b02092784ca1", size = 4287341, upload-time = "2025-09-08T21:06:02.301Z" }, - { url = "https://files.pythonhosted.org/packages/46/26/45db59195929dde5832852c9de8533b2ac97dcc0d852d1f18aca33828122/rapidfuzz-3.14.1-cp311-cp311-win32.whl", hash = "sha256:4b42f7b9c58cbcfbfaddc5a6278b4ca3b6cd8983e7fd6af70ca791dff7105fb9", size = 1726574, upload-time = "2025-09-08T21:06:04.357Z" }, - { url = "https://files.pythonhosted.org/packages/01/5c/a4caf76535f35fceab25b2aaaed0baecf15b3d1fd40746f71985d20f8c4b/rapidfuzz-3.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:e5847f30d7d4edefe0cb37294d956d3495dd127c1c56e9128af3c2258a520bb4", size = 1547124, upload-time = "2025-09-08T21:06:06.002Z" }, - { url = "https://files.pythonhosted.org/packages/c6/66/aa93b52f95a314584d71fa0b76df00bdd4158aafffa76a350f1ae416396c/rapidfuzz-3.14.1-cp311-cp311-win_arm64.whl", hash = "sha256:5087d8ad453092d80c042a08919b1cb20c8ad6047d772dc9312acd834da00f75", size = 816958, upload-time = "2025-09-08T21:06:07.509Z" }, - { url = "https://files.pythonhosted.org/packages/df/77/2f4887c9b786f203e50b816c1cde71f96642f194e6fa752acfa042cf53fd/rapidfuzz-3.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:809515194f628004aac1b1b280c3734c5ea0ccbd45938c9c9656a23ae8b8f553", size = 1932216, upload-time = "2025-09-08T21:06:09.342Z" }, - { url = "https://files.pythonhosted.org/packages/de/bd/b5e445d156cb1c2a87d36d8da53daf4d2a1d1729b4851660017898b49aa0/rapidfuzz-3.14.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0afcf2d6cb633d0d4260d8df6a40de2d9c93e9546e2c6b317ab03f89aa120ad7", size = 1393414, upload-time = "2025-09-08T21:06:10.959Z" }, - { url = "https://files.pythonhosted.org/packages/de/bd/98d065dd0a4479a635df855616980eaae1a1a07a876db9400d421b5b6371/rapidfuzz-3.14.1-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5c1c3d07d53dcafee10599da8988d2b1f39df236aee501ecbd617bd883454fcd", size = 1377194, upload-time = "2025-09-08T21:06:12.471Z" }, - { url = "https://files.pythonhosted.org/packages/d3/8a/1265547b771128b686f3c431377ff1db2fa073397ed082a25998a7b06d4e/rapidfuzz-3.14.1-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6e9ee3e1eb0a027717ee72fe34dc9ac5b3e58119f1bd8dd15bc19ed54ae3e62b", size = 1669573, upload-time = "2025-09-08T21:06:14.016Z" }, - { url = "https://files.pythonhosted.org/packages/a8/57/e73755c52fb451f2054196404ccc468577f8da023b3a48c80bce29ee5d4a/rapidfuzz-3.14.1-cp312-cp312-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:70c845b64a033a20c44ed26bc890eeb851215148cc3e696499f5f65529afb6cb", size = 2217833, upload-time = "2025-09-08T21:06:15.666Z" }, - { url = "https://files.pythonhosted.org/packages/20/14/7399c18c460e72d1b754e80dafc9f65cb42a46cc8f29cd57d11c0c4acc94/rapidfuzz-3.14.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:26db0e815213d04234298dea0d884d92b9cb8d4ba954cab7cf67a35853128a33", size = 3159012, upload-time = "2025-09-08T21:06:17.631Z" }, - { url = "https://files.pythonhosted.org/packages/f8/5e/24f0226ddb5440cabd88605d2491f99ae3748a6b27b0bc9703772892ced7/rapidfuzz-3.14.1-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:6ad3395a416f8b126ff11c788531f157c7debeb626f9d897c153ff8980da10fb", size = 1227032, upload-time = "2025-09-08T21:06:21.06Z" }, - { url = "https://files.pythonhosted.org/packages/40/43/1d54a4ad1a5fac2394d5f28a3108e2bf73c26f4f23663535e3139cfede9b/rapidfuzz-3.14.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:61c5b9ab6f730e6478aa2def566223712d121c6f69a94c7cc002044799442afd", size = 2395054, upload-time = "2025-09-08T21:06:23.482Z" }, - { url = "https://files.pythonhosted.org/packages/0c/71/e9864cd5b0f086c4a03791f5dfe0155a1b132f789fe19b0c76fbabd20513/rapidfuzz-3.14.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:13e0ea3d0c533969158727d1bb7a08c2cc9a816ab83f8f0dcfde7e38938ce3e6", size = 2524741, upload-time = "2025-09-08T21:06:26.825Z" }, - { url = "https://files.pythonhosted.org/packages/b2/0c/53f88286b912faf4a3b2619a60df4f4a67bd0edcf5970d7b0c1143501f0c/rapidfuzz-3.14.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:6325ca435b99f4001aac919ab8922ac464999b100173317defb83eae34e82139", size = 2785311, upload-time = "2025-09-08T21:06:29.471Z" }, - { url = "https://files.pythonhosted.org/packages/53/9a/229c26dc4f91bad323f07304ee5ccbc28f0d21c76047a1e4f813187d0bad/rapidfuzz-3.14.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:07a9fad3247e68798424bdc116c1094e88ecfabc17b29edf42a777520347648e", size = 3303630, upload-time = "2025-09-08T21:06:31.094Z" }, - { url = "https://files.pythonhosted.org/packages/05/de/20e330d6d58cbf83da914accd9e303048b7abae2f198886f65a344b69695/rapidfuzz-3.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8ff5dbe78db0a10c1f916368e21d328935896240f71f721e073cf6c4c8cdedd", size = 4262364, upload-time = "2025-09-08T21:06:32.877Z" }, - { url = "https://files.pythonhosted.org/packages/1f/10/2327f83fad3534a8d69fe9cd718f645ec1fe828b60c0e0e97efc03bf12f8/rapidfuzz-3.14.1-cp312-cp312-win32.whl", hash = "sha256:9c83270e44a6ae7a39fc1d7e72a27486bccc1fa5f34e01572b1b90b019e6b566", size = 1711927, upload-time = "2025-09-08T21:06:34.669Z" }, - { url = "https://files.pythonhosted.org/packages/78/8d/199df0370133fe9f35bc72f3c037b53c93c5c1fc1e8d915cf7c1f6bb8557/rapidfuzz-3.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:e06664c7fdb51c708e082df08a6888fce4c5c416d7e3cc2fa66dd80eb76a149d", size = 1542045, upload-time = "2025-09-08T21:06:36.364Z" }, - { url = "https://files.pythonhosted.org/packages/b3/c6/cc5d4bd1b16ea2657c80b745d8b1c788041a31fad52e7681496197b41562/rapidfuzz-3.14.1-cp312-cp312-win_arm64.whl", hash = "sha256:6c7c26025f7934a169a23dafea6807cfc3fb556f1dd49229faf2171e5d8101cc", size = 813170, upload-time = "2025-09-08T21:06:38.001Z" }, - { url = "https://files.pythonhosted.org/packages/05/c7/1b17347e30f2b50dd976c54641aa12003569acb1bdaabf45a5cc6f471c58/rapidfuzz-3.14.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4a21ccdf1bd7d57a1009030527ba8fae1c74bf832d0a08f6b67de8f5c506c96f", size = 1862602, upload-time = "2025-09-08T21:08:09.088Z" }, - { url = "https://files.pythonhosted.org/packages/09/cf/95d0dacac77eda22499991bd5f304c77c5965fb27348019a48ec3fe4a3f6/rapidfuzz-3.14.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:589fb0af91d3aff318750539c832ea1100dbac2c842fde24e42261df443845f6", size = 1339548, upload-time = "2025-09-08T21:08:11.059Z" }, - { url = "https://files.pythonhosted.org/packages/b6/58/f515c44ba8c6fa5daa35134b94b99661ced852628c5505ead07b905c3fc7/rapidfuzz-3.14.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a4f18092db4825f2517d135445015b40033ed809a41754918a03ef062abe88a0", size = 1513859, upload-time = "2025-09-08T21:08:13.07Z" }, + { url = "https://files.pythonhosted.org/packages/76/25/5b0a33ad3332ee1213068c66f7c14e9e221be90bab434f0cb4defa9d6660/rapidfuzz-3.14.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dea2d113e260a5da0c4003e0a5e9fdf24a9dc2bb9eaa43abd030a1e46ce7837d", size = 1953885, upload-time = "2025-11-01T11:52:47.75Z" }, + { url = "https://files.pythonhosted.org/packages/2d/ab/f1181f500c32c8fcf7c966f5920c7e56b9b1d03193386d19c956505c312d/rapidfuzz-3.14.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e6c31a4aa68cfa75d7eede8b0ed24b9e458447db604c2db53f358be9843d81d3", size = 1390200, upload-time = "2025-11-01T11:52:49.491Z" }, + { url = "https://files.pythonhosted.org/packages/14/2a/0f2de974ececad873865c6bb3ea3ad07c976ac293d5025b2d73325aac1d4/rapidfuzz-3.14.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:02821366d928e68ddcb567fed8723dad7ea3a979fada6283e6914d5858674850", size = 1389319, upload-time = "2025-11-01T11:52:51.224Z" }, + { url = "https://files.pythonhosted.org/packages/ed/69/309d8f3a0bb3031fd9b667174cc4af56000645298af7c2931be5c3d14bb4/rapidfuzz-3.14.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cfe8df315ab4e6db4e1be72c5170f8e66021acde22cd2f9d04d2058a9fd8162e", size = 3178495, upload-time = "2025-11-01T11:52:53.005Z" }, + { url = "https://files.pythonhosted.org/packages/10/b7/f9c44a99269ea5bf6fd6a40b84e858414b6e241288b9f2b74af470d222b1/rapidfuzz-3.14.3-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:769f31c60cd79420188fcdb3c823227fc4a6deb35cafec9d14045c7f6743acae", size = 1228443, upload-time = "2025-11-01T11:52:54.991Z" }, + { url = "https://files.pythonhosted.org/packages/f2/0a/3b3137abac7f19c9220e14cd7ce993e35071a7655e7ef697785a3edfea1a/rapidfuzz-3.14.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:54fa03062124e73086dae66a3451c553c1e20a39c077fd704dc7154092c34c63", size = 2411998, upload-time = "2025-11-01T11:52:56.629Z" }, + { url = "https://files.pythonhosted.org/packages/f3/b6/983805a844d44670eaae63831024cdc97ada4e9c62abc6b20703e81e7f9b/rapidfuzz-3.14.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:834d1e818005ed0d4ae38f6b87b86fad9b0a74085467ece0727d20e15077c094", size = 2530120, upload-time = "2025-11-01T11:52:58.298Z" }, + { url = "https://files.pythonhosted.org/packages/b4/cc/2c97beb2b1be2d7595d805682472f1b1b844111027d5ad89b65e16bdbaaa/rapidfuzz-3.14.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:948b00e8476a91f510dd1ec07272efc7d78c275d83b630455559671d4e33b678", size = 4283129, upload-time = "2025-11-01T11:53:00.188Z" }, + { url = "https://files.pythonhosted.org/packages/4d/03/2f0e5e94941045aefe7eafab72320e61285c07b752df9884ce88d6b8b835/rapidfuzz-3.14.3-cp311-cp311-win32.whl", hash = "sha256:43d0305c36f504232f18ea04e55f2059bb89f169d3119c4ea96a0e15b59e2a91", size = 1724224, upload-time = "2025-11-01T11:53:02.149Z" }, + { url = "https://files.pythonhosted.org/packages/cf/99/5fa23e204435803875daefda73fd61baeabc3c36b8fc0e34c1705aab8c7b/rapidfuzz-3.14.3-cp311-cp311-win_amd64.whl", hash = "sha256:ef6bf930b947bd0735c550683939a032090f1d688dfd8861d6b45307b96fd5c5", size = 1544259, upload-time = "2025-11-01T11:53:03.66Z" }, + { url = "https://files.pythonhosted.org/packages/48/35/d657b85fcc615a42661b98ac90ce8e95bd32af474603a105643963749886/rapidfuzz-3.14.3-cp311-cp311-win_arm64.whl", hash = "sha256:f3eb0ff3b75d6fdccd40b55e7414bb859a1cda77c52762c9c82b85569f5088e7", size = 814734, upload-time = "2025-11-01T11:53:05.008Z" }, + { url = "https://files.pythonhosted.org/packages/fa/8e/3c215e860b458cfbedb3ed73bc72e98eb7e0ed72f6b48099604a7a3260c2/rapidfuzz-3.14.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:685c93ea961d135893b5984a5a9851637d23767feabe414ec974f43babbd8226", size = 1945306, upload-time = "2025-11-01T11:53:06.452Z" }, + { url = "https://files.pythonhosted.org/packages/36/d9/31b33512015c899f4a6e6af64df8dfe8acddf4c8b40a4b3e0e6e1bcd00e5/rapidfuzz-3.14.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fa7c8f26f009f8c673fbfb443792f0cf8cf50c4e18121ff1e285b5e08a94fbdb", size = 1390788, upload-time = "2025-11-01T11:53:08.721Z" }, + { url = "https://files.pythonhosted.org/packages/a9/67/2ee6f8de6e2081ccd560a571d9c9063184fe467f484a17fa90311a7f4a2e/rapidfuzz-3.14.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:57f878330c8d361b2ce76cebb8e3e1dc827293b6abf404e67d53260d27b5d941", size = 1374580, upload-time = "2025-11-01T11:53:10.164Z" }, + { url = "https://files.pythonhosted.org/packages/30/83/80d22997acd928eda7deadc19ccd15883904622396d6571e935993e0453a/rapidfuzz-3.14.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c5f545f454871e6af05753a0172849c82feaf0f521c5ca62ba09e1b382d6382", size = 3154947, upload-time = "2025-11-01T11:53:12.093Z" }, + { url = "https://files.pythonhosted.org/packages/5b/cf/9f49831085a16384695f9fb096b99662f589e30b89b4a589a1ebc1a19d34/rapidfuzz-3.14.3-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:07aa0b5d8863e3151e05026a28e0d924accf0a7a3b605da978f0359bb804df43", size = 1223872, upload-time = "2025-11-01T11:53:13.664Z" }, + { url = "https://files.pythonhosted.org/packages/c8/0f/41ee8034e744b871c2e071ef0d360686f5ccfe5659f4fd96c3ec406b3c8b/rapidfuzz-3.14.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73b07566bc7e010e7b5bd490fb04bb312e820970180df6b5655e9e6224c137db", size = 2392512, upload-time = "2025-11-01T11:53:15.109Z" }, + { url = "https://files.pythonhosted.org/packages/da/86/280038b6b0c2ccec54fb957c732ad6b41cc1fd03b288d76545b9cf98343f/rapidfuzz-3.14.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6de00eb84c71476af7d3110cf25d8fe7c792d7f5fa86764ef0b4ca97e78ca3ed", size = 2521398, upload-time = "2025-11-01T11:53:17.146Z" }, + { url = "https://files.pythonhosted.org/packages/fa/7b/05c26f939607dca0006505e3216248ae2de631e39ef94dd63dbbf0860021/rapidfuzz-3.14.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d7843a1abf0091773a530636fdd2a49a41bcae22f9910b86b4f903e76ddc82dc", size = 4259416, upload-time = "2025-11-01T11:53:19.34Z" }, + { url = "https://files.pythonhosted.org/packages/40/eb/9e3af4103d91788f81111af1b54a28de347cdbed8eaa6c91d5e98a889aab/rapidfuzz-3.14.3-cp312-cp312-win32.whl", hash = "sha256:dea97ac3ca18cd3ba8f3d04b5c1fe4aa60e58e8d9b7793d3bd595fdb04128d7a", size = 1709527, upload-time = "2025-11-01T11:53:20.949Z" }, + { url = "https://files.pythonhosted.org/packages/b8/63/d06ecce90e2cf1747e29aeab9f823d21e5877a4c51b79720b2d3be7848f8/rapidfuzz-3.14.3-cp312-cp312-win_amd64.whl", hash = "sha256:b5100fd6bcee4d27f28f4e0a1c6b5127bc8ba7c2a9959cad9eab0bf4a7ab3329", size = 1538989, upload-time = "2025-11-01T11:53:22.428Z" }, + { url = "https://files.pythonhosted.org/packages/fc/6d/beee32dcda64af8128aab3ace2ccb33d797ed58c434c6419eea015fec779/rapidfuzz-3.14.3-cp312-cp312-win_arm64.whl", hash = "sha256:4e49c9e992bc5fc873bd0fff7ef16a4405130ec42f2ce3d2b735ba5d3d4eb70f", size = 811161, upload-time = "2025-11-01T11:53:23.811Z" }, + { url = "https://files.pythonhosted.org/packages/c9/33/b5bd6475c7c27164b5becc9b0e3eb978f1e3640fea590dd3dced6006ee83/rapidfuzz-3.14.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7cf174b52cb3ef5d49e45d0a1133b7e7d0ecf770ed01f97ae9962c5c91d97d23", size = 1888499, upload-time = "2025-11-01T11:54:42.094Z" }, + { url = "https://files.pythonhosted.org/packages/30/d2/89d65d4db4bb931beade9121bc71ad916b5fa9396e807d11b33731494e8e/rapidfuzz-3.14.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:442cba39957a008dfc5bdef21a9c3f4379e30ffb4e41b8555dbaf4887eca9300", size = 1336747, upload-time = "2025-11-01T11:54:43.957Z" }, + { url = "https://files.pythonhosted.org/packages/85/33/cd87d92b23f0b06e8914a61cea6850c6d495ca027f669fab7a379041827a/rapidfuzz-3.14.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1faa0f8f76ba75fd7b142c984947c280ef6558b5067af2ae9b8729b0a0f99ede", size = 1352187, upload-time = "2025-11-01T11:54:45.518Z" }, + { url = "https://files.pythonhosted.org/packages/22/20/9d30b4a1ab26aac22fff17d21dec7e9089ccddfe25151d0a8bb57001dc3d/rapidfuzz-3.14.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e6eefec45625c634926a9fd46c9e4f31118ac8f3156fff9494422cee45207e6", size = 3101472, upload-time = "2025-11-01T11:54:47.255Z" }, + { url = "https://files.pythonhosted.org/packages/b1/ad/fa2d3e5c29a04ead7eaa731c7cd1f30f9ec3c77b3a578fdf90280797cbcb/rapidfuzz-3.14.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56fefb4382bb12250f164250240b9dd7772e41c5c8ae976fd598a32292449cc5", size = 1511361, upload-time = "2025-11-01T11:54:49.057Z" }, ] [[package]] @@ -5313,38 +5311,38 @@ wheels = [ [[package]] name = "regex" -version = "2025.9.18" +version = "2025.11.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/49/d3/eaa0d28aba6ad1827ad1e716d9a93e1ba963ada61887498297d3da715133/regex-2025.9.18.tar.gz", hash = "sha256:c5ba23274c61c6fef447ba6a39333297d0c247f53059dba0bca415cac511edc4", size = 400917, upload-time = "2025-09-19T00:38:35.79Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/a9/546676f25e573a4cf00fe8e119b78a37b6a8fe2dc95cda877b30889c9c45/regex-2025.11.3.tar.gz", hash = "sha256:1fedc720f9bb2494ce31a58a1631f9c82df6a09b49c19517ea5cc280b4541e01", size = 414669, upload-time = "2025-11-03T21:34:22.089Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/58/61/80eda662fc4eb32bfedc331f42390974c9e89c7eac1b79cd9eea4d7c458c/regex-2025.9.18-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:51076980cd08cd13c88eb7365427ae27f0d94e7cebe9ceb2bb9ffdae8fc4d82a", size = 484832, upload-time = "2025-09-19T00:35:30.011Z" }, - { url = "https://files.pythonhosted.org/packages/a6/d9/33833d9abddf3f07ad48504ddb53fe3b22f353214bbb878a72eee1e3ddbf/regex-2025.9.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:828446870bd7dee4e0cbeed767f07961aa07f0ea3129f38b3ccecebc9742e0b8", size = 288994, upload-time = "2025-09-19T00:35:31.733Z" }, - { url = "https://files.pythonhosted.org/packages/2a/b3/526ee96b0d70ea81980cbc20c3496fa582f775a52e001e2743cc33b2fa75/regex-2025.9.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c28821d5637866479ec4cc23b8c990f5bc6dd24e5e4384ba4a11d38a526e1414", size = 286619, upload-time = "2025-09-19T00:35:33.221Z" }, - { url = "https://files.pythonhosted.org/packages/65/4f/c2c096b02a351b33442aed5895cdd8bf87d372498d2100927c5a053d7ba3/regex-2025.9.18-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:726177ade8e481db669e76bf99de0b278783be8acd11cef71165327abd1f170a", size = 792454, upload-time = "2025-09-19T00:35:35.361Z" }, - { url = "https://files.pythonhosted.org/packages/24/15/b562c9d6e47c403c4b5deb744f8b4bf6e40684cf866c7b077960a925bdff/regex-2025.9.18-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f5cca697da89b9f8ea44115ce3130f6c54c22f541943ac8e9900461edc2b8bd4", size = 858723, upload-time = "2025-09-19T00:35:36.949Z" }, - { url = "https://files.pythonhosted.org/packages/f2/01/dba305409849e85b8a1a681eac4c03ed327d8de37895ddf9dc137f59c140/regex-2025.9.18-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:dfbde38f38004703c35666a1e1c088b778e35d55348da2b7b278914491698d6a", size = 905899, upload-time = "2025-09-19T00:35:38.723Z" }, - { url = "https://files.pythonhosted.org/packages/fe/d0/c51d1e6a80eab11ef96a4cbad17fc0310cf68994fb01a7283276b7e5bbd6/regex-2025.9.18-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f2f422214a03fab16bfa495cfec72bee4aaa5731843b771860a471282f1bf74f", size = 798981, upload-time = "2025-09-19T00:35:40.416Z" }, - { url = "https://files.pythonhosted.org/packages/c4/5e/72db90970887bbe02296612bd61b0fa31e6d88aa24f6a4853db3e96c575e/regex-2025.9.18-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a295916890f4df0902e4286bc7223ee7f9e925daa6dcdec4192364255b70561a", size = 781900, upload-time = "2025-09-19T00:35:42.077Z" }, - { url = "https://files.pythonhosted.org/packages/50/ff/596be45eea8e9bc31677fde243fa2904d00aad1b32c31bce26c3dbba0b9e/regex-2025.9.18-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:5db95ff632dbabc8c38c4e82bf545ab78d902e81160e6e455598014f0abe66b9", size = 852952, upload-time = "2025-09-19T00:35:43.751Z" }, - { url = "https://files.pythonhosted.org/packages/e5/1b/2dfa348fa551e900ed3f5f63f74185b6a08e8a76bc62bc9c106f4f92668b/regex-2025.9.18-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fb967eb441b0f15ae610b7069bdb760b929f267efbf522e814bbbfffdf125ce2", size = 844355, upload-time = "2025-09-19T00:35:45.309Z" }, - { url = "https://files.pythonhosted.org/packages/f4/bf/aefb1def27fe33b8cbbb19c75c13aefccfbef1c6686f8e7f7095705969c7/regex-2025.9.18-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f04d2f20da4053d96c08f7fde6e1419b7ec9dbcee89c96e3d731fca77f411b95", size = 787254, upload-time = "2025-09-19T00:35:46.904Z" }, - { url = "https://files.pythonhosted.org/packages/e3/4e/8ef042e7cf0dbbb401e784e896acfc1b367b95dfbfc9ada94c2ed55a081f/regex-2025.9.18-cp311-cp311-win32.whl", hash = "sha256:895197241fccf18c0cea7550c80e75f185b8bd55b6924fcae269a1a92c614a07", size = 264129, upload-time = "2025-09-19T00:35:48.597Z" }, - { url = "https://files.pythonhosted.org/packages/b4/7d/c4fcabf80dcdd6821c0578ad9b451f8640b9110fb3dcb74793dd077069ff/regex-2025.9.18-cp311-cp311-win_amd64.whl", hash = "sha256:7e2b414deae99166e22c005e154a5513ac31493db178d8aec92b3269c9cce8c9", size = 276160, upload-time = "2025-09-19T00:36:00.45Z" }, - { url = "https://files.pythonhosted.org/packages/64/f8/0e13c8ae4d6df9d128afaba138342d532283d53a4c1e7a8c93d6756c8f4a/regex-2025.9.18-cp311-cp311-win_arm64.whl", hash = "sha256:fb137ec7c5c54f34a25ff9b31f6b7b0c2757be80176435bf367111e3f71d72df", size = 268471, upload-time = "2025-09-19T00:36:02.149Z" }, - { url = "https://files.pythonhosted.org/packages/b0/99/05859d87a66ae7098222d65748f11ef7f2dff51bfd7482a4e2256c90d72b/regex-2025.9.18-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:436e1b31d7efd4dcd52091d076482031c611dde58bf9c46ca6d0a26e33053a7e", size = 486335, upload-time = "2025-09-19T00:36:03.661Z" }, - { url = "https://files.pythonhosted.org/packages/97/7e/d43d4e8b978890932cf7b0957fce58c5b08c66f32698f695b0c2c24a48bf/regex-2025.9.18-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c190af81e5576b9c5fdc708f781a52ff20f8b96386c6e2e0557a78402b029f4a", size = 289720, upload-time = "2025-09-19T00:36:05.471Z" }, - { url = "https://files.pythonhosted.org/packages/bb/3b/ff80886089eb5dcf7e0d2040d9aaed539e25a94300403814bb24cc775058/regex-2025.9.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e4121f1ce2b2b5eec4b397cc1b277686e577e658d8f5870b7eb2d726bd2300ab", size = 287257, upload-time = "2025-09-19T00:36:07.072Z" }, - { url = "https://files.pythonhosted.org/packages/ee/66/243edf49dd8720cba8d5245dd4d6adcb03a1defab7238598c0c97cf549b8/regex-2025.9.18-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:300e25dbbf8299d87205e821a201057f2ef9aa3deb29caa01cd2cac669e508d5", size = 797463, upload-time = "2025-09-19T00:36:08.399Z" }, - { url = "https://files.pythonhosted.org/packages/df/71/c9d25a1142c70432e68bb03211d4a82299cd1c1fbc41db9409a394374ef5/regex-2025.9.18-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7b47fcf9f5316c0bdaf449e879407e1b9937a23c3b369135ca94ebc8d74b1742", size = 862670, upload-time = "2025-09-19T00:36:10.101Z" }, - { url = "https://files.pythonhosted.org/packages/f8/8f/329b1efc3a64375a294e3a92d43372bf1a351aa418e83c21f2f01cf6ec41/regex-2025.9.18-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:57a161bd3acaa4b513220b49949b07e252165e6b6dc910ee7617a37ff4f5b425", size = 910881, upload-time = "2025-09-19T00:36:12.223Z" }, - { url = "https://files.pythonhosted.org/packages/35/9e/a91b50332a9750519320ed30ec378b74c996f6befe282cfa6bb6cea7e9fd/regex-2025.9.18-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f130c3a7845ba42de42f380fff3c8aebe89a810747d91bcf56d40a069f15352", size = 802011, upload-time = "2025-09-19T00:36:13.901Z" }, - { url = "https://files.pythonhosted.org/packages/a4/1d/6be3b8d7856b6e0d7ee7f942f437d0a76e0d5622983abbb6d21e21ab9a17/regex-2025.9.18-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5f96fa342b6f54dcba928dd452e8d8cb9f0d63e711d1721cd765bb9f73bb048d", size = 786668, upload-time = "2025-09-19T00:36:15.391Z" }, - { url = "https://files.pythonhosted.org/packages/cb/ce/4a60e53df58bd157c5156a1736d3636f9910bdcc271d067b32b7fcd0c3a8/regex-2025.9.18-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0f0d676522d68c207828dcd01fb6f214f63f238c283d9f01d85fc664c7c85b56", size = 856578, upload-time = "2025-09-19T00:36:16.845Z" }, - { url = "https://files.pythonhosted.org/packages/86/e8/162c91bfe7217253afccde112868afb239f94703de6580fb235058d506a6/regex-2025.9.18-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:40532bff8a1a0621e7903ae57fce88feb2e8a9a9116d341701302c9302aef06e", size = 849017, upload-time = "2025-09-19T00:36:18.597Z" }, - { url = "https://files.pythonhosted.org/packages/35/34/42b165bc45289646ea0959a1bc7531733e90b47c56a72067adfe6b3251f6/regex-2025.9.18-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:039f11b618ce8d71a1c364fdee37da1012f5a3e79b1b2819a9f389cd82fd6282", size = 788150, upload-time = "2025-09-19T00:36:20.464Z" }, - { url = "https://files.pythonhosted.org/packages/79/5d/cdd13b1f3c53afa7191593a7ad2ee24092a5a46417725ffff7f64be8342d/regex-2025.9.18-cp312-cp312-win32.whl", hash = "sha256:e1dd06f981eb226edf87c55d523131ade7285137fbde837c34dc9d1bf309f459", size = 264536, upload-time = "2025-09-19T00:36:21.922Z" }, - { url = "https://files.pythonhosted.org/packages/e0/f5/4a7770c9a522e7d2dc1fa3ffc83ab2ab33b0b22b447e62cffef186805302/regex-2025.9.18-cp312-cp312-win_amd64.whl", hash = "sha256:3d86b5247bf25fa3715e385aa9ff272c307e0636ce0c9595f64568b41f0a9c77", size = 275501, upload-time = "2025-09-19T00:36:23.4Z" }, - { url = "https://files.pythonhosted.org/packages/df/05/9ce3e110e70d225ecbed455b966003a3afda5e58e8aec2964042363a18f4/regex-2025.9.18-cp312-cp312-win_arm64.whl", hash = "sha256:032720248cbeeae6444c269b78cb15664458b7bb9ed02401d3da59fe4d68c3a5", size = 268601, upload-time = "2025-09-19T00:36:25.092Z" }, + { url = "https://files.pythonhosted.org/packages/f7/90/4fb5056e5f03a7048abd2b11f598d464f0c167de4f2a51aa868c376b8c70/regex-2025.11.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:eadade04221641516fa25139273505a1c19f9bf97589a05bc4cfcd8b4a618031", size = 488081, upload-time = "2025-11-03T21:31:11.946Z" }, + { url = "https://files.pythonhosted.org/packages/85/23/63e481293fac8b069d84fba0299b6666df720d875110efd0338406b5d360/regex-2025.11.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:feff9e54ec0dd3833d659257f5c3f5322a12eee58ffa360984b716f8b92983f4", size = 290554, upload-time = "2025-11-03T21:31:13.387Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9d/b101d0262ea293a0066b4522dfb722eb6a8785a8c3e084396a5f2c431a46/regex-2025.11.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3b30bc921d50365775c09a7ed446359e5c0179e9e2512beec4a60cbcef6ddd50", size = 288407, upload-time = "2025-11-03T21:31:14.809Z" }, + { url = "https://files.pythonhosted.org/packages/0c/64/79241c8209d5b7e00577ec9dca35cd493cc6be35b7d147eda367d6179f6d/regex-2025.11.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f99be08cfead2020c7ca6e396c13543baea32343b7a9a5780c462e323bd8872f", size = 793418, upload-time = "2025-11-03T21:31:16.556Z" }, + { url = "https://files.pythonhosted.org/packages/3d/e2/23cd5d3573901ce8f9757c92ca4db4d09600b865919b6d3e7f69f03b1afd/regex-2025.11.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6dd329a1b61c0ee95ba95385fb0c07ea0d3fe1a21e1349fa2bec272636217118", size = 860448, upload-time = "2025-11-03T21:31:18.12Z" }, + { url = "https://files.pythonhosted.org/packages/2a/4c/aecf31beeaa416d0ae4ecb852148d38db35391aac19c687b5d56aedf3a8b/regex-2025.11.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4c5238d32f3c5269d9e87be0cf096437b7622b6920f5eac4fd202468aaeb34d2", size = 907139, upload-time = "2025-11-03T21:31:20.753Z" }, + { url = "https://files.pythonhosted.org/packages/61/22/b8cb00df7d2b5e0875f60628594d44dba283e951b1ae17c12f99e332cc0a/regex-2025.11.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10483eefbfb0adb18ee9474498c9a32fcf4e594fbca0543bb94c48bac6183e2e", size = 800439, upload-time = "2025-11-03T21:31:22.069Z" }, + { url = "https://files.pythonhosted.org/packages/02/a8/c4b20330a5cdc7a8eb265f9ce593f389a6a88a0c5f280cf4d978f33966bc/regex-2025.11.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:78c2d02bb6e1da0720eedc0bad578049cad3f71050ef8cd065ecc87691bed2b0", size = 782965, upload-time = "2025-11-03T21:31:23.598Z" }, + { url = "https://files.pythonhosted.org/packages/b4/4c/ae3e52988ae74af4b04d2af32fee4e8077f26e51b62ec2d12d246876bea2/regex-2025.11.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e6b49cd2aad93a1790ce9cffb18964f6d3a4b0b3dbdbd5de094b65296fce6e58", size = 854398, upload-time = "2025-11-03T21:31:25.008Z" }, + { url = "https://files.pythonhosted.org/packages/06/d1/a8b9cf45874eda14b2e275157ce3b304c87e10fb38d9fc26a6e14eb18227/regex-2025.11.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:885b26aa3ee56433b630502dc3d36ba78d186a00cc535d3806e6bfd9ed3c70ab", size = 845897, upload-time = "2025-11-03T21:31:26.427Z" }, + { url = "https://files.pythonhosted.org/packages/ea/fe/1830eb0236be93d9b145e0bd8ab499f31602fe0999b1f19e99955aa8fe20/regex-2025.11.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ddd76a9f58e6a00f8772e72cff8ebcff78e022be95edf018766707c730593e1e", size = 788906, upload-time = "2025-11-03T21:31:28.078Z" }, + { url = "https://files.pythonhosted.org/packages/66/47/dc2577c1f95f188c1e13e2e69d8825a5ac582ac709942f8a03af42ed6e93/regex-2025.11.3-cp311-cp311-win32.whl", hash = "sha256:3e816cc9aac1cd3cc9a4ec4d860f06d40f994b5c7b4d03b93345f44e08cc68bf", size = 265812, upload-time = "2025-11-03T21:31:29.72Z" }, + { url = "https://files.pythonhosted.org/packages/50/1e/15f08b2f82a9bbb510621ec9042547b54d11e83cb620643ebb54e4eb7d71/regex-2025.11.3-cp311-cp311-win_amd64.whl", hash = "sha256:087511f5c8b7dfbe3a03f5d5ad0c2a33861b1fc387f21f6f60825a44865a385a", size = 277737, upload-time = "2025-11-03T21:31:31.422Z" }, + { url = "https://files.pythonhosted.org/packages/f4/fc/6500eb39f5f76c5e47a398df82e6b535a5e345f839581012a418b16f9cc3/regex-2025.11.3-cp311-cp311-win_arm64.whl", hash = "sha256:1ff0d190c7f68ae7769cd0313fe45820ba07ffebfddfaa89cc1eb70827ba0ddc", size = 270290, upload-time = "2025-11-03T21:31:33.041Z" }, + { url = "https://files.pythonhosted.org/packages/e8/74/18f04cb53e58e3fb107439699bd8375cf5a835eec81084e0bddbd122e4c2/regex-2025.11.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bc8ab71e2e31b16e40868a40a69007bc305e1109bd4658eb6cad007e0bf67c41", size = 489312, upload-time = "2025-11-03T21:31:34.343Z" }, + { url = "https://files.pythonhosted.org/packages/78/3f/37fcdd0d2b1e78909108a876580485ea37c91e1acf66d3bb8e736348f441/regex-2025.11.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:22b29dda7e1f7062a52359fca6e58e548e28c6686f205e780b02ad8ef710de36", size = 291256, upload-time = "2025-11-03T21:31:35.675Z" }, + { url = "https://files.pythonhosted.org/packages/bf/26/0a575f58eb23b7ebd67a45fccbc02ac030b737b896b7e7a909ffe43ffd6a/regex-2025.11.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3a91e4a29938bc1a082cc28fdea44be420bf2bebe2665343029723892eb073e1", size = 288921, upload-time = "2025-11-03T21:31:37.07Z" }, + { url = "https://files.pythonhosted.org/packages/ea/98/6a8dff667d1af907150432cf5abc05a17ccd32c72a3615410d5365ac167a/regex-2025.11.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:08b884f4226602ad40c5d55f52bf91a9df30f513864e0054bad40c0e9cf1afb7", size = 798568, upload-time = "2025-11-03T21:31:38.784Z" }, + { url = "https://files.pythonhosted.org/packages/64/15/92c1db4fa4e12733dd5a526c2dd2b6edcbfe13257e135fc0f6c57f34c173/regex-2025.11.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3e0b11b2b2433d1c39c7c7a30e3f3d0aeeea44c2a8d0bae28f6b95f639927a69", size = 864165, upload-time = "2025-11-03T21:31:40.559Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e7/3ad7da8cdee1ce66c7cd37ab5ab05c463a86ffeb52b1a25fe7bd9293b36c/regex-2025.11.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:87eb52a81ef58c7ba4d45c3ca74e12aa4b4e77816f72ca25258a85b3ea96cb48", size = 912182, upload-time = "2025-11-03T21:31:42.002Z" }, + { url = "https://files.pythonhosted.org/packages/84/bd/9ce9f629fcb714ffc2c3faf62b6766ecb7a585e1e885eb699bcf130a5209/regex-2025.11.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a12ab1f5c29b4e93db518f5e3872116b7e9b1646c9f9f426f777b50d44a09e8c", size = 803501, upload-time = "2025-11-03T21:31:43.815Z" }, + { url = "https://files.pythonhosted.org/packages/7c/0f/8dc2e4349d8e877283e6edd6c12bdcebc20f03744e86f197ab6e4492bf08/regex-2025.11.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7521684c8c7c4f6e88e35ec89680ee1aa8358d3f09d27dfbdf62c446f5d4c695", size = 787842, upload-time = "2025-11-03T21:31:45.353Z" }, + { url = "https://files.pythonhosted.org/packages/f9/73/cff02702960bc185164d5619c0c62a2f598a6abff6695d391b096237d4ab/regex-2025.11.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7fe6e5440584e94cc4b3f5f4d98a25e29ca12dccf8873679a635638349831b98", size = 858519, upload-time = "2025-11-03T21:31:46.814Z" }, + { url = "https://files.pythonhosted.org/packages/61/83/0e8d1ae71e15bc1dc36231c90b46ee35f9d52fab2e226b0e039e7ea9c10a/regex-2025.11.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:8e026094aa12b43f4fd74576714e987803a315c76edb6b098b9809db5de58f74", size = 850611, upload-time = "2025-11-03T21:31:48.289Z" }, + { url = "https://files.pythonhosted.org/packages/c8/f5/70a5cdd781dcfaa12556f2955bf170cd603cb1c96a1827479f8faea2df97/regex-2025.11.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:435bbad13e57eb5606a68443af62bed3556de2f46deb9f7d4237bc2f1c9fb3a0", size = 789759, upload-time = "2025-11-03T21:31:49.759Z" }, + { url = "https://files.pythonhosted.org/packages/59/9b/7c29be7903c318488983e7d97abcf8ebd3830e4c956c4c540005fcfb0462/regex-2025.11.3-cp312-cp312-win32.whl", hash = "sha256:3839967cf4dc4b985e1570fd8d91078f0c519f30491c60f9ac42a8db039be204", size = 266194, upload-time = "2025-11-03T21:31:51.53Z" }, + { url = "https://files.pythonhosted.org/packages/1a/67/3b92df89f179d7c367be654ab5626ae311cb28f7d5c237b6bb976cd5fbbb/regex-2025.11.3-cp312-cp312-win_amd64.whl", hash = "sha256:e721d1b46e25c481dc5ded6f4b3f66c897c58d2e8cfdf77bbced84339108b0b9", size = 277069, upload-time = "2025-11-03T21:31:53.151Z" }, + { url = "https://files.pythonhosted.org/packages/d7/55/85ba4c066fe5094d35b249c3ce8df0ba623cfd35afb22d6764f23a52a1c5/regex-2025.11.3-cp312-cp312-win_arm64.whl", hash = "sha256:64350685ff08b1d3a6fff33f45a9ca183dc1d58bbfe4981604e70ec9801bbc26", size = 270330, upload-time = "2025-11-03T21:31:54.514Z" }, ] [[package]] @@ -5428,52 +5426,52 @@ wheels = [ [[package]] name = "rpds-py" -version = "0.27.1" +version = "0.28.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e9/dd/2c0cbe774744272b0ae725f44032c77bdcab6e8bcf544bffa3b6e70c8dba/rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8", size = 27479, upload-time = "2025-08-27T12:16:36.024Z" } +sdist = { url = "https://files.pythonhosted.org/packages/48/dc/95f074d43452b3ef5d06276696ece4b3b5d696e7c9ad7173c54b1390cd70/rpds_py-0.28.0.tar.gz", hash = "sha256:abd4df20485a0983e2ca334a216249b6186d6e3c1627e106651943dbdb791aea", size = 27419, upload-time = "2025-10-22T22:24:29.327Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/c1/7907329fbef97cbd49db6f7303893bd1dd5a4a3eae415839ffdfb0762cae/rpds_py-0.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881", size = 371063, upload-time = "2025-08-27T12:12:47.856Z" }, - { url = "https://files.pythonhosted.org/packages/11/94/2aab4bc86228bcf7c48760990273653a4900de89c7537ffe1b0d6097ed39/rpds_py-0.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5", size = 353210, upload-time = "2025-08-27T12:12:49.187Z" }, - { url = "https://files.pythonhosted.org/packages/3a/57/f5eb3ecf434342f4f1a46009530e93fd201a0b5b83379034ebdb1d7c1a58/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e", size = 381636, upload-time = "2025-08-27T12:12:50.492Z" }, - { url = "https://files.pythonhosted.org/packages/ae/f4/ef95c5945e2ceb5119571b184dd5a1cc4b8541bbdf67461998cfeac9cb1e/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c", size = 394341, upload-time = "2025-08-27T12:12:52.024Z" }, - { url = "https://files.pythonhosted.org/packages/5a/7e/4bd610754bf492d398b61725eb9598ddd5eb86b07d7d9483dbcd810e20bc/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195", size = 523428, upload-time = "2025-08-27T12:12:53.779Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e5/059b9f65a8c9149361a8b75094864ab83b94718344db511fd6117936ed2a/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52", size = 402923, upload-time = "2025-08-27T12:12:55.15Z" }, - { url = "https://files.pythonhosted.org/packages/f5/48/64cabb7daced2968dd08e8a1b7988bf358d7bd5bcd5dc89a652f4668543c/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed", size = 384094, upload-time = "2025-08-27T12:12:57.194Z" }, - { url = "https://files.pythonhosted.org/packages/ae/e1/dc9094d6ff566bff87add8a510c89b9e158ad2ecd97ee26e677da29a9e1b/rpds_py-0.27.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a", size = 401093, upload-time = "2025-08-27T12:12:58.985Z" }, - { url = "https://files.pythonhosted.org/packages/37/8e/ac8577e3ecdd5593e283d46907d7011618994e1d7ab992711ae0f78b9937/rpds_py-0.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde", size = 417969, upload-time = "2025-08-27T12:13:00.367Z" }, - { url = "https://files.pythonhosted.org/packages/66/6d/87507430a8f74a93556fe55c6485ba9c259949a853ce407b1e23fea5ba31/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21", size = 558302, upload-time = "2025-08-27T12:13:01.737Z" }, - { url = "https://files.pythonhosted.org/packages/3a/bb/1db4781ce1dda3eecc735e3152659a27b90a02ca62bfeea17aee45cc0fbc/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9", size = 589259, upload-time = "2025-08-27T12:13:03.127Z" }, - { url = "https://files.pythonhosted.org/packages/7b/0e/ae1c8943d11a814d01b482e1f8da903f88047a962dff9bbdadf3bd6e6fd1/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948", size = 554983, upload-time = "2025-08-27T12:13:04.516Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d5/0b2a55415931db4f112bdab072443ff76131b5ac4f4dc98d10d2d357eb03/rpds_py-0.27.1-cp311-cp311-win32.whl", hash = "sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39", size = 217154, upload-time = "2025-08-27T12:13:06.278Z" }, - { url = "https://files.pythonhosted.org/packages/24/75/3b7ffe0d50dc86a6a964af0d1cc3a4a2cdf437cb7b099a4747bbb96d1819/rpds_py-0.27.1-cp311-cp311-win_amd64.whl", hash = "sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15", size = 228627, upload-time = "2025-08-27T12:13:07.625Z" }, - { url = "https://files.pythonhosted.org/packages/8d/3f/4fd04c32abc02c710f09a72a30c9a55ea3cc154ef8099078fd50a0596f8e/rpds_py-0.27.1-cp311-cp311-win_arm64.whl", hash = "sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746", size = 220998, upload-time = "2025-08-27T12:13:08.972Z" }, - { url = "https://files.pythonhosted.org/packages/bd/fe/38de28dee5df58b8198c743fe2bea0c785c6d40941b9950bac4cdb71a014/rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90", size = 361887, upload-time = "2025-08-27T12:13:10.233Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/4b6c7eedc7dd90986bf0fab6ea2a091ec11c01b15f8ba0a14d3f80450468/rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5", size = 345795, upload-time = "2025-08-27T12:13:11.65Z" }, - { url = "https://files.pythonhosted.org/packages/6f/0e/e650e1b81922847a09cca820237b0edee69416a01268b7754d506ade11ad/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e", size = 385121, upload-time = "2025-08-27T12:13:13.008Z" }, - { url = "https://files.pythonhosted.org/packages/1b/ea/b306067a712988e2bff00dcc7c8f31d26c29b6d5931b461aa4b60a013e33/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881", size = 398976, upload-time = "2025-08-27T12:13:14.368Z" }, - { url = "https://files.pythonhosted.org/packages/2c/0a/26dc43c8840cb8fe239fe12dbc8d8de40f2365e838f3d395835dde72f0e5/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec", size = 525953, upload-time = "2025-08-27T12:13:15.774Z" }, - { url = "https://files.pythonhosted.org/packages/22/14/c85e8127b573aaf3a0cbd7fbb8c9c99e735a4a02180c84da2a463b766e9e/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb", size = 407915, upload-time = "2025-08-27T12:13:17.379Z" }, - { url = "https://files.pythonhosted.org/packages/ed/7b/8f4fee9ba1fb5ec856eb22d725a4efa3deb47f769597c809e03578b0f9d9/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5", size = 386883, upload-time = "2025-08-27T12:13:18.704Z" }, - { url = "https://files.pythonhosted.org/packages/86/47/28fa6d60f8b74fcdceba81b272f8d9836ac0340570f68f5df6b41838547b/rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a", size = 405699, upload-time = "2025-08-27T12:13:20.089Z" }, - { url = "https://files.pythonhosted.org/packages/d0/fd/c5987b5e054548df56953a21fe2ebed51fc1ec7c8f24fd41c067b68c4a0a/rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444", size = 423713, upload-time = "2025-08-27T12:13:21.436Z" }, - { url = "https://files.pythonhosted.org/packages/ac/ba/3c4978b54a73ed19a7d74531be37a8bcc542d917c770e14d372b8daea186/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a", size = 562324, upload-time = "2025-08-27T12:13:22.789Z" }, - { url = "https://files.pythonhosted.org/packages/b5/6c/6943a91768fec16db09a42b08644b960cff540c66aab89b74be6d4a144ba/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1", size = 593646, upload-time = "2025-08-27T12:13:24.122Z" }, - { url = "https://files.pythonhosted.org/packages/11/73/9d7a8f4be5f4396f011a6bb7a19fe26303a0dac9064462f5651ced2f572f/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998", size = 558137, upload-time = "2025-08-27T12:13:25.557Z" }, - { url = "https://files.pythonhosted.org/packages/6e/96/6772cbfa0e2485bcceef8071de7821f81aeac8bb45fbfd5542a3e8108165/rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39", size = 221343, upload-time = "2025-08-27T12:13:26.967Z" }, - { url = "https://files.pythonhosted.org/packages/67/b6/c82f0faa9af1c6a64669f73a17ee0eeef25aff30bb9a1c318509efe45d84/rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594", size = 232497, upload-time = "2025-08-27T12:13:28.326Z" }, - { url = "https://files.pythonhosted.org/packages/e1/96/2817b44bd2ed11aebacc9251da03689d56109b9aba5e311297b6902136e2/rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502", size = 222790, upload-time = "2025-08-27T12:13:29.71Z" }, - { url = "https://files.pythonhosted.org/packages/0c/ed/e1fba02de17f4f76318b834425257c8ea297e415e12c68b4361f63e8ae92/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df", size = 371402, upload-time = "2025-08-27T12:15:51.561Z" }, - { url = "https://files.pythonhosted.org/packages/af/7c/e16b959b316048b55585a697e94add55a4ae0d984434d279ea83442e460d/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3", size = 354084, upload-time = "2025-08-27T12:15:53.219Z" }, - { url = "https://files.pythonhosted.org/packages/de/c1/ade645f55de76799fdd08682d51ae6724cb46f318573f18be49b1e040428/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9", size = 383090, upload-time = "2025-08-27T12:15:55.158Z" }, - { url = "https://files.pythonhosted.org/packages/1f/27/89070ca9b856e52960da1472efcb6c20ba27cfe902f4f23ed095b9cfc61d/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc", size = 394519, upload-time = "2025-08-27T12:15:57.238Z" }, - { url = "https://files.pythonhosted.org/packages/b3/28/be120586874ef906aa5aeeae95ae8df4184bc757e5b6bd1c729ccff45ed5/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4", size = 523817, upload-time = "2025-08-27T12:15:59.237Z" }, - { url = "https://files.pythonhosted.org/packages/a8/ef/70cc197bc11cfcde02a86f36ac1eed15c56667c2ebddbdb76a47e90306da/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66", size = 403240, upload-time = "2025-08-27T12:16:00.923Z" }, - { url = "https://files.pythonhosted.org/packages/cf/35/46936cca449f7f518f2f4996e0e8344db4b57e2081e752441154089d2a5f/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e", size = 385194, upload-time = "2025-08-27T12:16:02.802Z" }, - { url = "https://files.pythonhosted.org/packages/e1/62/29c0d3e5125c3270b51415af7cbff1ec587379c84f55a5761cc9efa8cd06/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c", size = 402086, upload-time = "2025-08-27T12:16:04.806Z" }, - { url = "https://files.pythonhosted.org/packages/8f/66/03e1087679227785474466fdd04157fb793b3b76e3fcf01cbf4c693c1949/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf", size = 419272, upload-time = "2025-08-27T12:16:06.471Z" }, - { url = "https://files.pythonhosted.org/packages/6a/24/e3e72d265121e00b063aef3e3501e5b2473cf1b23511d56e529531acf01e/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf", size = 560003, upload-time = "2025-08-27T12:16:08.06Z" }, - { url = "https://files.pythonhosted.org/packages/26/ca/f5a344c534214cc2d41118c0699fffbdc2c1bc7046f2a2b9609765ab9c92/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6", size = 590482, upload-time = "2025-08-27T12:16:10.137Z" }, - { url = "https://files.pythonhosted.org/packages/ce/08/4349bdd5c64d9d193c360aa9db89adeee6f6682ab8825dca0a3f535f434f/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a", size = 556523, upload-time = "2025-08-27T12:16:12.188Z" }, + { url = "https://files.pythonhosted.org/packages/a6/34/058d0db5471c6be7bef82487ad5021ff8d1d1d27794be8730aad938649cf/rpds_py-0.28.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:03065002fd2e287725d95fbc69688e0c6daf6c6314ba38bdbaa3895418e09296", size = 362344, upload-time = "2025-10-22T22:21:39.713Z" }, + { url = "https://files.pythonhosted.org/packages/5d/67/9503f0ec8c055a0782880f300c50a2b8e5e72eb1f94dfc2053da527444dd/rpds_py-0.28.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:28ea02215f262b6d078daec0b45344c89e161eab9526b0d898221d96fdda5f27", size = 348440, upload-time = "2025-10-22T22:21:41.056Z" }, + { url = "https://files.pythonhosted.org/packages/68/2e/94223ee9b32332a41d75b6f94b37b4ce3e93878a556fc5f152cbd856a81f/rpds_py-0.28.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25dbade8fbf30bcc551cb352376c0ad64b067e4fc56f90e22ba70c3ce205988c", size = 379068, upload-time = "2025-10-22T22:21:42.593Z" }, + { url = "https://files.pythonhosted.org/packages/b4/25/54fd48f9f680cfc44e6a7f39a5fadf1d4a4a1fd0848076af4a43e79f998c/rpds_py-0.28.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c03002f54cc855860bfdc3442928ffdca9081e73b5b382ed0b9e8efe6e5e205", size = 390518, upload-time = "2025-10-22T22:21:43.998Z" }, + { url = "https://files.pythonhosted.org/packages/1b/85/ac258c9c27f2ccb1bd5d0697e53a82ebcf8088e3186d5d2bf8498ee7ed44/rpds_py-0.28.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9699fa7990368b22032baf2b2dce1f634388e4ffc03dfefaaac79f4695edc95", size = 525319, upload-time = "2025-10-22T22:21:45.645Z" }, + { url = "https://files.pythonhosted.org/packages/40/cb/c6734774789566d46775f193964b76627cd5f42ecf246d257ce84d1912ed/rpds_py-0.28.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9b06fe1a75e05e0713f06ea0c89ecb6452210fd60e2f1b6ddc1067b990e08d9", size = 404896, upload-time = "2025-10-22T22:21:47.544Z" }, + { url = "https://files.pythonhosted.org/packages/1f/53/14e37ce83202c632c89b0691185dca9532288ff9d390eacae3d2ff771bae/rpds_py-0.28.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac9f83e7b326a3f9ec3ef84cda98fb0a74c7159f33e692032233046e7fd15da2", size = 382862, upload-time = "2025-10-22T22:21:49.176Z" }, + { url = "https://files.pythonhosted.org/packages/6a/83/f3642483ca971a54d60caa4449f9d6d4dbb56a53e0072d0deff51b38af74/rpds_py-0.28.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:0d3259ea9ad8743a75a43eb7819324cdab393263c91be86e2d1901ee65c314e0", size = 398848, upload-time = "2025-10-22T22:21:51.024Z" }, + { url = "https://files.pythonhosted.org/packages/44/09/2d9c8b2f88e399b4cfe86efdf2935feaf0394e4f14ab30c6c5945d60af7d/rpds_py-0.28.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a7548b345f66f6695943b4ef6afe33ccd3f1b638bd9afd0f730dd255c249c9e", size = 412030, upload-time = "2025-10-22T22:21:52.665Z" }, + { url = "https://files.pythonhosted.org/packages/dd/f5/e1cec473d4bde6df1fd3738be8e82d64dd0600868e76e92dfeaebbc2d18f/rpds_py-0.28.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c9a40040aa388b037eb39416710fbcce9443498d2eaab0b9b45ae988b53f5c67", size = 559700, upload-time = "2025-10-22T22:21:54.123Z" }, + { url = "https://files.pythonhosted.org/packages/8d/be/73bb241c1649edbf14e98e9e78899c2c5e52bbe47cb64811f44d2cc11808/rpds_py-0.28.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8f60c7ea34e78c199acd0d3cda37a99be2c861dd2b8cf67399784f70c9f8e57d", size = 584581, upload-time = "2025-10-22T22:21:56.102Z" }, + { url = "https://files.pythonhosted.org/packages/9c/9c/ffc6e9218cd1eb5c2c7dbd276c87cd10e8c2232c456b554169eb363381df/rpds_py-0.28.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1571ae4292649100d743b26d5f9c63503bb1fedf538a8f29a98dce2d5ba6b4e6", size = 549981, upload-time = "2025-10-22T22:21:58.253Z" }, + { url = "https://files.pythonhosted.org/packages/5f/50/da8b6d33803a94df0149345ee33e5d91ed4d25fc6517de6a25587eae4133/rpds_py-0.28.0-cp311-cp311-win32.whl", hash = "sha256:5cfa9af45e7c1140af7321fa0bef25b386ee9faa8928c80dc3a5360971a29e8c", size = 214729, upload-time = "2025-10-22T22:21:59.625Z" }, + { url = "https://files.pythonhosted.org/packages/12/fd/b0f48c4c320ee24c8c20df8b44acffb7353991ddf688af01eef5f93d7018/rpds_py-0.28.0-cp311-cp311-win_amd64.whl", hash = "sha256:dd8d86b5d29d1b74100982424ba53e56033dc47720a6de9ba0259cf81d7cecaa", size = 223977, upload-time = "2025-10-22T22:22:01.092Z" }, + { url = "https://files.pythonhosted.org/packages/b4/21/c8e77a2ac66e2ec4e21f18a04b4e9a0417ecf8e61b5eaeaa9360a91713b4/rpds_py-0.28.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e27d3a5709cc2b3e013bf93679a849213c79ae0573f9b894b284b55e729e120", size = 217326, upload-time = "2025-10-22T22:22:02.944Z" }, + { url = "https://files.pythonhosted.org/packages/b8/5c/6c3936495003875fe7b14f90ea812841a08fca50ab26bd840e924097d9c8/rpds_py-0.28.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6b4f28583a4f247ff60cd7bdda83db8c3f5b05a7a82ff20dd4b078571747708f", size = 366439, upload-time = "2025-10-22T22:22:04.525Z" }, + { url = "https://files.pythonhosted.org/packages/56/f9/a0f1ca194c50aa29895b442771f036a25b6c41a35e4f35b1a0ea713bedae/rpds_py-0.28.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d678e91b610c29c4b3d52a2c148b641df2b4676ffe47c59f6388d58b99cdc424", size = 348170, upload-time = "2025-10-22T22:22:06.397Z" }, + { url = "https://files.pythonhosted.org/packages/18/ea/42d243d3a586beb72c77fa5def0487daf827210069a95f36328e869599ea/rpds_py-0.28.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e819e0e37a44a78e1383bf1970076e2ccc4dc8c2bbaa2f9bd1dc987e9afff628", size = 378838, upload-time = "2025-10-22T22:22:07.932Z" }, + { url = "https://files.pythonhosted.org/packages/e7/78/3de32e18a94791af8f33601402d9d4f39613136398658412a4e0b3047327/rpds_py-0.28.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5ee514e0f0523db5d3fb171f397c54875dbbd69760a414dccf9d4d7ad628b5bd", size = 393299, upload-time = "2025-10-22T22:22:09.435Z" }, + { url = "https://files.pythonhosted.org/packages/13/7e/4bdb435afb18acea2eb8a25ad56b956f28de7c59f8a1d32827effa0d4514/rpds_py-0.28.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f3fa06d27fdcee47f07a39e02862da0100cb4982508f5ead53ec533cd5fe55e", size = 518000, upload-time = "2025-10-22T22:22:11.326Z" }, + { url = "https://files.pythonhosted.org/packages/31/d0/5f52a656875cdc60498ab035a7a0ac8f399890cc1ee73ebd567bac4e39ae/rpds_py-0.28.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:46959ef2e64f9e4a41fc89aa20dbca2b85531f9a72c21099a3360f35d10b0d5a", size = 408746, upload-time = "2025-10-22T22:22:13.143Z" }, + { url = "https://files.pythonhosted.org/packages/3e/cd/49ce51767b879cde77e7ad9fae164ea15dce3616fe591d9ea1df51152706/rpds_py-0.28.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8455933b4bcd6e83fde3fefc987a023389c4b13f9a58c8d23e4b3f6d13f78c84", size = 386379, upload-time = "2025-10-22T22:22:14.602Z" }, + { url = "https://files.pythonhosted.org/packages/6a/99/e4e1e1ee93a98f72fc450e36c0e4d99c35370220e815288e3ecd2ec36a2a/rpds_py-0.28.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:ad50614a02c8c2962feebe6012b52f9802deec4263946cddea37aaf28dd25a66", size = 401280, upload-time = "2025-10-22T22:22:16.063Z" }, + { url = "https://files.pythonhosted.org/packages/61/35/e0c6a57488392a8b319d2200d03dad2b29c0db9996f5662c3b02d0b86c02/rpds_py-0.28.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e5deca01b271492553fdb6c7fd974659dce736a15bae5dad7ab8b93555bceb28", size = 412365, upload-time = "2025-10-22T22:22:17.504Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6a/841337980ea253ec797eb084665436007a1aad0faac1ba097fb906c5f69c/rpds_py-0.28.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:735f8495a13159ce6a0d533f01e8674cec0c57038c920495f87dcb20b3ddb48a", size = 559573, upload-time = "2025-10-22T22:22:19.108Z" }, + { url = "https://files.pythonhosted.org/packages/e7/5e/64826ec58afd4c489731f8b00729c5f6afdb86f1df1df60bfede55d650bb/rpds_py-0.28.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:961ca621ff10d198bbe6ba4957decca61aa2a0c56695384c1d6b79bf61436df5", size = 583973, upload-time = "2025-10-22T22:22:20.768Z" }, + { url = "https://files.pythonhosted.org/packages/b6/ee/44d024b4843f8386a4eeaa4c171b3d31d55f7177c415545fd1a24c249b5d/rpds_py-0.28.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2374e16cc9131022e7d9a8f8d65d261d9ba55048c78f3b6e017971a4f5e6353c", size = 553800, upload-time = "2025-10-22T22:22:22.25Z" }, + { url = "https://files.pythonhosted.org/packages/7d/89/33e675dccff11a06d4d85dbb4d1865f878d5020cbb69b2c1e7b2d3f82562/rpds_py-0.28.0-cp312-cp312-win32.whl", hash = "sha256:d15431e334fba488b081d47f30f091e5d03c18527c325386091f31718952fe08", size = 216954, upload-time = "2025-10-22T22:22:24.105Z" }, + { url = "https://files.pythonhosted.org/packages/af/36/45f6ebb3210887e8ee6dbf1bc710ae8400bb417ce165aaf3024b8360d999/rpds_py-0.28.0-cp312-cp312-win_amd64.whl", hash = "sha256:a410542d61fc54710f750d3764380b53bf09e8c4edbf2f9141a82aa774a04f7c", size = 227844, upload-time = "2025-10-22T22:22:25.551Z" }, + { url = "https://files.pythonhosted.org/packages/57/91/f3fb250d7e73de71080f9a221d19bd6a1c1eb0d12a1ea26513f6c1052ad6/rpds_py-0.28.0-cp312-cp312-win_arm64.whl", hash = "sha256:1f0cfd1c69e2d14f8c892b893997fa9a60d890a0c8a603e88dca4955f26d1edd", size = 217624, upload-time = "2025-10-22T22:22:26.914Z" }, + { url = "https://files.pythonhosted.org/packages/ae/bc/b43f2ea505f28119bd551ae75f70be0c803d2dbcd37c1b3734909e40620b/rpds_py-0.28.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f5e7101145427087e493b9c9b959da68d357c28c562792300dd21a095118ed16", size = 363913, upload-time = "2025-10-22T22:24:07.129Z" }, + { url = "https://files.pythonhosted.org/packages/28/f2/db318195d324c89a2c57dc5195058cbadd71b20d220685c5bd1da79ee7fe/rpds_py-0.28.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:31eb671150b9c62409a888850aaa8e6533635704fe2b78335f9aaf7ff81eec4d", size = 350452, upload-time = "2025-10-22T22:24:08.754Z" }, + { url = "https://files.pythonhosted.org/packages/ae/f2/1391c819b8573a4898cedd6b6c5ec5bc370ce59e5d6bdcebe3c9c1db4588/rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48b55c1f64482f7d8bd39942f376bfdf2f6aec637ee8c805b5041e14eeb771db", size = 380957, upload-time = "2025-10-22T22:24:10.826Z" }, + { url = "https://files.pythonhosted.org/packages/5a/5c/e5de68ee7eb7248fce93269833d1b329a196d736aefb1a7481d1e99d1222/rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:24743a7b372e9a76171f6b69c01aedf927e8ac3e16c474d9fe20d552a8cb45c7", size = 391919, upload-time = "2025-10-22T22:24:12.559Z" }, + { url = "https://files.pythonhosted.org/packages/fb/4f/2376336112cbfeb122fd435d608ad8d5041b3aed176f85a3cb32c262eb80/rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:389c29045ee8bbb1627ea190b4976a310a295559eaf9f1464a1a6f2bf84dde78", size = 528541, upload-time = "2025-10-22T22:24:14.197Z" }, + { url = "https://files.pythonhosted.org/packages/68/53/5ae232e795853dd20da7225c5dd13a09c0a905b1a655e92bdf8d78a99fd9/rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23690b5827e643150cf7b49569679ec13fe9a610a15949ed48b85eb7f98f34ec", size = 405629, upload-time = "2025-10-22T22:24:16.001Z" }, + { url = "https://files.pythonhosted.org/packages/b9/2d/351a3b852b683ca9b6b8b38ed9efb2347596973849ba6c3a0e99877c10aa/rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f0c9266c26580e7243ad0d72fc3e01d6b33866cfab5084a6da7576bcf1c4f72", size = 384123, upload-time = "2025-10-22T22:24:17.585Z" }, + { url = "https://files.pythonhosted.org/packages/e0/15/870804daa00202728cc91cb8e2385fa9f1f4eb49857c49cfce89e304eae6/rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4c6c4db5d73d179746951486df97fd25e92396be07fc29ee8ff9a8f5afbdfb27", size = 400923, upload-time = "2025-10-22T22:24:19.512Z" }, + { url = "https://files.pythonhosted.org/packages/53/25/3706b83c125fa2a0bccceac951de3f76631f6bd0ee4d02a0ed780712ef1b/rpds_py-0.28.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a3b695a8fa799dd2cfdb4804b37096c5f6dba1ac7f48a7fbf6d0485bcd060316", size = 413767, upload-time = "2025-10-22T22:24:21.316Z" }, + { url = "https://files.pythonhosted.org/packages/ef/f9/ce43dbe62767432273ed2584cef71fef8411bddfb64125d4c19128015018/rpds_py-0.28.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:6aa1bfce3f83baf00d9c5fcdbba93a3ab79958b4c7d7d1f55e7fe68c20e63912", size = 561530, upload-time = "2025-10-22T22:24:22.958Z" }, + { url = "https://files.pythonhosted.org/packages/46/c9/ffe77999ed8f81e30713dd38fd9ecaa161f28ec48bb80fa1cd9118399c27/rpds_py-0.28.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:7b0f9dceb221792b3ee6acb5438eb1f02b0cb2c247796a72b016dcc92c6de829", size = 585453, upload-time = "2025-10-22T22:24:24.779Z" }, + { url = "https://files.pythonhosted.org/packages/ed/d2/4a73b18821fd4669762c855fd1f4e80ceb66fb72d71162d14da58444a763/rpds_py-0.28.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5d0145edba8abd3db0ab22b5300c99dc152f5c9021fab861be0f0544dc3cbc5f", size = 552199, upload-time = "2025-10-22T22:24:26.54Z" }, ] [[package]] @@ -5490,28 +5488,28 @@ wheels = [ [[package]] name = "ruff" -version = "0.14.0" +version = "0.14.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/41/b9/9bd84453ed6dd04688de9b3f3a4146a1698e8faae2ceeccce4e14c67ae17/ruff-0.14.0.tar.gz", hash = "sha256:62ec8969b7510f77945df916de15da55311fade8d6050995ff7f680afe582c57", size = 5452071, upload-time = "2025-10-07T18:21:55.763Z" } +sdist = { url = "https://files.pythonhosted.org/packages/df/55/cccfca45157a2031dcbb5a462a67f7cf27f8b37d4b3b1cd7438f0f5c1df6/ruff-0.14.4.tar.gz", hash = "sha256:f459a49fe1085a749f15414ca76f61595f1a2cc8778ed7c279b6ca2e1fd19df3", size = 5587844, upload-time = "2025-11-06T22:07:45.033Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/4e/79d463a5f80654e93fa653ebfb98e0becc3f0e7cf6219c9ddedf1e197072/ruff-0.14.0-py3-none-linux_armv6l.whl", hash = "sha256:58e15bffa7054299becf4bab8a1187062c6f8cafbe9f6e39e0d5aface455d6b3", size = 12494532, upload-time = "2025-10-07T18:21:00.373Z" }, - { url = "https://files.pythonhosted.org/packages/ee/40/e2392f445ed8e02aa6105d49db4bfff01957379064c30f4811c3bf38aece/ruff-0.14.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:838d1b065f4df676b7c9957992f2304e41ead7a50a568185efd404297d5701e8", size = 13160768, upload-time = "2025-10-07T18:21:04.73Z" }, - { url = "https://files.pythonhosted.org/packages/75/da/2a656ea7c6b9bd14c7209918268dd40e1e6cea65f4bb9880eaaa43b055cd/ruff-0.14.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:703799d059ba50f745605b04638fa7e9682cc3da084b2092feee63500ff3d9b8", size = 12363376, upload-time = "2025-10-07T18:21:07.833Z" }, - { url = "https://files.pythonhosted.org/packages/42/e2/1ffef5a1875add82416ff388fcb7ea8b22a53be67a638487937aea81af27/ruff-0.14.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ba9a8925e90f861502f7d974cc60e18ca29c72bb0ee8bfeabb6ade35a3abde7", size = 12608055, upload-time = "2025-10-07T18:21:10.72Z" }, - { url = "https://files.pythonhosted.org/packages/4a/32/986725199d7cee510d9f1dfdf95bf1efc5fa9dd714d0d85c1fb1f6be3bc3/ruff-0.14.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e41f785498bd200ffc276eb9e1570c019c1d907b07cfb081092c8ad51975bbe7", size = 12318544, upload-time = "2025-10-07T18:21:13.741Z" }, - { url = "https://files.pythonhosted.org/packages/9a/ed/4969cefd53315164c94eaf4da7cfba1f267dc275b0abdd593d11c90829a3/ruff-0.14.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30a58c087aef4584c193aebf2700f0fbcfc1e77b89c7385e3139956fa90434e2", size = 14001280, upload-time = "2025-10-07T18:21:16.411Z" }, - { url = "https://files.pythonhosted.org/packages/ab/ad/96c1fc9f8854c37681c9613d825925c7f24ca1acfc62a4eb3896b50bacd2/ruff-0.14.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:f8d07350bc7af0a5ce8812b7d5c1a7293cf02476752f23fdfc500d24b79b783c", size = 15027286, upload-time = "2025-10-07T18:21:19.577Z" }, - { url = "https://files.pythonhosted.org/packages/b3/00/1426978f97df4fe331074baf69615f579dc4e7c37bb4c6f57c2aad80c87f/ruff-0.14.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eec3bbbf3a7d5482b5c1f42d5fc972774d71d107d447919fca620b0be3e3b75e", size = 14451506, upload-time = "2025-10-07T18:21:22.779Z" }, - { url = "https://files.pythonhosted.org/packages/58/d5/9c1cea6e493c0cf0647674cca26b579ea9d2a213b74b5c195fbeb9678e15/ruff-0.14.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16b68e183a0e28e5c176d51004aaa40559e8f90065a10a559176713fcf435206", size = 13437384, upload-time = "2025-10-07T18:21:25.758Z" }, - { url = "https://files.pythonhosted.org/packages/29/b4/4cd6a4331e999fc05d9d77729c95503f99eae3ba1160469f2b64866964e3/ruff-0.14.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb732d17db2e945cfcbbc52af0143eda1da36ca8ae25083dd4f66f1542fdf82e", size = 13447976, upload-time = "2025-10-07T18:21:28.83Z" }, - { url = "https://files.pythonhosted.org/packages/3b/c0/ac42f546d07e4f49f62332576cb845d45c67cf5610d1851254e341d563b6/ruff-0.14.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:c958f66ab884b7873e72df38dcabee03d556a8f2ee1b8538ee1c2bbd619883dd", size = 13682850, upload-time = "2025-10-07T18:21:31.842Z" }, - { url = "https://files.pythonhosted.org/packages/5f/c4/4b0c9bcadd45b4c29fe1af9c5d1dc0ca87b4021665dfbe1c4688d407aa20/ruff-0.14.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:7eb0499a2e01f6e0c285afc5bac43ab380cbfc17cd43a2e1dd10ec97d6f2c42d", size = 12449825, upload-time = "2025-10-07T18:21:35.074Z" }, - { url = "https://files.pythonhosted.org/packages/4b/a8/e2e76288e6c16540fa820d148d83e55f15e994d852485f221b9524514730/ruff-0.14.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:4c63b2d99fafa05efca0ab198fd48fa6030d57e4423df3f18e03aa62518c565f", size = 12272599, upload-time = "2025-10-07T18:21:38.08Z" }, - { url = "https://files.pythonhosted.org/packages/18/14/e2815d8eff847391af632b22422b8207704222ff575dec8d044f9ab779b2/ruff-0.14.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:668fce701b7a222f3f5327f86909db2bbe99c30877c8001ff934c5413812ac02", size = 13193828, upload-time = "2025-10-07T18:21:41.216Z" }, - { url = "https://files.pythonhosted.org/packages/44/c6/61ccc2987cf0aecc588ff8f3212dea64840770e60d78f5606cd7dc34de32/ruff-0.14.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a86bf575e05cb68dcb34e4c7dfe1064d44d3f0c04bbc0491949092192b515296", size = 13628617, upload-time = "2025-10-07T18:21:44.04Z" }, - { url = "https://files.pythonhosted.org/packages/73/e6/03b882225a1b0627e75339b420883dc3c90707a8917d2284abef7a58d317/ruff-0.14.0-py3-none-win32.whl", hash = "sha256:7450a243d7125d1c032cb4b93d9625dea46c8c42b4f06c6b709baac168e10543", size = 12367872, upload-time = "2025-10-07T18:21:46.67Z" }, - { url = "https://files.pythonhosted.org/packages/41/77/56cf9cf01ea0bfcc662de72540812e5ba8e9563f33ef3d37ab2174892c47/ruff-0.14.0-py3-none-win_amd64.whl", hash = "sha256:ea95da28cd874c4d9c922b39381cbd69cb7e7b49c21b8152b014bd4f52acddc2", size = 13464628, upload-time = "2025-10-07T18:21:50.318Z" }, - { url = "https://files.pythonhosted.org/packages/c6/2a/65880dfd0e13f7f13a775998f34703674a4554906167dce02daf7865b954/ruff-0.14.0-py3-none-win_arm64.whl", hash = "sha256:f42c9495f5c13ff841b1da4cb3c2a42075409592825dada7c5885c2c844ac730", size = 12565142, upload-time = "2025-10-07T18:21:53.577Z" }, + { url = "https://files.pythonhosted.org/packages/17/b9/67240254166ae1eaa38dec32265e9153ac53645a6c6670ed36ad00722af8/ruff-0.14.4-py3-none-linux_armv6l.whl", hash = "sha256:e6604613ffbcf2297cd5dcba0e0ac9bd0c11dc026442dfbb614504e87c349518", size = 12606781, upload-time = "2025-11-06T22:07:01.841Z" }, + { url = "https://files.pythonhosted.org/packages/46/c8/09b3ab245d8652eafe5256ab59718641429f68681ee713ff06c5c549f156/ruff-0.14.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:d99c0b52b6f0598acede45ee78288e5e9b4409d1ce7f661f0fa36d4cbeadf9a4", size = 12946765, upload-time = "2025-11-06T22:07:05.858Z" }, + { url = "https://files.pythonhosted.org/packages/14/bb/1564b000219144bf5eed2359edc94c3590dd49d510751dad26202c18a17d/ruff-0.14.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:9358d490ec030f1b51d048a7fd6ead418ed0826daf6149e95e30aa67c168af33", size = 11928120, upload-time = "2025-11-06T22:07:08.023Z" }, + { url = "https://files.pythonhosted.org/packages/a3/92/d5f1770e9988cc0742fefaa351e840d9aef04ec24ae1be36f333f96d5704/ruff-0.14.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81b40d27924f1f02dfa827b9c0712a13c0e4b108421665322218fc38caf615c2", size = 12370877, upload-time = "2025-11-06T22:07:10.015Z" }, + { url = "https://files.pythonhosted.org/packages/e2/29/e9282efa55f1973d109faf839a63235575519c8ad278cc87a182a366810e/ruff-0.14.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f5e649052a294fe00818650712083cddc6cc02744afaf37202c65df9ea52efa5", size = 12408538, upload-time = "2025-11-06T22:07:13.085Z" }, + { url = "https://files.pythonhosted.org/packages/8e/01/930ed6ecfce130144b32d77d8d69f5c610e6d23e6857927150adf5d7379a/ruff-0.14.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa082a8f878deeba955531f975881828fd6afd90dfa757c2b0808aadb437136e", size = 13141942, upload-time = "2025-11-06T22:07:15.386Z" }, + { url = "https://files.pythonhosted.org/packages/6a/46/a9c89b42b231a9f487233f17a89cbef9d5acd538d9488687a02ad288fa6b/ruff-0.14.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1043c6811c2419e39011890f14d0a30470f19d47d197c4858b2787dfa698f6c8", size = 14544306, upload-time = "2025-11-06T22:07:17.631Z" }, + { url = "https://files.pythonhosted.org/packages/78/96/9c6cf86491f2a6d52758b830b89b78c2ae61e8ca66b86bf5a20af73d20e6/ruff-0.14.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a9f3a936ac27fb7c2a93e4f4b943a662775879ac579a433291a6f69428722649", size = 14210427, upload-time = "2025-11-06T22:07:19.832Z" }, + { url = "https://files.pythonhosted.org/packages/71/f4/0666fe7769a54f63e66404e8ff698de1dcde733e12e2fd1c9c6efb689cb5/ruff-0.14.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:95643ffd209ce78bc113266b88fba3d39e0461f0cbc8b55fb92505030fb4a850", size = 13658488, upload-time = "2025-11-06T22:07:22.32Z" }, + { url = "https://files.pythonhosted.org/packages/ee/79/6ad4dda2cfd55e41ac9ed6d73ef9ab9475b1eef69f3a85957210c74ba12c/ruff-0.14.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:456daa2fa1021bc86ca857f43fe29d5d8b3f0e55e9f90c58c317c1dcc2afc7b5", size = 13354908, upload-time = "2025-11-06T22:07:24.347Z" }, + { url = "https://files.pythonhosted.org/packages/b5/60/f0b6990f740bb15c1588601d19d21bcc1bd5de4330a07222041678a8e04f/ruff-0.14.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:f911bba769e4a9f51af6e70037bb72b70b45a16db5ce73e1f72aefe6f6d62132", size = 13587803, upload-time = "2025-11-06T22:07:26.327Z" }, + { url = "https://files.pythonhosted.org/packages/c9/da/eaaada586f80068728338e0ef7f29ab3e4a08a692f92eb901a4f06bbff24/ruff-0.14.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:76158a7369b3979fa878612c623a7e5430c18b2fd1c73b214945c2d06337db67", size = 12279654, upload-time = "2025-11-06T22:07:28.46Z" }, + { url = "https://files.pythonhosted.org/packages/66/d4/b1d0e82cf9bf8aed10a6d45be47b3f402730aa2c438164424783ac88c0ed/ruff-0.14.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:f3b8f3b442d2b14c246e7aeca2e75915159e06a3540e2f4bed9f50d062d24469", size = 12357520, upload-time = "2025-11-06T22:07:31.468Z" }, + { url = "https://files.pythonhosted.org/packages/04/f4/53e2b42cc82804617e5c7950b7079d79996c27e99c4652131c6a1100657f/ruff-0.14.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:c62da9a06779deecf4d17ed04939ae8b31b517643b26370c3be1d26f3ef7dbde", size = 12719431, upload-time = "2025-11-06T22:07:33.831Z" }, + { url = "https://files.pythonhosted.org/packages/a2/94/80e3d74ed9a72d64e94a7b7706b1c1ebaa315ef2076fd33581f6a1cd2f95/ruff-0.14.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:5a443a83a1506c684e98acb8cb55abaf3ef725078be40237463dae4463366349", size = 13464394, upload-time = "2025-11-06T22:07:35.905Z" }, + { url = "https://files.pythonhosted.org/packages/54/1a/a49f071f04c42345c793d22f6cf5e0920095e286119ee53a64a3a3004825/ruff-0.14.4-py3-none-win32.whl", hash = "sha256:643b69cb63cd996f1fc7229da726d07ac307eae442dd8974dbc7cf22c1e18fff", size = 12493429, upload-time = "2025-11-06T22:07:38.43Z" }, + { url = "https://files.pythonhosted.org/packages/bc/22/e58c43e641145a2b670328fb98bc384e20679b5774258b1e540207580266/ruff-0.14.4-py3-none-win_amd64.whl", hash = "sha256:26673da283b96fe35fa0c939bf8411abec47111644aa9f7cfbd3c573fb125d2c", size = 13635380, upload-time = "2025-11-06T22:07:40.496Z" }, + { url = "https://files.pythonhosted.org/packages/30/bd/4168a751ddbbf43e86544b4de8b5c3b7be8d7167a2a5cb977d274e04f0a1/ruff-0.14.4-py3-none-win_arm64.whl", hash = "sha256:dd09c292479596b0e6fec8cd95c65c3a6dc68e9ad17b8f2382130f87ff6a75bb", size = 12663065, upload-time = "2025-11-06T22:07:42.603Z" }, ] [[package]] @@ -5724,11 +5722,11 @@ wheels = [ [[package]] name = "sqlglot" -version = "26.33.0" +version = "27.29.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/25/9d/fcd59b4612d5ad1e2257c67c478107f073b19e1097d3bfde2fb517884416/sqlglot-26.33.0.tar.gz", hash = "sha256:2817278779fa51d6def43aa0d70690b93a25c83eb18ec97130fdaf707abc0d73", size = 5353340, upload-time = "2025-07-01T13:09:06.311Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d1/50/766692a83468adb1bde9e09ea524a01719912f6bc4fdb47ec18368320f6e/sqlglot-27.29.0.tar.gz", hash = "sha256:2270899694663acef94fa93497971837e6fadd712f4a98b32aee1e980bc82722", size = 5503507, upload-time = "2025-10-29T13:50:24.594Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/8d/f1d9cb5b18e06aa45689fbeaaea6ebab66d5f01d1e65029a8f7657c06be5/sqlglot-26.33.0-py3-none-any.whl", hash = "sha256:031cee20c0c796a83d26d079a47fdce667604df430598c7eabfa4e4dfd147033", size = 477610, upload-time = "2025-07-01T13:09:03.926Z" }, + { url = "https://files.pythonhosted.org/packages/9b/70/20c1912bc0bfebf516d59d618209443b136c58a7cff141afa7cf30969988/sqlglot-27.29.0-py3-none-any.whl", hash = "sha256:9a5ea8ac61826a7763de10cad45a35f0aa9bfcf7b96ee74afb2314de9089e1cb", size = 526060, upload-time = "2025-10-29T13:50:22.061Z" }, ] [[package]] @@ -6070,32 +6068,32 @@ wheels = [ [[package]] name = "ty" -version = "0.0.1a22" +version = "0.0.1a26" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/87/eab73cdc990d1141b60237379975efc0e913bfa0d19083daab0f497444a6/ty-0.0.1a22.tar.gz", hash = "sha256:b20ec5362830a1e9e05654c15e88607fdbb45325ec130a9a364c6dd412ecbf55", size = 4312182, upload-time = "2025-10-10T13:07:15.88Z" } +sdist = { url = "https://files.pythonhosted.org/packages/39/39/b4b4ecb6ca6d7e937fa56f0b92a8f48d7719af8fe55bdbf667638e9f93e2/ty-0.0.1a26.tar.gz", hash = "sha256:65143f8efeb2da1644821b710bf6b702a31ddcf60a639d5a576db08bded91db4", size = 4432154, upload-time = "2025-11-10T18:02:30.142Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/30/83e2dbfbc70de8a1932b19daf05ce803d7d76cdc6251de1519a49cf1c27d/ty-0.0.1a22-py3-none-linux_armv6l.whl", hash = "sha256:6efba0c777881d2d072fa7375a64ad20357e825eff2a0b6ff9ec80399a04253b", size = 8581795, upload-time = "2025-10-10T13:06:44.396Z" }, - { url = "https://files.pythonhosted.org/packages/d7/8c/5193534fc4a3569f517408828d077b26d6280fe8c2dd0bdc63db4403dcdb/ty-0.0.1a22-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:2ada020eebe1b44403affdf45cd5c8d3fb8312c3e80469d795690093c0921f55", size = 8682602, upload-time = "2025-10-10T13:06:46.44Z" }, - { url = "https://files.pythonhosted.org/packages/22/4a/7ba53493bf37b61d3e0dfe6df910e6bc74c40d16c3effd84e15c0863d34e/ty-0.0.1a22-py3-none-macosx_11_0_arm64.whl", hash = "sha256:ed4f11f1a5824ea10d3e46b1990d092c3f341b1d492c357d23bed2ac347fd253", size = 8278839, upload-time = "2025-10-10T13:06:48.688Z" }, - { url = "https://files.pythonhosted.org/packages/52/0a/d9862c41b9615de56d2158bfbb5177dbf5a65e94922d3dd13855f48cb91b/ty-0.0.1a22-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56f48d8f94292909d596dbeb56ff7f9f070bd316aa628b45c02ca2b2f5797f31", size = 8421483, upload-time = "2025-10-10T13:06:50.75Z" }, - { url = "https://files.pythonhosted.org/packages/a5/cb/3ebe0e45b80724d4c2f849fdf304179727fd06df7fee7cd12fe6c3efe49d/ty-0.0.1a22-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:733e9ac22885b6574de26bdbae439c960a06acc825a938d3780c9d498bb65339", size = 8419225, upload-time = "2025-10-10T13:06:52.533Z" }, - { url = "https://files.pythonhosted.org/packages/4f/b5/da65f3f8ad31d881ca9987a3f6f26069a0cc649c9354adb7453ca62116bb/ty-0.0.1a22-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5135d662484e56809c77b3343614005585caadaa5c1cf643ed6a09303497652b", size = 9352336, upload-time = "2025-10-10T13:06:54.476Z" }, - { url = "https://files.pythonhosted.org/packages/a3/24/9c46f2eb16734ab0fcf3291486b1c5c528a1569f94541dc1f19f97dd2a5b/ty-0.0.1a22-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:87f297f99a98154d33a3f21991979418c65d8bf480f6a1bad1e54d46d2dc7df7", size = 9857840, upload-time = "2025-10-10T13:06:56.514Z" }, - { url = "https://files.pythonhosted.org/packages/d8/ae/930c94bbbe5c049eae5355a197c39522844f55c7ab7fccd0ba061f618541/ty-0.0.1a22-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3310217eaa4dccf20b7336fcbeb072097addc6fde0c9d3f791dea437af0aa6dc", size = 9452611, upload-time = "2025-10-10T13:06:58.154Z" }, - { url = "https://files.pythonhosted.org/packages/a2/80/d8f594438465c352cf0ebd4072f5ca3be2871153a3cd279ed2f35ecd487c/ty-0.0.1a22-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b032e81012bf5228fd65f01b50e29eb409534b6aac28ee5c48ee3b7b860ddf", size = 9214875, upload-time = "2025-10-10T13:06:59.861Z" }, - { url = "https://files.pythonhosted.org/packages/fd/07/f852fb20ac27707de495c39a02aeb056e3368833b7e12888d43b1f61594d/ty-0.0.1a22-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a3ffda8149cab0000a21e7a078142073e27a1a9ac03b9a0837aa2f53d1fbebcb", size = 8906715, upload-time = "2025-10-10T13:07:01.926Z" }, - { url = "https://files.pythonhosted.org/packages/40/4d/0e0b85b4179891cc3067a6e717f5161921c07873a4f545963fdf1dd3619c/ty-0.0.1a22-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:afa512e7dc78f0cf0b55f87394968ba59c46993c67bc0ef295962144fea85b12", size = 8350873, upload-time = "2025-10-10T13:07:03.999Z" }, - { url = "https://files.pythonhosted.org/packages/a1/1f/e70c63e12b4a0d97d4fd6f872dd199113666ad1b236e18838fa5e5d5502d/ty-0.0.1a22-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:069cdbbea6025f7ebbb5e9043c8d0daf760358df46df8304ef5ca5bb3e320aef", size = 8442568, upload-time = "2025-10-10T13:07:05.745Z" }, - { url = "https://files.pythonhosted.org/packages/de/3b/55518906cb3598f2b99ff1e86c838d77d006cab70cdd2a0a625d02ccb52c/ty-0.0.1a22-py3-none-musllinux_1_2_i686.whl", hash = "sha256:67d31d902e6fd67a4b3523604f635e71d2ec55acfb9118f984600584bfe0ff2a", size = 8896775, upload-time = "2025-10-10T13:07:08.02Z" }, - { url = "https://files.pythonhosted.org/packages/c3/ea/60c654c27931bf84fa9cb463a4c4c49e8869c052fa607a6e930be717b619/ty-0.0.1a22-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f9e154f262162e6f76b01f318e469ac6c22ffce22b010c396ed34e81d8369821", size = 9054544, upload-time = "2025-10-10T13:07:09.675Z" }, - { url = "https://files.pythonhosted.org/packages/6c/60/9a6d5530d6829ccf656e6ae0fb13d70a4e2514f4fb8910266ebd54286620/ty-0.0.1a22-py3-none-win32.whl", hash = "sha256:37525433ca7b02a8fca4b8fa9dcde818bf3a413b539b9dbc8f7b39d124eb7c49", size = 8165703, upload-time = "2025-10-10T13:07:11.378Z" }, - { url = "https://files.pythonhosted.org/packages/14/9c/ac08c832643850d4e18cbc959abc69cd51d531fe11bdb691098b3cf2f562/ty-0.0.1a22-py3-none-win_amd64.whl", hash = "sha256:75d21cdeba8bcef247af89518d7ce98079cac4a55c4160cb76682ea40a18b92c", size = 8828319, upload-time = "2025-10-10T13:07:12.815Z" }, - { url = "https://files.pythonhosted.org/packages/22/df/38068fc44e3cfb455aeb41d0ff1850a4d3c9988010466d4a8d19860b8b9a/ty-0.0.1a22-py3-none-win_arm64.whl", hash = "sha256:1c7f040fe311e9696917417434c2a0e58402235be842c508002c6a2eff1398b0", size = 8367136, upload-time = "2025-10-10T13:07:14.518Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6a/661833ecacc4d994f7e30a7f1307bfd3a4a91392a6b03fb6a018723e75b8/ty-0.0.1a26-py3-none-linux_armv6l.whl", hash = "sha256:09208dca99bb548e9200136d4d42618476bfe1f4d2066511f2c8e2e4dfeced5e", size = 9173869, upload-time = "2025-11-10T18:01:46.012Z" }, + { url = "https://files.pythonhosted.org/packages/66/a8/32ea50f064342de391a7267f84349287e2f1c2eb0ad4811d6110916179d6/ty-0.0.1a26-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:91d12b66c91a1b82e698a2aa73fe043a1a9da83ff0dfd60b970500bee0963b91", size = 8973420, upload-time = "2025-11-10T18:01:49.32Z" }, + { url = "https://files.pythonhosted.org/packages/d1/f6/6659d55940cd5158a6740ae46a65be84a7ee9167738033a9b1259c36eef5/ty-0.0.1a26-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c5bc6dfcea5477c81ad01d6a29ebc9bfcbdb21c34664f79c9e1b84be7aa8f289", size = 8528888, upload-time = "2025-11-10T18:01:51.511Z" }, + { url = "https://files.pythonhosted.org/packages/79/c9/4cbe7295013cc412b4f100b509aaa21982c08c59764a2efa537ead049345/ty-0.0.1a26-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40e5d15635e9918924138e8d3fb1cbf80822dfb8dc36ea8f3e72df598c0c4bea", size = 8801867, upload-time = "2025-11-10T18:01:53.888Z" }, + { url = "https://files.pythonhosted.org/packages/ed/b3/25099b219a6444c4b29f175784a275510c1cd85a23a926d687ab56915027/ty-0.0.1a26-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:86dc147ed0790c7c8fd3f0d6c16c3c5135b01e99c440e89c6ca1e0e592bb6682", size = 8975519, upload-time = "2025-11-10T18:01:56.231Z" }, + { url = "https://files.pythonhosted.org/packages/73/3e/3ad570f4f592cb1d11982dd2c426c90d2aa9f3d38bf77a7e2ce8aa614302/ty-0.0.1a26-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbe0e07c9d5e624edfc79a468f2ef191f9435581546a5bb6b92713ddc86ad4a6", size = 9331932, upload-time = "2025-11-10T18:01:58.476Z" }, + { url = "https://files.pythonhosted.org/packages/04/fa/62c72eead0302787f9cc0d613fc671107afeecdaf76ebb04db8f91bb9f7e/ty-0.0.1a26-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:0dcebbfe9f24b43d98a078f4a41321ae7b08bea40f5c27d81394b3f54e9f7fb5", size = 9921353, upload-time = "2025-11-10T18:02:00.749Z" }, + { url = "https://files.pythonhosted.org/packages/6c/1f/3b329c4b60d878704e09eb9d05467f911f188e699961c044b75932893e0a/ty-0.0.1a26-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0901b75afc7738224ffc98bbc8ea03a20f167a2a83a4b23a6550115e8b3ddbc6", size = 9700800, upload-time = "2025-11-10T18:02:03.544Z" }, + { url = "https://files.pythonhosted.org/packages/92/24/13fcba20dd86a7c3f83c814279aa3eb6a29c5f1b38a3b3a4a0fd22159189/ty-0.0.1a26-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4788f34d384c132977958d76fef7f274f8d181b22e33933c4d16cff2bb5ca3b9", size = 9728289, upload-time = "2025-11-10T18:02:06.386Z" }, + { url = "https://files.pythonhosted.org/packages/40/7a/798894ff0b948425570b969be35e672693beeb6b852815b7340bc8de1575/ty-0.0.1a26-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b98851c11c560ce63cd972ed9728aa079d9cf40483f2cdcf3626a55849bfe107", size = 9279735, upload-time = "2025-11-10T18:02:09.425Z" }, + { url = "https://files.pythonhosted.org/packages/1a/54/71261cc1b8dc7d3c4ad92a83b4d1681f5cb7ea5965ebcbc53311ae8c6424/ty-0.0.1a26-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:c20b4625a20059adecd86fe2c4df87cd6115fea28caee45d3bdcf8fb83d29510", size = 8767428, upload-time = "2025-11-10T18:02:11.956Z" }, + { url = "https://files.pythonhosted.org/packages/8e/07/b248b73a640badba2b301e6845699b7dd241f40a321b9b1bce684d440f70/ty-0.0.1a26-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d9909e96276f8d16382d285db92ae902174cae842aa953003ec0c06642db2f8a", size = 9009170, upload-time = "2025-11-10T18:02:14.878Z" }, + { url = "https://files.pythonhosted.org/packages/f8/35/ec8353f2bb7fd2f41bca6070b29ecb58e2de9af043e649678b8c132d5439/ty-0.0.1a26-py3-none-musllinux_1_2_i686.whl", hash = "sha256:a76d649ceefe9baa9bbae97d217bee076fd8eeb2a961f66f1dff73cc70af4ac8", size = 9119215, upload-time = "2025-11-10T18:02:18.329Z" }, + { url = "https://files.pythonhosted.org/packages/70/48/db49fe1b7e66edf90dc285869043f99c12aacf7a99c36ee760e297bac6d5/ty-0.0.1a26-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a0ee0f6366bcf70fae114e714d45335cacc8daa936037441e02998a9110b7a29", size = 9398655, upload-time = "2025-11-10T18:02:21.031Z" }, + { url = "https://files.pythonhosted.org/packages/10/f8/d869492bdbb21ae8cf4c99b02f20812bbbf49aa187cfeb387dfaa03036a8/ty-0.0.1a26-py3-none-win32.whl", hash = "sha256:86689b90024810cac7750bf0c6e1652e4b4175a9de7b82b8b1583202aeb47287", size = 8645669, upload-time = "2025-11-10T18:02:23.23Z" }, + { url = "https://files.pythonhosted.org/packages/b4/18/8a907575d2b335afee7556cb92233ebb5efcefe17752fc9dcab21cffb23b/ty-0.0.1a26-py3-none-win_amd64.whl", hash = "sha256:829e6e6dbd7d9d370f97b2398b4804552554bdcc2d298114fed5e2ea06cbc05c", size = 9442975, upload-time = "2025-11-10T18:02:25.68Z" }, + { url = "https://files.pythonhosted.org/packages/e9/22/af92dcfdd84b78dd97ac6b7154d6a763781f04a400140444885c297cc213/ty-0.0.1a26-py3-none-win_arm64.whl", hash = "sha256:b8f431c784d4cf5b4195a3521b2eca9c15902f239b91154cb920da33f943c62b", size = 8958958, upload-time = "2025-11-10T18:02:28.071Z" }, ] [[package]] name = "typer" -version = "0.19.2" +version = "0.20.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -6103,9 +6101,9 @@ dependencies = [ { name = "shellingham" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/21/ca/950278884e2ca20547ff3eb109478c6baf6b8cf219318e6bc4f666fad8e8/typer-0.19.2.tar.gz", hash = "sha256:9ad824308ded0ad06cc716434705f691d4ee0bfd0fb081839d2e426860e7fdca", size = 104755, upload-time = "2025-09-23T09:47:48.256Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8f/28/7c85c8032b91dbe79725b6f17d2fffc595dff06a35c7a30a37bef73a1ab4/typer-0.20.0.tar.gz", hash = "sha256:1aaf6494031793e4876fb0bacfa6a912b551cf43c1e63c800df8b1a866720c37", size = 106492, upload-time = "2025-10-20T17:03:49.445Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/22/35617eee79080a5d071d0f14ad698d325ee6b3bf824fc0467c03b30e7fa8/typer-0.19.2-py3-none-any.whl", hash = "sha256:755e7e19670ffad8283db353267cb81ef252f595aa6834a0d1ca9312d9326cb9", size = 46748, upload-time = "2025-09-23T09:47:46.777Z" }, + { url = "https://files.pythonhosted.org/packages/78/64/7713ffe4b5983314e9d436a90d5bd4f63b6054e2aca783a3cfc44cb95bbf/typer-0.20.0-py3-none-any.whl", hash = "sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a", size = 47028, upload-time = "2025-10-20T17:03:47.617Z" }, ] [[package]] @@ -6119,11 +6117,11 @@ wheels = [ [[package]] name = "types-awscrt" -version = "0.28.1" +version = "0.28.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/60/19/a3a6377c9e2e389c1421c033a1830c29cac08f2e1e05a082ea84eb22c75f/types_awscrt-0.28.1.tar.gz", hash = "sha256:66d77ec283e1dc907526a44511a12624118723a396c36d3f3dd9855cb614ce14", size = 17410, upload-time = "2025-10-11T21:55:07.443Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/6f/d4f2adb086e8f5cd2ae83cf8dbb192057d8b5025120e5b372468292db67f/types_awscrt-0.28.4.tar.gz", hash = "sha256:15929da84802f27019ee8e4484fb1c102e1f6d4cf22eb48688c34a5a86d02eb6", size = 17692, upload-time = "2025-11-11T02:56:53.516Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/c7/0266b797d19b82aebe0e177efe35de7aabdc192bc1605ce3309331f0a505/types_awscrt-0.28.1-py3-none-any.whl", hash = "sha256:d88f43ef779f90b841ba99badb72fe153077225a4e426ae79e943184827b4443", size = 41851, upload-time = "2025-10-11T21:55:06.235Z" }, + { url = "https://files.pythonhosted.org/packages/5e/ae/9acc4adf1d5d7bb7d09b6f9ff5d4d04a72eb64700d104106dd517665cd57/types_awscrt-0.28.4-py3-none-any.whl", hash = "sha256:2d453f9e27583fcc333771b69a5255a5a4e2c52f86e70f65f3c5a6789d3443d0", size = 42307, upload-time = "2025-11-11T02:56:52.231Z" }, ] [[package]] @@ -6244,11 +6242,11 @@ wheels = [ [[package]] name = "types-html5lib" -version = "1.1.11.20250917" +version = "1.1.11.20251014" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/68/4b/a970718e8bd9324ee8fb8eaf02ff069f6d03c20d4523bb4232892ecc3d06/types_html5lib-1.1.11.20250917.tar.gz", hash = "sha256:7b52743377f33f9b4fd7385afbd2d457b8864ee51f90ff2a795ad9e8c053373a", size = 16868, upload-time = "2025-09-17T02:47:41.18Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/b8/0ce98d9b20a4e8bdac4f4914054acadf5b3a36a7a832e11e0d1938e4c3ce/types_html5lib-1.1.11.20251014.tar.gz", hash = "sha256:cc628d626e0111a2426a64f5f061ecfd113958b69ff6b3dc0eaaed2347ba9455", size = 16895, upload-time = "2025-10-14T02:54:50.003Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/8a/da91a9c64dcb5e69beb567519857411996d8ecae9f6f128bcef8260e7a8d/types_html5lib-1.1.11.20250917-py3-none-any.whl", hash = "sha256:b294fd06d60da205daeb2f615485ca4d475088d2eff1009cf427f4a80fcd5346", size = 22908, upload-time = "2025-09-17T02:47:40.39Z" }, + { url = "https://files.pythonhosted.org/packages/c9/cb/df12640506b8dbd2f2bd0643c5ef4a72fa6285ec4cd7f4b20457842e7fd5/types_html5lib-1.1.11.20251014-py3-none-any.whl", hash = "sha256:4ff2cf18dfc547009ab6fa4190fc3de464ba815c9090c3dd4a5b65f664bfa76c", size = 22916, upload-time = "2025-10-14T02:54:48.686Z" }, ] [[package]] @@ -6337,11 +6335,11 @@ wheels = [ [[package]] name = "types-psutil" -version = "7.0.0.20251001" +version = "7.0.0.20251111" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9e/91/b020f9100b196a1f247cd12575f68dcdad94f032c1e0c42987d7632142ce/types_psutil-7.0.0.20251001.tar.gz", hash = "sha256:60d696200ddae28677e7d88cdebd6e960294e85adefbaafe0f6e5d0e7b4c1963", size = 20469, upload-time = "2025-10-01T03:04:21.292Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/ba/4f48c927f38c7a4d6f7ff65cde91c49d28a95a56e00ec19b2813e1e0b1c1/types_psutil-7.0.0.20251111.tar.gz", hash = "sha256:d109ee2da4c0a9b69b8cefc46e195db8cf0fc0200b6641480df71e7f3f51a239", size = 20287, upload-time = "2025-11-11T03:06:37.482Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/99/50f30e0b648e6f583165cb2e535b0256a02a03efa4868cb2f017ad25b3d8/types_psutil-7.0.0.20251001-py3-none-any.whl", hash = "sha256:adc31de8386d31c61bd4123112fd51e2c700c7502a001cad72a3d56ba6b463d1", size = 23164, upload-time = "2025-10-01T03:04:20.089Z" }, + { url = "https://files.pythonhosted.org/packages/fb/bc/b081d10fbd933cdf839109707a693c668a174e2276d64159a582a9cebd3f/types_psutil-7.0.0.20251111-py3-none-any.whl", hash = "sha256:85ba00205dcfa3c73685122e5a360205d2fbc9b56f942b591027bf401ce0cc47", size = 23052, upload-time = "2025-11-11T03:06:36.011Z" }, ] [[package]] @@ -6389,11 +6387,11 @@ wheels = [ [[package]] name = "types-python-dateutil" -version = "2.9.0.20251008" +version = "2.9.0.20251108" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fc/83/24ed25dd0c6277a1a170c180ad9eef5879ecc9a4745b58d7905a4588c80d/types_python_dateutil-2.9.0.20251008.tar.gz", hash = "sha256:c3826289c170c93ebd8360c3485311187df740166dbab9dd3b792e69f2bc1f9c", size = 16128, upload-time = "2025-10-08T02:51:34.93Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/42/18dff855130c3551d2b5159165bd24466f374dcb78670e5259d2ed51f55c/types_python_dateutil-2.9.0.20251108.tar.gz", hash = "sha256:d8a6687e197f2fa71779ce36176c666841f811368710ab8d274b876424ebfcaa", size = 16220, upload-time = "2025-11-08T02:55:53.393Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/da/af/5d24b8d49ef358468ecfdff5c556adf37f4fd28e336b96f923661a808329/types_python_dateutil-2.9.0.20251008-py3-none-any.whl", hash = "sha256:b9a5232c8921cf7661b29c163ccc56055c418ab2c6eabe8f917cbcc73a4c4157", size = 17934, upload-time = "2025-10-08T02:51:33.55Z" }, + { url = "https://files.pythonhosted.org/packages/25/dd/9fb1f5ef742cab1ea390582f407c967677704d2f5362b48c09de0d0dc8d4/types_python_dateutil-2.9.0.20251108-py3-none-any.whl", hash = "sha256:a4a537f0ea7126f8ccc2763eec9aa31ac8609e3c8e530eb2ddc5ee234b3cd764", size = 18127, upload-time = "2025-11-08T02:55:52.291Z" }, ] [[package]] @@ -6407,11 +6405,11 @@ wheels = [ [[package]] name = "types-pytz" -version = "2025.2.0.20250809" +version = "2025.2.0.20251108" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/07/e2/c774f754de26848f53f05defff5bb21dd9375a059d1ba5b5ea943cf8206e/types_pytz-2025.2.0.20250809.tar.gz", hash = "sha256:222e32e6a29bb28871f8834e8785e3801f2dc4441c715cd2082b271eecbe21e5", size = 10876, upload-time = "2025-08-09T03:14:17.453Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/ff/c047ddc68c803b46470a357454ef76f4acd8c1088f5cc4891cdd909bfcf6/types_pytz-2025.2.0.20251108.tar.gz", hash = "sha256:fca87917836ae843f07129567b74c1929f1870610681b4c92cb86a3df5817bdb", size = 10961, upload-time = "2025-11-08T02:55:57.001Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/d0/91c24fe54e565f2344d7a6821e6c6bb099841ef09007ea6321a0bac0f808/types_pytz-2025.2.0.20250809-py3-none-any.whl", hash = "sha256:4f55ed1b43e925cf851a756fe1707e0f5deeb1976e15bf844bcaa025e8fbd0db", size = 10095, upload-time = "2025-08-09T03:14:16.674Z" }, + { url = "https://files.pythonhosted.org/packages/e7/c1/56ef16bf5dcd255155cc736d276efa6ae0a5c26fd685e28f0412a4013c01/types_pytz-2025.2.0.20251108-py3-none-any.whl", hash = "sha256:0f1c9792cab4eb0e46c52f8845c8f77cf1e313cb3d68bf826aa867fe4717d91c", size = 10116, upload-time = "2025-11-08T02:55:56.194Z" }, ] [[package]] @@ -6722,11 +6720,11 @@ wheels = [ [[package]] name = "urllib3" -version = "2.5.0" +version = "2.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/63/e53da845320b757bf29ef6a9062f5c669fe997973f966045cb019c3f4b66/urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d", size = 307268, upload-time = "2024-12-22T07:47:30.032Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, + { url = "https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df", size = 128369, upload-time = "2024-12-22T07:47:28.074Z" }, ] [[package]] @@ -6740,15 +6738,15 @@ wheels = [ [[package]] name = "uvicorn" -version = "0.37.0" +version = "0.38.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "h11" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/71/57/1616c8274c3442d802621abf5deb230771c7a0fec9414cb6763900eb3868/uvicorn-0.37.0.tar.gz", hash = "sha256:4115c8add6d3fd536c8ee77f0e14a7fd2ebba939fed9b02583a97f80648f9e13", size = 80367, upload-time = "2025-09-23T13:33:47.486Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/ce/f06b84e2697fef4688ca63bdb2fdf113ca0a3be33f94488f2cadb690b0cf/uvicorn-0.38.0.tar.gz", hash = "sha256:fd97093bdd120a2609fc0d3afe931d4d4ad688b6e75f0f929fde1bc36fe0e91d", size = 80605, upload-time = "2025-10-18T13:46:44.63Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/85/cd/584a2ceb5532af99dd09e50919e3615ba99aa127e9850eafe5f31ddfdb9a/uvicorn-0.37.0-py3-none-any.whl", hash = "sha256:913b2b88672343739927ce381ff9e2ad62541f9f8289664fa1d1d3803fa2ce6c", size = 67976, upload-time = "2025-09-23T13:33:45.842Z" }, + { url = "https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl", hash = "sha256:48c0afd214ceb59340075b4a052ea1ee91c16fbc2a9b1469cca0e54566977b02", size = 68109, upload-time = "2025-10-18T13:46:42.958Z" }, ] [package.optional-dependencies] @@ -6764,22 +6762,22 @@ standard = [ [[package]] name = "uvloop" -version = "0.21.0" +version = "0.22.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/c0/854216d09d33c543f12a44b393c402e89a920b1a0a7dc634c42de91b9cf6/uvloop-0.21.0.tar.gz", hash = "sha256:3bf12b0fda68447806a7ad847bfa591613177275d35b6724b1ee573faa3704e3", size = 2492741, upload-time = "2024-10-14T23:38:35.489Z" } +sdist = { url = "https://files.pythonhosted.org/packages/06/f0/18d39dbd1971d6d62c4629cc7fa67f74821b0dc1f5a77af43719de7936a7/uvloop-0.22.1.tar.gz", hash = "sha256:6c84bae345b9147082b17371e3dd5d42775bddce91f885499017f4607fdaf39f", size = 2443250, upload-time = "2025-10-16T22:17:19.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/57/a7/4cf0334105c1160dd6819f3297f8700fda7fc30ab4f61fbf3e725acbc7cc/uvloop-0.21.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c0f3fa6200b3108919f8bdabb9a7f87f20e7097ea3c543754cabc7d717d95cf8", size = 1447410, upload-time = "2024-10-14T23:37:33.612Z" }, - { url = "https://files.pythonhosted.org/packages/8c/7c/1517b0bbc2dbe784b563d6ab54f2ef88c890fdad77232c98ed490aa07132/uvloop-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0878c2640cf341b269b7e128b1a5fed890adc4455513ca710d77d5e93aa6d6a0", size = 805476, upload-time = "2024-10-14T23:37:36.11Z" }, - { url = "https://files.pythonhosted.org/packages/ee/ea/0bfae1aceb82a503f358d8d2fa126ca9dbdb2ba9c7866974faec1cb5875c/uvloop-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9fb766bb57b7388745d8bcc53a359b116b8a04c83a2288069809d2b3466c37e", size = 3960855, upload-time = "2024-10-14T23:37:37.683Z" }, - { url = "https://files.pythonhosted.org/packages/8a/ca/0864176a649838b838f36d44bf31c451597ab363b60dc9e09c9630619d41/uvloop-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb", size = 3973185, upload-time = "2024-10-14T23:37:40.226Z" }, - { url = "https://files.pythonhosted.org/packages/30/bf/08ad29979a936d63787ba47a540de2132169f140d54aa25bc8c3df3e67f4/uvloop-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:baa0e6291d91649c6ba4ed4b2f982f9fa165b5bbd50a9e203c416a2797bab3c6", size = 3820256, upload-time = "2024-10-14T23:37:42.839Z" }, - { url = "https://files.pythonhosted.org/packages/da/e2/5cf6ef37e3daf2f06e651aae5ea108ad30df3cb269102678b61ebf1fdf42/uvloop-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4509360fcc4c3bd2c70d87573ad472de40c13387f5fda8cb58350a1d7475e58d", size = 3937323, upload-time = "2024-10-14T23:37:45.337Z" }, - { url = "https://files.pythonhosted.org/packages/8c/4c/03f93178830dc7ce8b4cdee1d36770d2f5ebb6f3d37d354e061eefc73545/uvloop-0.21.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:359ec2c888397b9e592a889c4d72ba3d6befba8b2bb01743f72fffbde663b59c", size = 1471284, upload-time = "2024-10-14T23:37:47.833Z" }, - { url = "https://files.pythonhosted.org/packages/43/3e/92c03f4d05e50f09251bd8b2b2b584a2a7f8fe600008bcc4523337abe676/uvloop-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f7089d2dc73179ce5ac255bdf37c236a9f914b264825fdaacaded6990a7fb4c2", size = 821349, upload-time = "2024-10-14T23:37:50.149Z" }, - { url = "https://files.pythonhosted.org/packages/a6/ef/a02ec5da49909dbbfb1fd205a9a1ac4e88ea92dcae885e7c961847cd51e2/uvloop-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baa4dcdbd9ae0a372f2167a207cd98c9f9a1ea1188a8a526431eef2f8116cc8d", size = 4580089, upload-time = "2024-10-14T23:37:51.703Z" }, - { url = "https://files.pythonhosted.org/packages/06/a7/b4e6a19925c900be9f98bec0a75e6e8f79bb53bdeb891916609ab3958967/uvloop-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86975dca1c773a2c9864f4c52c5a55631038e387b47eaf56210f873887b6c8dc", size = 4693770, upload-time = "2024-10-14T23:37:54.122Z" }, - { url = "https://files.pythonhosted.org/packages/ce/0c/f07435a18a4b94ce6bd0677d8319cd3de61f3a9eeb1e5f8ab4e8b5edfcb3/uvloop-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:461d9ae6660fbbafedd07559c6a2e57cd553b34b0065b6550685f6653a98c1cb", size = 4451321, upload-time = "2024-10-14T23:37:55.766Z" }, - { url = "https://files.pythonhosted.org/packages/8f/eb/f7032be105877bcf924709c97b1bf3b90255b4ec251f9340cef912559f28/uvloop-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:183aef7c8730e54c9a3ee3227464daed66e37ba13040bb3f350bc2ddc040f22f", size = 4659022, upload-time = "2024-10-14T23:37:58.195Z" }, + { url = "https://files.pythonhosted.org/packages/c7/d5/69900f7883235562f1f50d8184bb7dd84a2fb61e9ec63f3782546fdbd057/uvloop-0.22.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c60ebcd36f7b240b30788554b6f0782454826a0ed765d8430652621b5de674b9", size = 1352420, upload-time = "2025-10-16T22:16:21.187Z" }, + { url = "https://files.pythonhosted.org/packages/a8/73/c4e271b3bce59724e291465cc936c37758886a4868787da0278b3b56b905/uvloop-0.22.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b7f102bf3cb1995cfeaee9321105e8f5da76fdb104cdad8986f85461a1b7b77", size = 748677, upload-time = "2025-10-16T22:16:22.558Z" }, + { url = "https://files.pythonhosted.org/packages/86/94/9fb7fad2f824d25f8ecac0d70b94d0d48107ad5ece03769a9c543444f78a/uvloop-0.22.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53c85520781d84a4b8b230e24a5af5b0778efdb39142b424990ff1ef7c48ba21", size = 3753819, upload-time = "2025-10-16T22:16:23.903Z" }, + { url = "https://files.pythonhosted.org/packages/74/4f/256aca690709e9b008b7108bc85fba619a2bc37c6d80743d18abad16ee09/uvloop-0.22.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:56a2d1fae65fd82197cb8c53c367310b3eabe1bbb9fb5a04d28e3e3520e4f702", size = 3804529, upload-time = "2025-10-16T22:16:25.246Z" }, + { url = "https://files.pythonhosted.org/packages/7f/74/03c05ae4737e871923d21a76fe28b6aad57f5c03b6e6bfcfa5ad616013e4/uvloop-0.22.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:40631b049d5972c6755b06d0bfe8233b1bd9a8a6392d9d1c45c10b6f9e9b2733", size = 3621267, upload-time = "2025-10-16T22:16:26.819Z" }, + { url = "https://files.pythonhosted.org/packages/75/be/f8e590fe61d18b4a92070905497aec4c0e64ae1761498cad09023f3f4b3e/uvloop-0.22.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:535cc37b3a04f6cd2c1ef65fa1d370c9a35b6695df735fcff5427323f2cd5473", size = 3723105, upload-time = "2025-10-16T22:16:28.252Z" }, + { url = "https://files.pythonhosted.org/packages/3d/ff/7f72e8170be527b4977b033239a83a68d5c881cc4775fca255c677f7ac5d/uvloop-0.22.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:fe94b4564e865d968414598eea1a6de60adba0c040ba4ed05ac1300de402cd42", size = 1359936, upload-time = "2025-10-16T22:16:29.436Z" }, + { url = "https://files.pythonhosted.org/packages/c3/c6/e5d433f88fd54d81ef4be58b2b7b0cea13c442454a1db703a1eea0db1a59/uvloop-0.22.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:51eb9bd88391483410daad430813d982010f9c9c89512321f5b60e2cddbdddd6", size = 752769, upload-time = "2025-10-16T22:16:30.493Z" }, + { url = "https://files.pythonhosted.org/packages/24/68/a6ac446820273e71aa762fa21cdcc09861edd3536ff47c5cd3b7afb10eeb/uvloop-0.22.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:700e674a166ca5778255e0e1dc4e9d79ab2acc57b9171b79e65feba7184b3370", size = 4317413, upload-time = "2025-10-16T22:16:31.644Z" }, + { url = "https://files.pythonhosted.org/packages/5f/6f/e62b4dfc7ad6518e7eff2516f680d02a0f6eb62c0c212e152ca708a0085e/uvloop-0.22.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b5b1ac819a3f946d3b2ee07f09149578ae76066d70b44df3fa990add49a82e4", size = 4426307, upload-time = "2025-10-16T22:16:32.917Z" }, + { url = "https://files.pythonhosted.org/packages/90/60/97362554ac21e20e81bcef1150cb2a7e4ffdaf8ea1e5b2e8bf7a053caa18/uvloop-0.22.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e047cc068570bac9866237739607d1313b9253c3051ad84738cbb095be0537b2", size = 4131970, upload-time = "2025-10-16T22:16:34.015Z" }, + { url = "https://files.pythonhosted.org/packages/99/39/6b3f7d234ba3964c428a6e40006340f53ba37993f46ed6e111c6e9141d18/uvloop-0.22.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:512fec6815e2dd45161054592441ef76c830eddaad55c8aa30952e6fe1ed07c0", size = 4296343, upload-time = "2025-10-16T22:16:35.149Z" }, ] [[package]] @@ -6820,7 +6818,7 @@ wheels = [ [[package]] name = "wandb" -version = "0.22.2" +version = "0.23.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -6834,58 +6832,58 @@ dependencies = [ { name = "sentry-sdk" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c1/a8/680bd77e11a278e6c14a2cb4646e8ab9525b2baaa81c3d12dc0f616aa4aa/wandb-0.22.2.tar.gz", hash = "sha256:510f5a1ac30d16921c36c3b932da852f046641d4aee98a86a7f5ec03a6e95bda", size = 41401439, upload-time = "2025-10-07T19:54:21.88Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/8b/db2d44395c967cd452517311fd6ede5d1e07310769f448358d4874248512/wandb-0.23.0.tar.gz", hash = "sha256:e5f98c61a8acc3ee84583ca78057f64344162ce026b9f71cb06eea44aec27c93", size = 44413921, upload-time = "2025-11-11T21:06:30.737Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/b3/8c637fb594cfd574ce9c9f7d0ac2f2d12742eb38ec59dcbb713beae95343/wandb-0.22.2-py3-none-macosx_12_0_arm64.whl", hash = "sha256:2e29c9fa4462b5411b2cd2175ae33eff4309c91de7c426bca6bc8e7abc7e5dec", size = 18677549, upload-time = "2025-10-07T19:54:00.839Z" }, - { url = "https://files.pythonhosted.org/packages/d3/f3/e309a726eaebddad6b8d9a73a50891e5796962ec8a091bb6a61d31692d1e/wandb-0.22.2-py3-none-macosx_12_0_x86_64.whl", hash = "sha256:c42d594cd7a9da4fd39ecdb0abbc081b61f304123277b2b6c4ba84283956fd21", size = 19715188, upload-time = "2025-10-07T19:54:03.805Z" }, - { url = "https://files.pythonhosted.org/packages/f9/73/fad59910215876008f4781b57d828d1b19b3677c9b46af615e7229746435/wandb-0.22.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5188d84e66d3fd584f3b3ae4d2a70e78f29403c0528e6aecaa4188a1fcf54d8", size = 18463148, upload-time = "2025-10-07T19:54:05.676Z" }, - { url = "https://files.pythonhosted.org/packages/87/11/572c1913b5b92e4c519f735adfae572b46f2d79d99ede63eec0d6a272d6e/wandb-0.22.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88ccd484af9f21cfc127976793c3cf66cfe1acd75bd8cd650086a64e88bac4bf", size = 19908645, upload-time = "2025-10-07T19:54:07.693Z" }, - { url = "https://files.pythonhosted.org/packages/6d/0d/133aa82f5a505ba638b4fda5014cefddfe7f1f6238ef4afc0871ec61c41f/wandb-0.22.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:abf0ed175e791af64110e0a0b99ce02bbbbd1017722bc32d3bc328efb86450cd", size = 18501348, upload-time = "2025-10-07T19:54:10.234Z" }, - { url = "https://files.pythonhosted.org/packages/d0/d5/776203be2601872f01dacc6a5b4274106ec0db7cd3bf2cdb3b741f8fc932/wandb-0.22.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:44e77c56403b90bf3473a7ca3bfc4d42c636b7c0e31a5fb9cd0382f08302f74b", size = 20001756, upload-time = "2025-10-07T19:54:12.452Z" }, - { url = "https://files.pythonhosted.org/packages/30/43/ae3fa46e20b1d9a6508dd9abe716d57205c038ed4661c5c98ace48a60eac/wandb-0.22.2-py3-none-win32.whl", hash = "sha256:44d12bd379dbe15be5ceed6bdf23803d42f648ba0dd111297b4c47a3c7be6dbd", size = 19075950, upload-time = "2025-10-07T19:54:14.892Z" }, - { url = "https://files.pythonhosted.org/packages/09/59/c174321e868205f7a659d1e5ec51f546e62267296d6f4179bb9119294964/wandb-0.22.2-py3-none-win_amd64.whl", hash = "sha256:c95eb221bf316c0872f7ac55071856b9f25f95a2de983ada48acf653ce259386", size = 19075953, upload-time = "2025-10-07T19:54:16.837Z" }, - { url = "https://files.pythonhosted.org/packages/7a/a2/c7c24fda78513cab5686949d8cb36459dbbccbbb4b2b6fc67237ece31a00/wandb-0.22.2-py3-none-win_arm64.whl", hash = "sha256:20d2ab9aa10445aab3d60914a980f002a4f66566e28b0cd156b1e462f0080a0d", size = 17383217, upload-time = "2025-10-07T19:54:19.384Z" }, + { url = "https://files.pythonhosted.org/packages/41/61/a3220c7fa4cadfb2b2a5c09e3fa401787326584ade86d7c1f58bf1cd43bd/wandb-0.23.0-py3-none-macosx_12_0_arm64.whl", hash = "sha256:b682ec5e38fc97bd2e868ac7615a0ab4fc6a15220ee1159e87270a5ebb7a816d", size = 18992250, upload-time = "2025-11-11T21:06:03.412Z" }, + { url = "https://files.pythonhosted.org/packages/90/16/e69333cf3d11e7847f424afc6c8ae325e1f6061b2e5118d7a17f41b6525d/wandb-0.23.0-py3-none-macosx_12_0_x86_64.whl", hash = "sha256:ec094eb71b778e77db8c188da19e52c4f96cb9d5b4421d7dc05028afc66fd7e7", size = 20045616, upload-time = "2025-11-11T21:06:07.109Z" }, + { url = "https://files.pythonhosted.org/packages/62/79/42dc6c7bb0b425775fe77f1a3f1a22d75d392841a06b43e150a3a7f2553a/wandb-0.23.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e43f1f04b98c34f407dcd2744cec0a590abce39bed14a61358287f817514a7b", size = 18758848, upload-time = "2025-11-11T21:06:09.832Z" }, + { url = "https://files.pythonhosted.org/packages/b8/94/d6ddb78334996ccfc1179444bfcfc0f37ffd07ee79bb98940466da6f68f8/wandb-0.23.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5847f98cbb3175caf5291932374410141f5bb3b7c25f9c5e562c1988ce0bf5", size = 20231493, upload-time = "2025-11-11T21:06:12.323Z" }, + { url = "https://files.pythonhosted.org/packages/52/4d/0ad6df0e750c19dabd24d2cecad0938964f69a072f05fbdab7281bec2b64/wandb-0.23.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:6151355fd922539926e870be811474238c9614b96541773b990f1ce53368aef6", size = 18793473, upload-time = "2025-11-11T21:06:14.967Z" }, + { url = "https://files.pythonhosted.org/packages/f8/da/c2ba49c5573dff93dafc0acce691bb1c3d57361bf834b2f2c58e6193439b/wandb-0.23.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:df62e426e448ebc44269140deb7240df474e743b12d4b1f53b753afde4aa06d4", size = 20332882, upload-time = "2025-11-11T21:06:17.865Z" }, + { url = "https://files.pythonhosted.org/packages/40/65/21bfb10ee5cd93fbcaf794958863c7e05bac4bbeb1cc1b652094aa3743a5/wandb-0.23.0-py3-none-win32.whl", hash = "sha256:6c21d3eadda17aef7df6febdffdddfb0b4835c7754435fc4fe27631724269f5c", size = 19433198, upload-time = "2025-11-11T21:06:21.913Z" }, + { url = "https://files.pythonhosted.org/packages/f1/33/cbe79e66c171204e32cf940c7fdfb8b5f7d2af7a00f301c632f3a38aa84b/wandb-0.23.0-py3-none-win_amd64.whl", hash = "sha256:b50635fa0e16e528bde25715bf446e9153368428634ca7a5dbd7a22c8ae4e915", size = 19433201, upload-time = "2025-11-11T21:06:24.607Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a0/5ecfae12d78ea036a746c071e4c13b54b28d641efbba61d2947c73b3e6f9/wandb-0.23.0-py3-none-win_arm64.whl", hash = "sha256:fa0181b02ce4d1993588f4a728d8b73ae487eb3cb341e6ce01c156be7a98ec72", size = 17678649, upload-time = "2025-11-11T21:06:27.289Z" }, ] [[package]] name = "watchfiles" -version = "1.1.0" +version = "1.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2a/9a/d451fcc97d029f5812e898fd30a53fd8c15c7bbd058fd75cfc6beb9bd761/watchfiles-1.1.0.tar.gz", hash = "sha256:693ed7ec72cbfcee399e92c895362b6e66d63dac6b91e2c11ae03d10d503e575", size = 94406, upload-time = "2025-06-15T19:06:59.42Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c2/c9/8869df9b2a2d6c59d79220a4db37679e74f807c559ffe5265e08b227a210/watchfiles-1.1.1.tar.gz", hash = "sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2", size = 94440, upload-time = "2025-10-14T15:06:21.08Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/8b/78/7401154b78ab484ccaaeef970dc2af0cb88b5ba8a1b415383da444cdd8d3/watchfiles-1.1.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c9649dfc57cc1f9835551deb17689e8d44666315f2e82d337b9f07bd76ae3aa2", size = 405751, upload-time = "2025-06-15T19:05:07.679Z" }, - { url = "https://files.pythonhosted.org/packages/76/63/e6c3dbc1f78d001589b75e56a288c47723de28c580ad715eb116639152b5/watchfiles-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:406520216186b99374cdb58bc48e34bb74535adec160c8459894884c983a149c", size = 397313, upload-time = "2025-06-15T19:05:08.764Z" }, - { url = "https://files.pythonhosted.org/packages/6c/a2/8afa359ff52e99af1632f90cbf359da46184207e893a5f179301b0c8d6df/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45350fd1dc75cd68d3d72c47f5b513cb0578da716df5fba02fff31c69d5f2d", size = 450792, upload-time = "2025-06-15T19:05:09.869Z" }, - { url = "https://files.pythonhosted.org/packages/1d/bf/7446b401667f5c64972a57a0233be1104157fc3abf72c4ef2666c1bd09b2/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11ee4444250fcbeb47459a877e5e80ed994ce8e8d20283857fc128be1715dac7", size = 458196, upload-time = "2025-06-15T19:05:11.91Z" }, - { url = "https://files.pythonhosted.org/packages/58/2f/501ddbdfa3fa874ea5597c77eeea3d413579c29af26c1091b08d0c792280/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bda8136e6a80bdea23e5e74e09df0362744d24ffb8cd59c4a95a6ce3d142f79c", size = 484788, upload-time = "2025-06-15T19:05:13.373Z" }, - { url = "https://files.pythonhosted.org/packages/61/1e/9c18eb2eb5c953c96bc0e5f626f0e53cfef4bd19bd50d71d1a049c63a575/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b915daeb2d8c1f5cee4b970f2e2c988ce6514aace3c9296e58dd64dc9aa5d575", size = 597879, upload-time = "2025-06-15T19:05:14.725Z" }, - { url = "https://files.pythonhosted.org/packages/8b/6c/1467402e5185d89388b4486745af1e0325007af0017c3384cc786fff0542/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed8fc66786de8d0376f9f913c09e963c66e90ced9aa11997f93bdb30f7c872a8", size = 477447, upload-time = "2025-06-15T19:05:15.775Z" }, - { url = "https://files.pythonhosted.org/packages/2b/a1/ec0a606bde4853d6c4a578f9391eeb3684a9aea736a8eb217e3e00aa89a1/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe4371595edf78c41ef8ac8df20df3943e13defd0efcb732b2e393b5a8a7a71f", size = 453145, upload-time = "2025-06-15T19:05:17.17Z" }, - { url = "https://files.pythonhosted.org/packages/90/b9/ef6f0c247a6a35d689fc970dc7f6734f9257451aefb30def5d100d6246a5/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b7c5f6fe273291f4d414d55b2c80d33c457b8a42677ad14b4b47ff025d0893e4", size = 626539, upload-time = "2025-06-15T19:05:18.557Z" }, - { url = "https://files.pythonhosted.org/packages/34/44/6ffda5537085106ff5aaa762b0d130ac6c75a08015dd1621376f708c94de/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7738027989881e70e3723c75921f1efa45225084228788fc59ea8c6d732eb30d", size = 624472, upload-time = "2025-06-15T19:05:19.588Z" }, - { url = "https://files.pythonhosted.org/packages/c3/e3/71170985c48028fa3f0a50946916a14055e741db11c2e7bc2f3b61f4d0e3/watchfiles-1.1.0-cp311-cp311-win32.whl", hash = "sha256:622d6b2c06be19f6e89b1d951485a232e3b59618def88dbeda575ed8f0d8dbf2", size = 279348, upload-time = "2025-06-15T19:05:20.856Z" }, - { url = "https://files.pythonhosted.org/packages/89/1b/3e39c68b68a7a171070f81fc2561d23ce8d6859659406842a0e4bebf3bba/watchfiles-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:48aa25e5992b61debc908a61ab4d3f216b64f44fdaa71eb082d8b2de846b7d12", size = 292607, upload-time = "2025-06-15T19:05:21.937Z" }, - { url = "https://files.pythonhosted.org/packages/61/9f/2973b7539f2bdb6ea86d2c87f70f615a71a1fc2dba2911795cea25968aea/watchfiles-1.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:00645eb79a3faa70d9cb15c8d4187bb72970b2470e938670240c7998dad9f13a", size = 285056, upload-time = "2025-06-15T19:05:23.12Z" }, - { url = "https://files.pythonhosted.org/packages/f6/b8/858957045a38a4079203a33aaa7d23ea9269ca7761c8a074af3524fbb240/watchfiles-1.1.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9dc001c3e10de4725c749d4c2f2bdc6ae24de5a88a339c4bce32300a31ede179", size = 402339, upload-time = "2025-06-15T19:05:24.516Z" }, - { url = "https://files.pythonhosted.org/packages/80/28/98b222cca751ba68e88521fabd79a4fab64005fc5976ea49b53fa205d1fa/watchfiles-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9ba68ec283153dead62cbe81872d28e053745f12335d037de9cbd14bd1877f5", size = 394409, upload-time = "2025-06-15T19:05:25.469Z" }, - { url = "https://files.pythonhosted.org/packages/86/50/dee79968566c03190677c26f7f47960aff738d32087087bdf63a5473e7df/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130fc497b8ee68dce163e4254d9b0356411d1490e868bd8790028bc46c5cc297", size = 450939, upload-time = "2025-06-15T19:05:26.494Z" }, - { url = "https://files.pythonhosted.org/packages/40/45/a7b56fb129700f3cfe2594a01aa38d033b92a33dddce86c8dfdfc1247b72/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50a51a90610d0845a5931a780d8e51d7bd7f309ebc25132ba975aca016b576a0", size = 457270, upload-time = "2025-06-15T19:05:27.466Z" }, - { url = "https://files.pythonhosted.org/packages/b5/c8/fa5ef9476b1d02dc6b5e258f515fcaaecf559037edf8b6feffcbc097c4b8/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc44678a72ac0910bac46fa6a0de6af9ba1355669b3dfaf1ce5f05ca7a74364e", size = 483370, upload-time = "2025-06-15T19:05:28.548Z" }, - { url = "https://files.pythonhosted.org/packages/98/68/42cfcdd6533ec94f0a7aab83f759ec11280f70b11bfba0b0f885e298f9bd/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a543492513a93b001975ae283a51f4b67973662a375a403ae82f420d2c7205ee", size = 598654, upload-time = "2025-06-15T19:05:29.997Z" }, - { url = "https://files.pythonhosted.org/packages/d3/74/b2a1544224118cc28df7e59008a929e711f9c68ce7d554e171b2dc531352/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ac164e20d17cc285f2b94dc31c384bc3aa3dd5e7490473b3db043dd70fbccfd", size = 478667, upload-time = "2025-06-15T19:05:31.172Z" }, - { url = "https://files.pythonhosted.org/packages/8c/77/e3362fe308358dc9f8588102481e599c83e1b91c2ae843780a7ded939a35/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7590d5a455321e53857892ab8879dce62d1f4b04748769f5adf2e707afb9d4f", size = 452213, upload-time = "2025-06-15T19:05:32.299Z" }, - { url = "https://files.pythonhosted.org/packages/6e/17/c8f1a36540c9a1558d4faf08e909399e8133599fa359bf52ec8fcee5be6f/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:37d3d3f7defb13f62ece99e9be912afe9dd8a0077b7c45ee5a57c74811d581a4", size = 626718, upload-time = "2025-06-15T19:05:33.415Z" }, - { url = "https://files.pythonhosted.org/packages/26/45/fb599be38b4bd38032643783d7496a26a6f9ae05dea1a42e58229a20ac13/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7080c4bb3efd70a07b1cc2df99a7aa51d98685be56be6038c3169199d0a1c69f", size = 623098, upload-time = "2025-06-15T19:05:34.534Z" }, - { url = "https://files.pythonhosted.org/packages/a1/e7/fdf40e038475498e160cd167333c946e45d8563ae4dd65caf757e9ffe6b4/watchfiles-1.1.0-cp312-cp312-win32.whl", hash = "sha256:cbcf8630ef4afb05dc30107bfa17f16c0896bb30ee48fc24bf64c1f970f3b1fd", size = 279209, upload-time = "2025-06-15T19:05:35.577Z" }, - { url = "https://files.pythonhosted.org/packages/3f/d3/3ae9d5124ec75143bdf088d436cba39812122edc47709cd2caafeac3266f/watchfiles-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:cbd949bdd87567b0ad183d7676feb98136cde5bb9025403794a4c0db28ed3a47", size = 292786, upload-time = "2025-06-15T19:05:36.559Z" }, - { url = "https://files.pythonhosted.org/packages/26/2f/7dd4fc8b5f2b34b545e19629b4a018bfb1de23b3a496766a2c1165ca890d/watchfiles-1.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:0a7d40b77f07be87c6faa93d0951a0fcd8cbca1ddff60a1b65d741bac6f3a9f6", size = 284343, upload-time = "2025-06-15T19:05:37.5Z" }, - { url = "https://files.pythonhosted.org/packages/8c/6b/686dcf5d3525ad17b384fd94708e95193529b460a1b7bf40851f1328ec6e/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0ece16b563b17ab26eaa2d52230c9a7ae46cf01759621f4fbbca280e438267b3", size = 406910, upload-time = "2025-06-15T19:06:49.335Z" }, - { url = "https://files.pythonhosted.org/packages/f3/d3/71c2dcf81dc1edcf8af9f4d8d63b1316fb0a2dd90cbfd427e8d9dd584a90/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:51b81e55d40c4b4aa8658427a3ee7ea847c591ae9e8b81ef94a90b668999353c", size = 398816, upload-time = "2025-06-15T19:06:50.433Z" }, - { url = "https://files.pythonhosted.org/packages/b8/fa/12269467b2fc006f8fce4cd6c3acfa77491dd0777d2a747415f28ccc8c60/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2bcdc54ea267fe72bfc7d83c041e4eb58d7d8dc6f578dfddb52f037ce62f432", size = 451584, upload-time = "2025-06-15T19:06:51.834Z" }, - { url = "https://files.pythonhosted.org/packages/bd/d3/254cea30f918f489db09d6a8435a7de7047f8cb68584477a515f160541d6/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:923fec6e5461c42bd7e3fd5ec37492c6f3468be0499bc0707b4bbbc16ac21792", size = 454009, upload-time = "2025-06-15T19:06:52.896Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f8/2c5f479fb531ce2f0564eda479faecf253d886b1ab3630a39b7bf7362d46/watchfiles-1.1.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f57b396167a2565a4e8b5e56a5a1c537571733992b226f4f1197d79e94cf0ae5", size = 406529, upload-time = "2025-10-14T15:04:32.899Z" }, + { url = "https://files.pythonhosted.org/packages/fe/cd/f515660b1f32f65df671ddf6f85bfaca621aee177712874dc30a97397977/watchfiles-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:421e29339983e1bebc281fab40d812742268ad057db4aee8c4d2bce0af43b741", size = 394384, upload-time = "2025-10-14T15:04:33.761Z" }, + { url = "https://files.pythonhosted.org/packages/7b/c3/28b7dc99733eab43fca2d10f55c86e03bd6ab11ca31b802abac26b23d161/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e43d39a741e972bab5d8100b5cdacf69db64e34eb19b6e9af162bccf63c5cc6", size = 448789, upload-time = "2025-10-14T15:04:34.679Z" }, + { url = "https://files.pythonhosted.org/packages/4a/24/33e71113b320030011c8e4316ccca04194bf0cbbaeee207f00cbc7d6b9f5/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f537afb3276d12814082a2e9b242bdcf416c2e8fd9f799a737990a1dbe906e5b", size = 460521, upload-time = "2025-10-14T15:04:35.963Z" }, + { url = "https://files.pythonhosted.org/packages/f4/c3/3c9a55f255aa57b91579ae9e98c88704955fa9dac3e5614fb378291155df/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2cd9e04277e756a2e2d2543d65d1e2166d6fd4c9b183f8808634fda23f17b14", size = 488722, upload-time = "2025-10-14T15:04:37.091Z" }, + { url = "https://files.pythonhosted.org/packages/49/36/506447b73eb46c120169dc1717fe2eff07c234bb3232a7200b5f5bd816e9/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5f3f58818dc0b07f7d9aa7fe9eb1037aecb9700e63e1f6acfed13e9fef648f5d", size = 596088, upload-time = "2025-10-14T15:04:38.39Z" }, + { url = "https://files.pythonhosted.org/packages/82/ab/5f39e752a9838ec4d52e9b87c1e80f1ee3ccdbe92e183c15b6577ab9de16/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bb9f66367023ae783551042d31b1d7fd422e8289eedd91f26754a66f44d5cff", size = 472923, upload-time = "2025-10-14T15:04:39.666Z" }, + { url = "https://files.pythonhosted.org/packages/af/b9/a419292f05e302dea372fa7e6fda5178a92998411f8581b9830d28fb9edb/watchfiles-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aebfd0861a83e6c3d1110b78ad54704486555246e542be3e2bb94195eabb2606", size = 456080, upload-time = "2025-10-14T15:04:40.643Z" }, + { url = "https://files.pythonhosted.org/packages/b0/c3/d5932fd62bde1a30c36e10c409dc5d54506726f08cb3e1d8d0ba5e2bc8db/watchfiles-1.1.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5fac835b4ab3c6487b5dbad78c4b3724e26bcc468e886f8ba8cc4306f68f6701", size = 629432, upload-time = "2025-10-14T15:04:41.789Z" }, + { url = "https://files.pythonhosted.org/packages/f7/77/16bddd9779fafb795f1a94319dc965209c5641db5bf1edbbccace6d1b3c0/watchfiles-1.1.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:399600947b170270e80134ac854e21b3ccdefa11a9529a3decc1327088180f10", size = 623046, upload-time = "2025-10-14T15:04:42.718Z" }, + { url = "https://files.pythonhosted.org/packages/46/ef/f2ecb9a0f342b4bfad13a2787155c6ee7ce792140eac63a34676a2feeef2/watchfiles-1.1.1-cp311-cp311-win32.whl", hash = "sha256:de6da501c883f58ad50db3a32ad397b09ad29865b5f26f64c24d3e3281685849", size = 271473, upload-time = "2025-10-14T15:04:43.624Z" }, + { url = "https://files.pythonhosted.org/packages/94/bc/f42d71125f19731ea435c3948cad148d31a64fccde3867e5ba4edee901f9/watchfiles-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:35c53bd62a0b885bf653ebf6b700d1bf05debb78ad9292cf2a942b23513dc4c4", size = 287598, upload-time = "2025-10-14T15:04:44.516Z" }, + { url = "https://files.pythonhosted.org/packages/57/c9/a30f897351f95bbbfb6abcadafbaca711ce1162f4db95fc908c98a9165f3/watchfiles-1.1.1-cp311-cp311-win_arm64.whl", hash = "sha256:57ca5281a8b5e27593cb7d82c2ac927ad88a96ed406aa446f6344e4328208e9e", size = 277210, upload-time = "2025-10-14T15:04:45.883Z" }, + { url = "https://files.pythonhosted.org/packages/74/d5/f039e7e3c639d9b1d09b07ea412a6806d38123f0508e5f9b48a87b0a76cc/watchfiles-1.1.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:8c89f9f2f740a6b7dcc753140dd5e1ab9215966f7a3530d0c0705c83b401bd7d", size = 404745, upload-time = "2025-10-14T15:04:46.731Z" }, + { url = "https://files.pythonhosted.org/packages/a5/96/a881a13aa1349827490dab2d363c8039527060cfcc2c92cc6d13d1b1049e/watchfiles-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd404be08018c37350f0d6e34676bd1e2889990117a2b90070b3007f172d0610", size = 391769, upload-time = "2025-10-14T15:04:48.003Z" }, + { url = "https://files.pythonhosted.org/packages/4b/5b/d3b460364aeb8da471c1989238ea0e56bec24b6042a68046adf3d9ddb01c/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af", size = 449374, upload-time = "2025-10-14T15:04:49.179Z" }, + { url = "https://files.pythonhosted.org/packages/b9/44/5769cb62d4ed055cb17417c0a109a92f007114a4e07f30812a73a4efdb11/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6", size = 459485, upload-time = "2025-10-14T15:04:50.155Z" }, + { url = "https://files.pythonhosted.org/packages/19/0c/286b6301ded2eccd4ffd0041a1b726afda999926cf720aab63adb68a1e36/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce", size = 488813, upload-time = "2025-10-14T15:04:51.059Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2b/8530ed41112dd4a22f4dcfdb5ccf6a1baad1ff6eed8dc5a5f09e7e8c41c7/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa", size = 594816, upload-time = "2025-10-14T15:04:52.031Z" }, + { url = "https://files.pythonhosted.org/packages/ce/d2/f5f9fb49489f184f18470d4f99f4e862a4b3e9ac2865688eb2099e3d837a/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb", size = 475186, upload-time = "2025-10-14T15:04:53.064Z" }, + { url = "https://files.pythonhosted.org/packages/cf/68/5707da262a119fb06fbe214d82dd1fe4a6f4af32d2d14de368d0349eb52a/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803", size = 456812, upload-time = "2025-10-14T15:04:55.174Z" }, + { url = "https://files.pythonhosted.org/packages/66/ab/3cbb8756323e8f9b6f9acb9ef4ec26d42b2109bce830cc1f3468df20511d/watchfiles-1.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94", size = 630196, upload-time = "2025-10-14T15:04:56.22Z" }, + { url = "https://files.pythonhosted.org/packages/78/46/7152ec29b8335f80167928944a94955015a345440f524d2dfe63fc2f437b/watchfiles-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43", size = 622657, upload-time = "2025-10-14T15:04:57.521Z" }, + { url = "https://files.pythonhosted.org/packages/0a/bf/95895e78dd75efe9a7f31733607f384b42eb5feb54bd2eb6ed57cc2e94f4/watchfiles-1.1.1-cp312-cp312-win32.whl", hash = "sha256:859e43a1951717cc8de7f4c77674a6d389b106361585951d9e69572823f311d9", size = 272042, upload-time = "2025-10-14T15:04:59.046Z" }, + { url = "https://files.pythonhosted.org/packages/87/0a/90eb755f568de2688cb220171c4191df932232c20946966c27a59c400850/watchfiles-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:91d4c9a823a8c987cce8fa2690923b069966dabb196dd8d137ea2cede885fde9", size = 288410, upload-time = "2025-10-14T15:05:00.081Z" }, + { url = "https://files.pythonhosted.org/packages/36/76/f322701530586922fbd6723c4f91ace21364924822a8772c549483abed13/watchfiles-1.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:a625815d4a2bdca61953dbba5a39d60164451ef34c88d751f6c368c3ea73d404", size = 278209, upload-time = "2025-10-14T15:05:01.168Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8e/e500f8b0b77be4ff753ac94dc06b33d8f0d839377fee1b78e8c8d8f031bf/watchfiles-1.1.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:db476ab59b6765134de1d4fe96a1a9c96ddf091683599be0f26147ea1b2e4b88", size = 408250, upload-time = "2025-10-14T15:06:10.264Z" }, + { url = "https://files.pythonhosted.org/packages/bd/95/615e72cd27b85b61eec764a5ca51bd94d40b5adea5ff47567d9ebc4d275a/watchfiles-1.1.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:89eef07eee5e9d1fda06e38822ad167a044153457e6fd997f8a858ab7564a336", size = 396117, upload-time = "2025-10-14T15:06:11.28Z" }, + { url = "https://files.pythonhosted.org/packages/c9/81/e7fe958ce8a7fb5c73cc9fb07f5aeaf755e6aa72498c57d760af760c91f8/watchfiles-1.1.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce19e06cbda693e9e7686358af9cd6f5d61312ab8b00488bc36f5aabbaf77e24", size = 450493, upload-time = "2025-10-14T15:06:12.321Z" }, + { url = "https://files.pythonhosted.org/packages/6e/d4/ed38dd3b1767193de971e694aa544356e63353c33a85d948166b5ff58b9e/watchfiles-1.1.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e6f39af2eab0118338902798b5aa6664f46ff66bc0280de76fca67a7f262a49", size = 457546, upload-time = "2025-10-14T15:06:13.372Z" }, ] [[package]] @@ -6899,7 +6897,7 @@ wheels = [ [[package]] name = "weave" -version = "0.51.59" +version = "0.52.16" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, @@ -6907,18 +6905,17 @@ dependencies = [ { name = "eval-type-backport" }, { name = "gql", extra = ["aiohttp", "requests"] }, { name = "jsonschema" }, - { name = "nest-asyncio" }, { name = "packaging" }, { name = "polyfile-weave" }, { name = "pydantic" }, - { name = "rich" }, { name = "sentry-sdk" }, { name = "tenacity" }, + { name = "tzdata", marker = "sys_platform == 'win32'" }, { name = "wandb" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0e/53/1b0350a64837df3e29eda6149a542f3a51e706122086f82547153820e982/weave-0.51.59.tar.gz", hash = "sha256:fad34c0478f3470401274cba8fa2bfd45d14a187db0a5724bd507e356761b349", size = 480572, upload-time = "2025-07-25T22:05:07.458Z" } +sdist = { url = "https://files.pythonhosted.org/packages/be/30/b795b5a857e8a908e68f3ed969587bb2bc63527ef2260f72ac1a6fd983e8/weave-0.52.16.tar.gz", hash = "sha256:7bb8fdce0393007e9c40fb1769d0606bfe55401c4cd13146457ccac4b49c695d", size = 607024, upload-time = "2025-11-07T19:45:30.898Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/bc/fa5ffb887a1ee28109b29c62416c9e0f41da8e75e6871671208b3d42b392/weave-0.51.59-py3-none-any.whl", hash = "sha256:2238578574ecdf6285efdf028c78987769720242ac75b7b84b1dbc59060468ce", size = 612468, upload-time = "2025-07-25T22:05:05.088Z" }, + { url = "https://files.pythonhosted.org/packages/e5/87/a54513796605dfaef2c3c23c2733bcb4b24866a623635c057b2ffdb74052/weave-0.52.16-py3-none-any.whl", hash = "sha256:85985b8cf233032c6d915dfac95b3bcccb1304444d99a6b4a61f3666b58146ce", size = 764366, upload-time = "2025-11-07T19:45:28.878Z" }, ] [[package]] @@ -7136,34 +7133,29 @@ wheels = [ [[package]] name = "zope-event" -version = "6.0" +version = "6.1" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "setuptools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c2/d8/9c8b0c6bb1db09725395618f68d3b8a08089fca0aed28437500caaf713ee/zope_event-6.0.tar.gz", hash = "sha256:0ebac894fa7c5f8b7a89141c272133d8c1de6ddc75ea4b1f327f00d1f890df92", size = 18731, upload-time = "2025-09-12T07:10:13.551Z" } +sdist = { url = "https://files.pythonhosted.org/packages/46/33/d3eeac228fc14de76615612ee208be2d8a5b5b0fada36bf9b62d6b40600c/zope_event-6.1.tar.gz", hash = "sha256:6052a3e0cb8565d3d4ef1a3a7809336ac519bc4fe38398cb8d466db09adef4f0", size = 18739, upload-time = "2025-11-07T08:05:49.934Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/b5/1abb5a8b443314c978617bf46d5d9ad648bdf21058074e817d7efbb257db/zope_event-6.0-py3-none-any.whl", hash = "sha256:6f0922593407cc673e7d8766b492c519f91bdc99f3080fe43dcec0a800d682a3", size = 6409, upload-time = "2025-09-12T07:10:12.316Z" }, + { url = "https://files.pythonhosted.org/packages/c2/b0/956902e5e1302f8c5d124e219c6bf214e2649f92ad5fce85b05c039a04c9/zope_event-6.1-py3-none-any.whl", hash = "sha256:0ca78b6391b694272b23ec1335c0294cc471065ed10f7f606858fc54566c25a0", size = 6414, upload-time = "2025-11-07T08:05:48.874Z" }, ] [[package]] name = "zope-interface" -version = "8.0.1" +version = "8.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/88/3a/7fcf02178b8fad0a51e67e32765cd039ae505d054d744d76b8c2bbcba5ba/zope_interface-8.0.1.tar.gz", hash = "sha256:eba5610d042c3704a48222f7f7c6ab5b243ed26f917e2bc69379456b115e02d1", size = 253746, upload-time = "2025-09-25T05:55:51.285Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/7d/b5b85e09f87be5f33decde2626347123696fc6d9d655cb16f5a986b60a97/zope_interface-8.1.tar.gz", hash = "sha256:a02ee40770c6a2f3d168a8f71f09b62aec3e4fb366da83f8e849dbaa5b38d12f", size = 253831, upload-time = "2025-11-10T07:56:24.825Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f2/2f/c10c739bcb9b072090c97c2e08533777497190daa19d190d72b4cce9c7cb/zope_interface-8.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4bd01022d2e1bce4a4a4ed9549edb25393c92e607d7daa6deff843f1f68b479d", size = 207903, upload-time = "2025-09-25T05:58:21.671Z" }, - { url = "https://files.pythonhosted.org/packages/b5/e1/9845ac3697f108d9a1af6912170c59a23732090bbfb35955fe77e5544955/zope_interface-8.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:29be8db8b712d94f1c05e24ea230a879271d787205ba1c9a6100d1d81f06c69a", size = 208345, upload-time = "2025-09-25T05:58:24.217Z" }, - { url = "https://files.pythonhosted.org/packages/f2/49/6573bc8b841cfab18e80c8e8259f1abdbbf716140011370de30231be79ad/zope_interface-8.0.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:51ae1b856565b30455b7879fdf0a56a88763b401d3f814fa9f9542d7410dbd7e", size = 255027, upload-time = "2025-09-25T05:58:19.975Z" }, - { url = "https://files.pythonhosted.org/packages/e2/fd/908b0fd4b1ab6e412dfac9bd2b606f2893ef9ba3dd36d643f5e5b94c57b3/zope_interface-8.0.1-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d2e7596149cb1acd1d4d41b9f8fe2ffc0e9e29e2e91d026311814181d0d9efaf", size = 259800, upload-time = "2025-09-25T05:58:11.487Z" }, - { url = "https://files.pythonhosted.org/packages/dc/78/8419a2b4e88410520ed4b7f93bbd25a6d4ae66c4e2b131320f2b90f43077/zope_interface-8.0.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b2737c11c34fb9128816759864752d007ec4f987b571c934c30723ed881a7a4f", size = 260978, upload-time = "2025-09-25T06:26:24.483Z" }, - { url = "https://files.pythonhosted.org/packages/e5/90/caf68152c292f1810e2bd3acd2177badf08a740aa8a348714617d6c9ad0b/zope_interface-8.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:cf66e4bf731aa7e0ced855bb3670e8cda772f6515a475c6a107bad5cb6604103", size = 212155, upload-time = "2025-09-25T05:59:40.318Z" }, - { url = "https://files.pythonhosted.org/packages/dc/a6/0f08713ddda834c428ebf97b2a7fd8dea50c0100065a8955924dbd94dae8/zope_interface-8.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:115f27c1cc95ce7a517d960ef381beedb0a7ce9489645e80b9ab3cbf8a78799c", size = 208609, upload-time = "2025-09-25T05:58:53.698Z" }, - { url = "https://files.pythonhosted.org/packages/e9/5e/d423045f54dc81e0991ec655041e7a0eccf6b2642535839dd364b35f4d7f/zope_interface-8.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:af655c573b84e3cb6a4f6fd3fbe04e4dc91c63c6b6f99019b3713ef964e589bc", size = 208797, upload-time = "2025-09-25T05:58:56.258Z" }, - { url = "https://files.pythonhosted.org/packages/c6/43/39d4bb3f7a80ebd261446792493cfa4e198badd47107224f5b6fe1997ad9/zope_interface-8.0.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:23f82ef9b2d5370750cc1bf883c3b94c33d098ce08557922a3fbc7ff3b63dfe1", size = 259242, upload-time = "2025-09-25T05:58:21.602Z" }, - { url = "https://files.pythonhosted.org/packages/da/29/49effcff64ef30731e35520a152a9dfcafec86cf114b4c2aff942e8264ba/zope_interface-8.0.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35a1565d5244997f2e629c5c68715b3d9d9036e8df23c4068b08d9316dcb2822", size = 264696, upload-time = "2025-09-25T05:58:13.351Z" }, - { url = "https://files.pythonhosted.org/packages/c7/39/b947673ec9a258eeaa20208dd2f6127d9fbb3e5071272a674ebe02063a78/zope_interface-8.0.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:029ea1db7e855a475bf88d9910baab4e94d007a054810e9007ac037a91c67c6f", size = 264229, upload-time = "2025-09-25T06:26:26.226Z" }, - { url = "https://files.pythonhosted.org/packages/8f/ee/eed6efd1fc3788d1bef7a814e0592d8173b7fe601c699b935009df035fc2/zope_interface-8.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0beb3e7f7dc153944076fcaf717a935f68d39efa9fce96ec97bafcc0c2ea6cab", size = 212270, upload-time = "2025-09-25T05:58:53.584Z" }, + { url = "https://files.pythonhosted.org/packages/dd/a5/92e53d4d67c127d3ed0e002b90e758a28b4dacb9d81da617c3bae28d2907/zope_interface-8.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:db263a60c728c86e6a74945f3f74cfe0ede252e726cf71e05a0c7aca8d9d5432", size = 207891, upload-time = "2025-11-10T07:58:53.189Z" }, + { url = "https://files.pythonhosted.org/packages/b3/76/a100cc050aa76df9bcf8bbd51000724465e2336fd4c786b5904c6c6dfc55/zope_interface-8.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cfa89e5b05b7a79ab34e368293ad008321231e321b3ce4430487407b4fe3450a", size = 208335, upload-time = "2025-11-10T07:58:54.232Z" }, + { url = "https://files.pythonhosted.org/packages/ab/ae/37c3e964c599c57323e02ca92a6bf81b4bc9848b88fb5eb3f6fc26320af2/zope_interface-8.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:87eaf011912a06ef86da70aba2ca0ddb68b8ab84a7d1da6b144a586b70a61bca", size = 255011, upload-time = "2025-11-10T07:58:30.304Z" }, + { url = "https://files.pythonhosted.org/packages/b6/9b/b693b6021d83177db2f5237fc3917921c7f497bac9a062eba422435ee172/zope_interface-8.1-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10f06d128f1c181ded3af08c5004abcb3719c13a976ce9163124e7eeded6899a", size = 259780, upload-time = "2025-11-10T07:58:33.306Z" }, + { url = "https://files.pythonhosted.org/packages/c3/e2/0d1783563892ad46fedd0b1369e8d60ff8fcec0cd6859ab2d07e36f4f0ff/zope_interface-8.1-cp311-cp311-win_amd64.whl", hash = "sha256:17fb5382a4b9bd2ea05648a457c583e5a69f0bfa3076ed1963d48bc42a2da81f", size = 212143, upload-time = "2025-11-10T07:59:56.744Z" }, + { url = "https://files.pythonhosted.org/packages/02/6f/0bfb2beb373b7ca1c3d12807678f20bac1a07f62892f84305a1b544da785/zope_interface-8.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a8aee385282ab2a9813171b15f41317e22ab0a96cf05e9e9e16b29f4af8b6feb", size = 208596, upload-time = "2025-11-10T07:58:09.945Z" }, + { url = "https://files.pythonhosted.org/packages/49/50/169981a42812a2e21bc33fb48640ad01a790ed93c179a9854fe66f901641/zope_interface-8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:af651a87f950a13e45fd49510111f582717fb106a63d6a0c2d3ba86b29734f07", size = 208787, upload-time = "2025-11-10T07:58:11.4Z" }, + { url = "https://files.pythonhosted.org/packages/f8/fb/cb9cb9591a7c78d0878b280b3d3cea42ec17c69c2219b655521b9daa36e8/zope_interface-8.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:80ed7683cf337f3b295e4b96153e2e87f12595c218323dc237c0147a6cc9da26", size = 259224, upload-time = "2025-11-10T07:58:31.882Z" }, + { url = "https://files.pythonhosted.org/packages/18/28/aa89afcefbb93b26934bb5cf030774804b267de2d9300f8bd8e0c6f20bc4/zope_interface-8.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb9a7a45944b28c16d25df7a91bf2b9bdb919fa2b9e11782366a1e737d266ec1", size = 264671, upload-time = "2025-11-10T07:58:36.283Z" }, + { url = "https://files.pythonhosted.org/packages/de/7a/9cea2b9e64d74f27484c59b9a42d6854506673eb0b90c3b8cd088f652d5b/zope_interface-8.1-cp312-cp312-win_amd64.whl", hash = "sha256:fc5e120e3618741714c474b2427d08d36bd292855208b4397e325bd50d81439d", size = 212257, upload-time = "2025-11-10T07:59:54.691Z" }, ] [[package]] diff --git a/docker/docker-compose-template.yaml b/docker/docker-compose-template.yaml index 4703d7d344..e01437689d 100644 --- a/docker/docker-compose-template.yaml +++ b/docker/docker-compose-template.yaml @@ -2,7 +2,7 @@ x-shared-env: &shared-api-worker-env services: # API service api: - image: langgenius/dify-api:1.10.0-rc1 + image: langgenius/dify-api:1.10.0 restart: always environment: # Use the shared environment variables. @@ -31,7 +31,7 @@ services: # worker service # The Celery worker for processing all queues (dataset, workflow, mail, etc.) worker: - image: langgenius/dify-api:1.10.0-rc1 + image: langgenius/dify-api:1.10.0 restart: always environment: # Use the shared environment variables. @@ -58,7 +58,7 @@ services: # worker_beat service # Celery beat for scheduling periodic tasks. worker_beat: - image: langgenius/dify-api:1.10.0-rc1 + image: langgenius/dify-api:1.10.0 restart: always environment: # Use the shared environment variables. @@ -76,7 +76,7 @@ services: # Frontend web application. web: - image: langgenius/dify-web:1.10.0-rc1 + image: langgenius/dify-web:1.10.0 restart: always environment: CONSOLE_API_URL: ${CONSOLE_API_URL:-} @@ -182,7 +182,7 @@ services: # plugin daemon plugin_daemon: - image: langgenius/dify-plugin-daemon:0.4.0-local + image: langgenius/dify-plugin-daemon:0.4.1-local restart: always environment: # Use the shared environment variables. diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index b32f893a89..0117ebce3f 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -625,7 +625,7 @@ x-shared-env: &shared-api-worker-env services: # API service api: - image: langgenius/dify-api:1.10.0-rc1 + image: langgenius/dify-api:1.10.0 restart: always environment: # Use the shared environment variables. @@ -654,7 +654,7 @@ services: # worker service # The Celery worker for processing all queues (dataset, workflow, mail, etc.) worker: - image: langgenius/dify-api:1.10.0-rc1 + image: langgenius/dify-api:1.10.0 restart: always environment: # Use the shared environment variables. @@ -681,7 +681,7 @@ services: # worker_beat service # Celery beat for scheduling periodic tasks. worker_beat: - image: langgenius/dify-api:1.10.0-rc1 + image: langgenius/dify-api:1.10.0 restart: always environment: # Use the shared environment variables. @@ -699,7 +699,7 @@ services: # Frontend web application. web: - image: langgenius/dify-web:1.10.0-rc1 + image: langgenius/dify-web:1.10.0 restart: always environment: CONSOLE_API_URL: ${CONSOLE_API_URL:-} @@ -805,7 +805,7 @@ services: # plugin daemon plugin_daemon: - image: langgenius/dify-plugin-daemon:0.4.0-local + image: langgenius/dify-plugin-daemon:0.4.1-local restart: always environment: # Use the shared environment variables. diff --git a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/card-view.tsx b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/card-view.tsx index 7e592729a5..57f3ef6881 100644 --- a/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/card-view.tsx +++ b/web/app/(commonLayout)/app/(appDetailLayout)/[appId]/overview/card-view.tsx @@ -37,18 +37,22 @@ const CardView: FC = ({ appId, isInPanel, className }) => { const appDetail = useAppStore(state => state.appDetail) const setAppDetail = useAppStore(state => state.setAppDetail) + const isWorkflowApp = appDetail?.mode === AppModeEnum.WORKFLOW const showMCPCard = isInPanel - const showTriggerCard = isInPanel && appDetail?.mode === AppModeEnum.WORKFLOW - const { data: currentWorkflow } = useAppWorkflow(appDetail?.mode === AppModeEnum.WORKFLOW ? appDetail.id : '') - const hasTriggerNode = useMemo(() => { - if (appDetail?.mode !== AppModeEnum.WORKFLOW) + const showTriggerCard = isInPanel && isWorkflowApp + const { data: currentWorkflow } = useAppWorkflow(isWorkflowApp ? appDetail.id : '') + const hasTriggerNode = useMemo(() => { + if (!isWorkflowApp) return false - const nodes = currentWorkflow?.graph?.nodes || [] + if (!currentWorkflow) + return null + const nodes = currentWorkflow.graph?.nodes || [] return nodes.some((node) => { const nodeType = node.data?.type as BlockEnum | undefined return !!nodeType && isTriggerNode(nodeType) }) - }, [appDetail?.mode, currentWorkflow]) + }, [isWorkflowApp, currentWorkflow]) + const shouldRenderAppCards = !isWorkflowApp || hasTriggerNode === false const updateAppDetail = async () => { try { @@ -123,7 +127,7 @@ const CardView: FC = ({ appId, isInPanel, className }) => { return (
{ - !hasTriggerNode && ( + shouldRenderAppCards && ( <> type ConversationListItem = ChatConversationGeneralDetail | CompletionConversationGeneralDetail @@ -779,15 +780,17 @@ function DetailPanel({ detail, onFeedback }: IDetailPanel) { }
{showMessageLogModal && ( - { - setCurrentLogItem() - setShowMessageLogModal(false) - }} - defaultTab={currentLogModalActiveTab} - /> + + { + setCurrentLogItem() + setShowMessageLogModal(false) + }} + defaultTab={currentLogModalActiveTab} + /> + )} {!isChatMode && showPromptLogModal && ( { )} { - (!systemFeatures.webapp_auth.enabled) - ? <> - - - - : !(isGettingUserCanAccessApp || !userCanAccessApp?.result) && ( - <> + !app.has_draft_trigger && ( + (!systemFeatures.webapp_auth.enabled) + ? <> - ) + : !(isGettingUserCanAccessApp || !userCanAccessApp?.result) && ( + <> + + + + ) + ) } { diff --git a/web/app/components/apps/footer.tsx b/web/app/components/apps/footer.tsx index 9fed4c8757..16411ffc57 100644 --- a/web/app/components/apps/footer.tsx +++ b/web/app/components/apps/footer.tsx @@ -1,6 +1,6 @@ import React from 'react' import Link from 'next/link' -import { RiDiscordFill, RiGithubFill } from '@remixicon/react' +import { RiDiscordFill, RiDiscussLine, RiGithubFill } from '@remixicon/react' import { useTranslation } from 'react-i18next' type CustomLinkProps = { @@ -38,6 +38,9 @@ const Footer = () => { + + + ) diff --git a/web/app/components/base/icons/assets/vender/line/others/apps-02.svg b/web/app/components/base/icons/assets/vender/line/others/apps-02.svg deleted file mode 100644 index 8e1fec9ecc..0000000000 --- a/web/app/components/base/icons/assets/vender/line/others/apps-02.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/web/app/components/base/icons/assets/vender/line/others/exchange-02.svg b/web/app/components/base/icons/assets/vender/line/others/exchange-02.svg deleted file mode 100644 index 45d2770277..0000000000 --- a/web/app/components/base/icons/assets/vender/line/others/exchange-02.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/web/app/components/base/icons/assets/vender/line/others/file-code.svg b/web/app/components/base/icons/assets/vender/line/others/file-code.svg deleted file mode 100644 index eb77033a0a..0000000000 --- a/web/app/components/base/icons/assets/vender/line/others/file-code.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/web/app/components/base/icons/icon-gallery.stories.tsx b/web/app/components/base/icons/icon-gallery.stories.tsx new file mode 100644 index 0000000000..7da71b3b0b --- /dev/null +++ b/web/app/components/base/icons/icon-gallery.stories.tsx @@ -0,0 +1,258 @@ +import type { Meta, StoryObj } from '@storybook/nextjs' +import React from 'react' + +declare const require: any + +type IconComponent = React.ComponentType> + +type IconEntry = { + name: string + category: string + path: string + Component: IconComponent +} + +const iconContext = require.context('./src', true, /\.tsx$/) + +const iconEntries: IconEntry[] = iconContext + .keys() + .filter((key: string) => !key.endsWith('.stories.tsx') && !key.endsWith('.spec.tsx')) + .map((key: string) => { + const mod = iconContext(key) + const Component = mod.default as IconComponent | undefined + if (!Component) + return null + + const relativePath = key.replace(/^\.\//, '') + const path = `app/components/base/icons/src/${relativePath}` + const parts = relativePath.split('/') + const fileName = parts.pop() || '' + const category = parts.length ? parts.join('/') : '(root)' + const name = Component.displayName || fileName.replace(/\.tsx$/, '') + + return { + name, + category, + path, + Component, + } + }) + .filter(Boolean) as IconEntry[] + +const sortedEntries = [...iconEntries].sort((a, b) => { + if (a.category === b.category) + return a.name.localeCompare(b.name) + return a.category.localeCompare(b.category) +}) + +const filterEntries = (entries: IconEntry[], query: string) => { + const normalized = query.trim().toLowerCase() + if (!normalized) + return entries + + return entries.filter(entry => + entry.name.toLowerCase().includes(normalized) + || entry.path.toLowerCase().includes(normalized) + || entry.category.toLowerCase().includes(normalized), + ) +} + +const groupByCategory = (entries: IconEntry[]) => entries.reduce((acc, entry) => { + if (!acc[entry.category]) + acc[entry.category] = [] + + acc[entry.category].push(entry) + return acc +}, {} as Record) + +const containerStyle: React.CSSProperties = { + padding: 24, + display: 'flex', + flexDirection: 'column', + gap: 24, +} + +const headerStyle: React.CSSProperties = { + display: 'flex', + flexDirection: 'column', + gap: 8, +} + +const controlsStyle: React.CSSProperties = { + display: 'flex', + alignItems: 'center', + gap: 12, + flexWrap: 'wrap', +} + +const searchInputStyle: React.CSSProperties = { + padding: '8px 12px', + minWidth: 280, + borderRadius: 6, + border: '1px solid #d0d0d5', +} + +const toggleButtonStyle: React.CSSProperties = { + padding: '8px 12px', + borderRadius: 6, + border: '1px solid #d0d0d5', + background: '#fff', + cursor: 'pointer', +} + +const emptyTextStyle: React.CSSProperties = { color: '#5f5f66' } + +const sectionStyle: React.CSSProperties = { + display: 'flex', + flexDirection: 'column', + gap: 12, +} + +const gridStyle: React.CSSProperties = { + display: 'grid', + gap: 12, + gridTemplateColumns: 'repeat(auto-fill, minmax(200px, 1fr))', +} + +const cardStyle: React.CSSProperties = { + border: '1px solid #e1e1e8', + borderRadius: 8, + padding: 12, + display: 'flex', + flexDirection: 'column', + gap: 8, + minHeight: 140, +} + +const previewBaseStyle: React.CSSProperties = { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + minHeight: 48, + borderRadius: 6, +} + +const nameButtonBaseStyle: React.CSSProperties = { + display: 'inline-flex', + padding: 0, + border: 'none', + background: 'transparent', + font: 'inherit', + cursor: 'pointer', + textAlign: 'left', + fontWeight: 600, +} + +const PREVIEW_SIZE = 40 + +const IconGalleryStory = () => { + const [query, setQuery] = React.useState('') + const [copiedPath, setCopiedPath] = React.useState(null) + const [previewTheme, setPreviewTheme] = React.useState<'light' | 'dark'>('light') + + const filtered = React.useMemo(() => filterEntries(sortedEntries, query), [query]) + + const grouped = React.useMemo(() => groupByCategory(filtered), [filtered]) + + const categoryOrder = React.useMemo( + () => Object.keys(grouped).sort((a, b) => a.localeCompare(b)), + [grouped], + ) + + React.useEffect(() => { + if (!copiedPath) + return undefined + + const timerId = window.setTimeout(() => { + setCopiedPath(null) + }, 1200) + + return () => window.clearTimeout(timerId) + }, [copiedPath]) + + const handleCopy = React.useCallback((text: string) => { + navigator.clipboard?.writeText(text) + .then(() => { + setCopiedPath(text) + }) + .catch((err) => { + console.error('Failed to copy icon path:', err) + }) + }, []) + + return ( +
+
+

Icon Gallery

+

+ Browse all icon components sourced from app/components/base/icons/src. Use the search bar + to filter by name or path. +

+
+ setQuery(event.target.value)} + /> + {filtered.length} icons + +
+
+ {categoryOrder.length === 0 && ( +

No icons match the current filter.

+ )} + {categoryOrder.map(category => ( +
+

{category}

+
+ {grouped[category].map(entry => ( +
+
+ +
+ +
+ ))} +
+
+ ))} +
+ ) +} + +const meta: Meta = { + title: 'Base/Icons/Icon Gallery', + component: IconGalleryStory, + parameters: { + layout: 'fullscreen', + }, +} + +export default meta + +type Story = StoryObj + +export const All: Story = { + render: () => , +} diff --git a/web/app/components/base/icons/src/vender/line/others/Apps02.json b/web/app/components/base/icons/src/vender/line/others/Apps02.json deleted file mode 100644 index 31378e175d..0000000000 --- a/web/app/components/base/icons/src/vender/line/others/Apps02.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "icon": { - "type": "element", - "isRootNode": true, - "name": "svg", - "attributes": { - "width": "16", - "height": "16", - "viewBox": "0 0 16 16", - "fill": "none", - "xmlns": "http://www.w3.org/2000/svg" - }, - "children": [ - { - "type": "element", - "name": "g", - "attributes": { - "id": "apps-2-line" - }, - "children": [ - { - "type": "element", - "name": "path", - "attributes": { - "id": "Vector", - "d": "M4.66602 7.6665C3.00916 7.6665 1.66602 6.32336 1.66602 4.6665C1.66602 3.00965 3.00916 1.6665 4.66602 1.6665C6.32287 1.6665 7.66602 3.00965 7.66602 4.6665C7.66602 6.32336 6.32287 7.6665 4.66602 7.6665ZM4.66602 14.3332C3.00916 14.3332 1.66602 12.99 1.66602 11.3332C1.66602 9.6763 3.00916 8.33317 4.66602 8.33317C6.32287 8.33317 7.66602 9.6763 7.66602 11.3332C7.66602 12.99 6.32287 14.3332 4.66602 14.3332ZM11.3327 7.6665C9.67582 7.6665 8.33268 6.32336 8.33268 4.6665C8.33268 3.00965 9.67582 1.6665 11.3327 1.6665C12.9895 1.6665 14.3327 3.00965 14.3327 4.6665C14.3327 6.32336 12.9895 7.6665 11.3327 7.6665ZM11.3327 14.3332C9.67582 14.3332 8.33268 12.99 8.33268 11.3332C8.33268 9.6763 9.67582 8.33317 11.3327 8.33317C12.9895 8.33317 14.3327 9.6763 14.3327 11.3332C14.3327 12.99 12.9895 14.3332 11.3327 14.3332ZM4.66602 6.33317C5.58649 6.33317 6.33268 5.58698 6.33268 4.6665C6.33268 3.74603 5.58649 2.99984 4.66602 2.99984C3.74554 2.99984 2.99935 3.74603 2.99935 4.6665C2.99935 5.58698 3.74554 6.33317 4.66602 6.33317ZM4.66602 12.9998C5.58649 12.9998 6.33268 12.2536 6.33268 11.3332C6.33268 10.4127 5.58649 9.6665 4.66602 9.6665C3.74554 9.6665 2.99935 10.4127 2.99935 11.3332C2.99935 12.2536 3.74554 12.9998 4.66602 12.9998ZM11.3327 6.33317C12.2531 6.33317 12.9993 5.58698 12.9993 4.6665C12.9993 3.74603 12.2531 2.99984 11.3327 2.99984C10.4122 2.99984 9.66602 3.74603 9.66602 4.6665C9.66602 5.58698 10.4122 6.33317 11.3327 6.33317ZM11.3327 12.9998C12.2531 12.9998 12.9993 12.2536 12.9993 11.3332C12.9993 10.4127 12.2531 9.6665 11.3327 9.6665C10.4122 9.6665 9.66602 10.4127 9.66602 11.3332C9.66602 12.2536 10.4122 12.9998 11.3327 12.9998Z", - "fill": "currentColor" - }, - "children": [] - } - ] - } - ] - }, - "name": "Apps02" -} diff --git a/web/app/components/base/icons/src/vender/line/others/Apps02.tsx b/web/app/components/base/icons/src/vender/line/others/Apps02.tsx deleted file mode 100644 index 3236059d8d..0000000000 --- a/web/app/components/base/icons/src/vender/line/others/Apps02.tsx +++ /dev/null @@ -1,20 +0,0 @@ -// GENERATE BY script -// DON NOT EDIT IT MANUALLY - -import * as React from 'react' -import data from './Apps02.json' -import IconBase from '@/app/components/base/icons/IconBase' -import type { IconData } from '@/app/components/base/icons/IconBase' - -const Icon = ( - { - ref, - ...props - }: React.SVGProps & { - ref?: React.RefObject>; - }, -) => - -Icon.displayName = 'Apps02' - -export default Icon diff --git a/web/app/components/base/icons/src/vender/line/others/Exchange02.json b/web/app/components/base/icons/src/vender/line/others/Exchange02.json deleted file mode 100644 index 3672d8b88b..0000000000 --- a/web/app/components/base/icons/src/vender/line/others/Exchange02.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "icon": { - "type": "element", - "isRootNode": true, - "name": "svg", - "attributes": { - "width": "16", - "height": "16", - "viewBox": "0 0 16 16", - "fill": "none", - "xmlns": "http://www.w3.org/2000/svg" - }, - "children": [ - { - "type": "element", - "name": "path", - "attributes": { - "d": "M4.66602 14.3334C3.00916 14.3334 1.66602 12.9903 1.66602 11.3334C1.66602 9.67655 3.00916 8.33342 4.66602 8.33342C6.32287 8.33342 7.66602 9.67655 7.66602 11.3334C7.66602 12.9903 6.32287 14.3334 4.66602 14.3334ZM11.3327 7.66675C9.67582 7.66675 8.33268 6.3236 8.33268 4.66675C8.33268 3.00989 9.67582 1.66675 11.3327 1.66675C12.9895 1.66675 14.3327 3.00989 14.3327 4.66675C14.3327 6.3236 12.9895 7.66675 11.3327 7.66675ZM4.66602 13.0001C5.58649 13.0001 6.33268 12.2539 6.33268 11.3334C6.33268 10.4129 5.58649 9.66675 4.66602 9.66675C3.74554 9.66675 2.99935 10.4129 2.99935 11.3334C2.99935 12.2539 3.74554 13.0001 4.66602 13.0001ZM11.3327 6.33342C12.2531 6.33342 12.9993 5.58722 12.9993 4.66675C12.9993 3.74627 12.2531 3.00008 11.3327 3.00008C10.4122 3.00008 9.66602 3.74627 9.66602 4.66675C9.66602 5.58722 10.4122 6.33342 11.3327 6.33342ZM1.99935 5.33341C1.99935 3.49247 3.49174 2.00008 5.33268 2.00008H7.33268V3.33341H5.33268C4.22812 3.33341 3.33268 4.22885 3.33268 5.33341V7.33342H1.99935V5.33341ZM13.9993 8.66675H12.666V10.6667C12.666 11.7713 11.7706 12.6667 10.666 12.6667H8.66602V14.0001H10.666C12.5069 14.0001 13.9993 12.5077 13.9993 10.6667V8.66675Z", - "fill": "currentColor" - }, - "children": [] - } - ] - }, - "name": "Exchange02" -} diff --git a/web/app/components/base/icons/src/vender/line/others/Exchange02.tsx b/web/app/components/base/icons/src/vender/line/others/Exchange02.tsx deleted file mode 100644 index 4f58de3619..0000000000 --- a/web/app/components/base/icons/src/vender/line/others/Exchange02.tsx +++ /dev/null @@ -1,20 +0,0 @@ -// GENERATE BY script -// DON NOT EDIT IT MANUALLY - -import * as React from 'react' -import data from './Exchange02.json' -import IconBase from '@/app/components/base/icons/IconBase' -import type { IconData } from '@/app/components/base/icons/IconBase' - -const Icon = ( - { - ref, - ...props - }: React.SVGProps & { - ref?: React.RefObject>; - }, -) => - -Icon.displayName = 'Exchange02' - -export default Icon diff --git a/web/app/components/base/icons/src/vender/line/others/FileCode.json b/web/app/components/base/icons/src/vender/line/others/FileCode.json deleted file mode 100644 index d61af3fdb3..0000000000 --- a/web/app/components/base/icons/src/vender/line/others/FileCode.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "icon": { - "type": "element", - "isRootNode": true, - "name": "svg", - "attributes": { - "width": "16", - "height": "16", - "viewBox": "0 0 16 16", - "fill": "none", - "xmlns": "http://www.w3.org/2000/svg" - }, - "children": [ - { - "type": "element", - "name": "path", - "attributes": { - "d": "M10 2.66659H3.33333V13.3333H12.6667V5.33325H10V2.66659ZM2 1.99445C2 1.62929 2.29833 1.33325 2.66567 1.33325H10.6667L13.9998 4.66658L14 13.9949C14 14.3659 13.7034 14.6666 13.3377 14.6666H2.66227C2.29651 14.6666 2 14.3631 2 14.0054V1.99445ZM11.7713 7.99992L9.4142 10.3569L8.4714 9.41412L9.8856 7.99992L8.4714 6.58571L9.4142 5.6429L11.7713 7.99992ZM4.22877 7.99992L6.58579 5.6429L7.5286 6.58571L6.11438 7.99992L7.5286 9.41412L6.58579 10.3569L4.22877 7.99992Z", - "fill": "currentColor" - }, - "children": [] - } - ] - }, - "name": "FileCode" -} diff --git a/web/app/components/base/icons/src/vender/line/others/FileCode.tsx b/web/app/components/base/icons/src/vender/line/others/FileCode.tsx deleted file mode 100644 index 3660aad794..0000000000 --- a/web/app/components/base/icons/src/vender/line/others/FileCode.tsx +++ /dev/null @@ -1,20 +0,0 @@ -// GENERATE BY script -// DON NOT EDIT IT MANUALLY - -import * as React from 'react' -import data from './FileCode.json' -import IconBase from '@/app/components/base/icons/IconBase' -import type { IconData } from '@/app/components/base/icons/IconBase' - -const Icon = ( - { - ref, - ...props - }: React.SVGProps & { - ref?: React.RefObject>; - }, -) => - -Icon.displayName = 'FileCode' - -export default Icon diff --git a/web/app/components/base/icons/src/vender/line/others/index.ts b/web/app/components/base/icons/src/vender/line/others/index.ts index 2322e9d9f1..99db66b397 100644 --- a/web/app/components/base/icons/src/vender/line/others/index.ts +++ b/web/app/components/base/icons/src/vender/line/others/index.ts @@ -1,10 +1,7 @@ -export { default as Apps02 } from './Apps02' export { default as BubbleX } from './BubbleX' export { default as Colors } from './Colors' export { default as DragHandle } from './DragHandle' export { default as Env } from './Env' -export { default as Exchange02 } from './Exchange02' -export { default as FileCode } from './FileCode' export { default as GlobalVariable } from './GlobalVariable' export { default as Icon3Dots } from './Icon3Dots' export { default as LongArrowLeft } from './LongArrowLeft' diff --git a/web/app/components/base/message-log-modal/index.stories.tsx b/web/app/components/base/message-log-modal/index.stories.tsx index 3dd4b06a55..4173a85ebc 100644 --- a/web/app/components/base/message-log-modal/index.stories.tsx +++ b/web/app/components/base/message-log-modal/index.stories.tsx @@ -6,6 +6,7 @@ import { useStore } from '@/app/components/app/store' import type { WorkflowRunDetailResponse } from '@/models/log' import type { NodeTracing, NodeTracingListResponse } from '@/types/workflow' import { BlockEnum } from '@/app/components/workflow/types' +import { WorkflowContextProvider } from '@/app/components/workflow/context' const SAMPLE_APP_DETAIL = { id: 'app-demo-1', @@ -143,10 +144,12 @@ const MessageLogPreview = (props: MessageLogModalProps) => { return (
- + + +
) } diff --git a/web/app/components/datasets/documents/detail/completed/common/regeneration-modal.tsx b/web/app/components/datasets/documents/detail/completed/common/regeneration-modal.tsx index 95bb339db9..f90fd7ac60 100644 --- a/web/app/components/datasets/documents/detail/completed/common/regeneration-modal.tsx +++ b/web/app/components/datasets/documents/detail/completed/common/regeneration-modal.tsx @@ -121,7 +121,7 @@ const RegenerationModal: FC = ({ }) return ( - + {!loading && !updateSucceeded && } {loading && !updateSucceeded && } {!loading && updateSucceeded && } diff --git a/web/app/components/datasets/documents/detail/completed/index.tsx b/web/app/components/datasets/documents/detail/completed/index.tsx index 8fa167f976..09c63d54a1 100644 --- a/web/app/components/datasets/documents/detail/completed/index.tsx +++ b/web/app/components/datasets/documents/detail/completed/index.tsx @@ -124,6 +124,7 @@ const Completed: FC = ({ const [limit, setLimit] = useState(DEFAULT_LIMIT) const [fullScreen, setFullScreen] = useState(false) const [showNewChildSegmentModal, setShowNewChildSegmentModal] = useState(false) + const [isRegenerationModalOpen, setIsRegenerationModalOpen] = useState(false) const segmentListRef = useRef(null) const childSegmentListRef = useRef(null) @@ -669,6 +670,7 @@ const Completed: FC = ({ onClose={onCloseSegmentDetail} showOverlay={false} needCheckChunks + modal={isRegenerationModalOpen} > = ({ isEditMode={currSegment.isEditMode} onUpdate={handleUpdateSegment} onCancel={onCloseSegmentDetail} + onModalStateChange={setIsRegenerationModalOpen} /> {/* Create New Segment */} diff --git a/web/app/components/datasets/documents/detail/completed/segment-detail.tsx b/web/app/components/datasets/documents/detail/completed/segment-detail.tsx index bbd9df1adc..5e5ae6b485 100644 --- a/web/app/components/datasets/documents/detail/completed/segment-detail.tsx +++ b/web/app/components/datasets/documents/detail/completed/segment-detail.tsx @@ -27,6 +27,7 @@ type ISegmentDetailProps = { onCancel: () => void isEditMode?: boolean docForm: ChunkingMode + onModalStateChange?: (isOpen: boolean) => void } /** @@ -38,6 +39,7 @@ const SegmentDetail: FC = ({ onCancel, isEditMode, docForm, + onModalStateChange, }) => { const { t } = useTranslation() const [question, setQuestion] = useState(isEditMode ? segInfo?.content || '' : segInfo?.sign_content || '') @@ -68,11 +70,19 @@ const SegmentDetail: FC = ({ const handleRegeneration = useCallback(() => { setShowRegenerationModal(true) - }, []) + onModalStateChange?.(true) + }, [onModalStateChange]) const onCancelRegeneration = useCallback(() => { setShowRegenerationModal(false) - }, []) + onModalStateChange?.(false) + }, [onModalStateChange]) + + const onCloseAfterRegeneration = useCallback(() => { + setShowRegenerationModal(false) + onModalStateChange?.(false) + onCancel() // Close the edit drawer + }, [onCancel, onModalStateChange]) const onConfirmRegeneration = useCallback(() => { onUpdate(segInfo?.id || '', question, answer, keywords, true) @@ -161,7 +171,7 @@ const SegmentDetail: FC = ({ isShow={showRegenerationModal} onConfirm={onConfirmRegeneration} onCancel={onCancelRegeneration} - onClose={onCancelRegeneration} + onClose={onCloseAfterRegeneration} /> ) } diff --git a/web/app/components/header/account-setting/members-page/invite-modal/index.tsx b/web/app/components/header/account-setting/members-page/invite-modal/index.tsx index 264665805d..a432b8a4f0 100644 --- a/web/app/components/header/account-setting/members-page/invite-modal/index.tsx +++ b/web/app/components/header/account-setting/members-page/invite-modal/index.tsx @@ -17,8 +17,9 @@ import type { InvitationResult } from '@/models/common' import I18n from '@/context/i18n' import 'react-multi-email/dist/style.css' import { noop } from 'lodash-es' - import { useProviderContextSelector } from '@/context/provider-context' +import { useBoolean } from 'ahooks' + type IInviteModalProps = { isEmailSetup: boolean onCancel: () => void @@ -49,9 +50,15 @@ const InviteModal = ({ const { locale } = useContext(I18n) const [role, setRole] = useState('normal') + const [isSubmitting, { + setTrue: setIsSubmitting, + setFalse: setIsSubmitted, + }] = useBoolean(false) + const handleSend = useCallback(async () => { - if (isLimitExceeded) + if (isLimitExceeded || isSubmitting) return + setIsSubmitting() if (emails.map((email: string) => emailRegex.test(email)).every(Boolean)) { try { const { result, invitation_results } = await inviteMember({ @@ -70,7 +77,8 @@ const InviteModal = ({ else { notify({ type: 'error', message: t('common.members.emailInvalid') }) } - }, [isLimitExceeded, emails, role, locale, onCancel, onSend, notify, t]) + setIsSubmitted() + }, [isLimitExceeded, emails, role, locale, onCancel, onSend, notify, t, isSubmitting]) return (
@@ -133,7 +141,7 @@ const InviteModal = ({ tabIndex={0} className='w-full' onClick={handleSend} - disabled={!emails.length || isLimitExceeded} + disabled={!emails.length || isLimitExceeded || isSubmitting} variant='primary' > {t('common.members.sendInvite')} diff --git a/web/app/components/tools/add-tool-modal/D.png b/web/app/components/tools/add-tool-modal/D.png deleted file mode 100644 index 70b829c821..0000000000 Binary files a/web/app/components/tools/add-tool-modal/D.png and /dev/null differ diff --git a/web/app/components/tools/add-tool-modal/category.tsx b/web/app/components/tools/add-tool-modal/category.tsx deleted file mode 100644 index c1467a0ff4..0000000000 --- a/web/app/components/tools/add-tool-modal/category.tsx +++ /dev/null @@ -1,80 +0,0 @@ -'use client' -import { useRef } from 'react' -import { useTranslation } from 'react-i18next' -import { useContext } from 'use-context-selector' -import { useMount } from 'ahooks' -import cn from '@/utils/classnames' -import { Apps02 } from '@/app/components/base/icons/src/vender/line/others' -import I18n from '@/context/i18n' -import { getLanguage } from '@/i18n-config/language' -import { useStore as useLabelStore } from '@/app/components/tools/labels/store' -import { fetchLabelList } from '@/service/tools' -import { renderI18nObject } from '@/i18n-config' - -type Props = { - value: string - onSelect: (type: string) => void -} - -const Icon = ({ svgString, active }: { svgString: string; active: boolean }) => { - const svgRef = useRef(null) - const SVGParser = (svg: string) => { - if (!svg) - return null - const parser = new DOMParser() - const doc = parser.parseFromString(svg, 'image/svg+xml') - return doc.documentElement - } - useMount(() => { - const svgElement = SVGParser(svgString) - if (svgRef.current && svgElement) - svgRef.current.appendChild(svgElement) - }) - return -} - -const Category = ({ - value, - onSelect, -}: Props) => { - const { t } = useTranslation() - const { locale } = useContext(I18n) - const language = getLanguage(locale) - const labelList = useLabelStore(s => s.labelList) - const setLabelList = useLabelStore(s => s.setLabelList) - - useMount(() => { - fetchLabelList().then((res) => { - setLabelList(res) - }) - }) - - return ( -
-
{t('tools.addToolModal.category').toLocaleUpperCase()}
-
onSelect('')}> - - {t('tools.type.all')} -
- {labelList.map((label) => { - const labelText = typeof label.label === 'string' - ? label.label - : (label.label ? renderI18nObject(label.label, language) : '') - return ( -
onSelect(label.name)} - > -
- -
- {labelText} -
- ) - })} -
- ) -} -export default Category diff --git a/web/app/components/tools/add-tool-modal/empty.png b/web/app/components/tools/add-tool-modal/empty.png deleted file mode 100644 index da4007e45a..0000000000 Binary files a/web/app/components/tools/add-tool-modal/empty.png and /dev/null differ diff --git a/web/app/components/tools/add-tool-modal/index.tsx b/web/app/components/tools/add-tool-modal/index.tsx deleted file mode 100644 index 392fa02f3a..0000000000 --- a/web/app/components/tools/add-tool-modal/index.tsx +++ /dev/null @@ -1,258 +0,0 @@ -'use client' -import type { FC } from 'react' -import React, { useMemo, useState } from 'react' -import { useTranslation } from 'react-i18next' -import { useContext } from 'use-context-selector' -import { produce } from 'immer' -import { - RiAddLine, - RiCloseLine, -} from '@remixicon/react' -import { useMount } from 'ahooks' -import type { Collection, CustomCollectionBackend, Tool } from '../types' -import type { CollectionType } from '../types' -import Type from './type' -import Category from './category' -import Tools from './tools' -import cn from '@/utils/classnames' -import { basePath } from '@/utils/var' -import I18n from '@/context/i18n' -import Drawer from '@/app/components/base/drawer' -import Button from '@/app/components/base/button' -import Loading from '@/app/components/base/loading' -import Input from '@/app/components/base/input' -import EditCustomToolModal from '@/app/components/tools/edit-custom-collection-modal' -import ConfigCredential from '@/app/components/tools/setting/build-in/config-credentials' -import { - createCustomCollection, - fetchAllBuiltInTools, - fetchAllCustomTools, - fetchAllWorkflowTools, - removeBuiltInToolCredential, - updateBuiltInToolCredential, -} from '@/service/tools' -import type { ToolWithProvider } from '@/app/components/workflow/types' -import Toast from '@/app/components/base/toast' -import ConfigContext from '@/context/debug-configuration' -import type { ModelConfig } from '@/models/debug' - -type Props = { - onHide: () => void -} -// Add and Edit -const AddToolModal: FC = ({ - onHide, -}) => { - const { t } = useTranslation() - const { locale } = useContext(I18n) - const [currentType, setCurrentType] = useState('builtin') - const [currentCategory, setCurrentCategory] = useState('') - const [keywords, setKeywords] = useState('') - const handleKeywordsChange = (value: string) => { - setKeywords(value) - } - const isMatchingKeywords = (text: string, keywords: string) => { - return text.toLowerCase().includes(keywords.toLowerCase()) - } - const [toolList, setToolList] = useState([]) - const [listLoading, setListLoading] = useState(true) - const getAllTools = async () => { - setListLoading(true) - const buildInTools = await fetchAllBuiltInTools() - if (basePath) { - buildInTools.forEach((item) => { - if (typeof item.icon == 'string' && !item.icon.includes(basePath)) - item.icon = `${basePath}${item.icon}` - }) - } - const customTools = await fetchAllCustomTools() - const workflowTools = await fetchAllWorkflowTools() - const mergedToolList = [ - ...buildInTools, - ...customTools, - ...workflowTools.filter((toolWithProvider) => { - return !toolWithProvider.tools.some((tool) => { - return !!tool.parameters.find(item => item.name === '__image') - }) - }), - ] - setToolList(mergedToolList) - setListLoading(false) - } - const filteredList = useMemo(() => { - return toolList.filter((toolWithProvider) => { - if (currentType === 'all') - return true - else - return toolWithProvider.type === currentType - }).filter((toolWithProvider) => { - if (!currentCategory) - return true - else - return toolWithProvider.labels.includes(currentCategory) - }).filter((toolWithProvider) => { - return ( - isMatchingKeywords(toolWithProvider.name, keywords) - || toolWithProvider.tools.some((tool) => { - return Object.values(tool.label).some((label) => { - return isMatchingKeywords(label, keywords) - }) - }) - ) - }) - }, [currentType, currentCategory, toolList, keywords]) - - const { - modelConfig, - setModelConfig, - } = useContext(ConfigContext) - - const [isShowEditCollectionToolModal, setIsShowEditCustomCollectionModal] = useState(false) - const doCreateCustomToolCollection = async (data: CustomCollectionBackend) => { - await createCustomCollection(data) - Toast.notify({ - type: 'success', - message: t('common.api.actionSuccess'), - }) - setIsShowEditCustomCollectionModal(false) - getAllTools() - } - const [showSettingAuth, setShowSettingAuth] = useState(false) - const [collection, setCollection] = useState() - const toolSelectHandle = (collection: Collection, tool: Tool) => { - const parameters: Record = {} - if (tool.parameters) { - tool.parameters.forEach((item) => { - parameters[item.name] = '' - }) - } - - const nexModelConfig = produce(modelConfig, (draft: ModelConfig) => { - draft.agentConfig.tools.push({ - provider_id: collection.id || collection.name, - provider_type: collection.type as CollectionType, - provider_name: collection.name, - tool_name: tool.name, - tool_label: tool.label[locale] || tool.label[locale.replaceAll('-', '_')], - tool_parameters: parameters, - enabled: true, - }) - }) - setModelConfig(nexModelConfig) - } - const authSelectHandle = (provider: Collection) => { - setCollection(provider) - setShowSettingAuth(true) - } - const updateBuiltinAuth = async (value: Record) => { - if (!collection) - return - await updateBuiltInToolCredential(collection.name, value) - Toast.notify({ - type: 'success', - message: t('common.api.actionSuccess'), - }) - await getAllTools() - setShowSettingAuth(false) - } - const removeBuiltinAuth = async () => { - if (!collection) - return - await removeBuiltInToolCredential(collection.name) - Toast.notify({ - type: 'success', - message: t('common.api.actionSuccess'), - }) - await getAllTools() - setShowSettingAuth(false) - } - - useMount(() => { - getAllTools() - }) - - return ( - <> - -
-
-
-
{t('tools.addTool')}
-
- -
-
-
- - -
-
-
-
-
- handleKeywordsChange(e.target.value)} - onClear={() => handleKeywordsChange('')} - /> -
-
-
- -
-
- {listLoading && ( -
- -
- )} - {!listLoading && ( - - )} -
-
-
- {isShowEditCollectionToolModal && ( - setIsShowEditCustomCollectionModal(false)} - onAdd={doCreateCustomToolCollection} - /> - )} - {showSettingAuth && collection && ( - setShowSettingAuth(false)} - onSaved={updateBuiltinAuth} - onRemove={removeBuiltinAuth} - /> - )} - - - ) -} -export default React.memo(AddToolModal) diff --git a/web/app/components/tools/add-tool-modal/tools.tsx b/web/app/components/tools/add-tool-modal/tools.tsx deleted file mode 100644 index 20f7e6b0da..0000000000 --- a/web/app/components/tools/add-tool-modal/tools.tsx +++ /dev/null @@ -1,158 +0,0 @@ -import { - memo, - useCallback, -} from 'react' -import { basePath } from '@/utils/var' -import { useTranslation } from 'react-i18next' -import { - RiAddLine, -} from '@remixicon/react' -import cn from '@/utils/classnames' -import { ArrowUpRight } from '@/app/components/base/icons/src/vender/line/arrows' -import { Check } from '@/app/components/base/icons/src/vender/line/general' -import { Tag01 } from '@/app/components/base/icons/src/vender/line/financeAndECommerce' -import type { ToolWithProvider } from '@/app/components/workflow/types' -import { BlockEnum } from '@/app/components/workflow/types' -import BlockIcon from '@/app/components/workflow/block-icon' -import Tooltip from '@/app/components/base/tooltip' -import Button from '@/app/components/base/button' -import { useGetLanguage } from '@/context/i18n' -import { useStore as useLabelStore } from '@/app/components/tools/labels/store' -import Empty from '@/app/components/tools/add-tool-modal/empty' -import type { Tool } from '@/app/components/tools/types' -import { CollectionType } from '@/app/components/tools/types' -import type { AgentTool } from '@/types/app' -import { MAX_TOOLS_NUM } from '@/config' -import type { TypeWithI18N } from '@/app/components/header/account-setting/model-provider-page/declarations' -import { renderI18nObject } from '@/i18n-config' - -const resolveI18nText = (value: TypeWithI18N | string | undefined, language: string): string => { - if (!value) - return '' - return typeof value === 'string' ? value : renderI18nObject(value, language) -} - -type ToolsProps = { - showWorkflowEmpty: boolean - tools: ToolWithProvider[] - addedTools: AgentTool[] - onSelect: (provider: ToolWithProvider, tool: Tool) => void - onAuthSetup: (provider: ToolWithProvider) => void -} -const Blocks = ({ - showWorkflowEmpty, - tools, - addedTools, - onSelect, - onAuthSetup, -}: ToolsProps) => { - const { t } = useTranslation() - const language = useGetLanguage() - const labelList = useLabelStore(s => s.labelList) - const addable = addedTools.length < MAX_TOOLS_NUM - - const renderGroup = useCallback((toolWithProvider: ToolWithProvider) => { - const list = toolWithProvider.tools - const needAuth = toolWithProvider.allow_delete && !toolWithProvider.is_team_authorization && toolWithProvider.type === CollectionType.builtIn - - return ( -
-
- {resolveI18nText(toolWithProvider.label, language)} - {t('tools.addToolModal.manageInTools')} -
- {list.map((tool) => { - const labelContent = (() => { - if (!tool.labels) - return '' - return tool.labels.map((name) => { - const label = labelList.find(item => item.name === name) - return resolveI18nText(label?.label, language) - }).filter(Boolean).join(', ') - })() - const added = !!addedTools?.find(v => v.provider_id === toolWithProvider.id && v.provider_type === toolWithProvider.type && v.tool_name === tool.name) - return ( - - -
{resolveI18nText(tool.label, language)}
-
{resolveI18nText(tool.description, language)}
- {tool.labels?.length > 0 && ( -
-
- -
{labelContent}
-
-
- )} -
- )} - > -
- -
{resolveI18nText(tool.label, language)}
- {!needAuth && added && ( -
- - {t('tools.addToolModal.added').toLocaleUpperCase()} -
- )} - {!needAuth && !added && addable && ( - - )} - {needAuth && ( - - )} -
- - ) - })} -
- ) - }, [addable, language, t, labelList, addedTools, onAuthSetup, onSelect]) - - return ( -
- {!tools.length && !showWorkflowEmpty && ( -
{t('workflow.tabs.noResult')}
- )} - {!tools.length && showWorkflowEmpty && ( -
- -
- )} - {!!tools.length && tools.map(renderGroup)} -
- ) -} - -export default memo(Blocks) diff --git a/web/app/components/tools/add-tool-modal/type.tsx b/web/app/components/tools/add-tool-modal/type.tsx deleted file mode 100644 index 26e78a7525..0000000000 --- a/web/app/components/tools/add-tool-modal/type.tsx +++ /dev/null @@ -1,34 +0,0 @@ -'use client' -import { useTranslation } from 'react-i18next' -import cn from '@/utils/classnames' -import { Exchange02, FileCode } from '@/app/components/base/icons/src/vender/line/others' - -type Props = { - value: string - onSelect: (type: string) => void -} - -const Types = ({ - value, - onSelect, -}: Props) => { - const { t } = useTranslation() - - return ( -
-
onSelect('builtin')}> -
- {t('tools.type.builtIn')} -
-
onSelect('api')}> - - {t('tools.type.custom')} -
-
onSelect('workflow')}> - - {t('tools.type.workflow')} -
-
- ) -} -export default Types diff --git a/web/app/components/tools/edit-custom-collection-modal/index.tsx b/web/app/components/tools/edit-custom-collection-modal/index.tsx index 95a204c1ec..48801b018f 100644 --- a/web/app/components/tools/edit-custom-collection-modal/index.tsx +++ b/web/app/components/tools/edit-custom-collection-modal/index.tsx @@ -24,6 +24,7 @@ import Toast from '@/app/components/base/toast' type Props = { positionLeft?: boolean + dialogClassName?: string payload: any onHide: () => void onAdd?: (payload: CustomCollectionBackend) => void @@ -33,6 +34,7 @@ type Props = { // Add and Edit const EditCustomCollectionModal: FC = ({ positionLeft, + dialogClassName = '', payload, onHide, onAdd, @@ -186,6 +188,7 @@ const EditCustomCollectionModal: FC = ({ positionCenter={isAdd && !positionLeft} onHide={onHide} title={t(`tools.createTool.${isAdd ? 'title' : 'editTitle'}`)!} + dialogClassName={dialogClassName} panelClassName='mt-2 !w-[640px]' maxWidthClassName='!max-w-[640px]' height='calc(100vh - 16px)' diff --git a/web/app/components/tools/edit-custom-collection-modal/modal.tsx b/web/app/components/tools/edit-custom-collection-modal/modal.tsx deleted file mode 100644 index 3e278f7b53..0000000000 --- a/web/app/components/tools/edit-custom-collection-modal/modal.tsx +++ /dev/null @@ -1,361 +0,0 @@ -'use client' -import type { FC } from 'react' -import React, { useEffect, useState } from 'react' -import { useTranslation } from 'react-i18next' -import { useDebounce, useGetState } from 'ahooks' -import { produce } from 'immer' -import { LinkExternal02, Settings01 } from '../../base/icons/src/vender/line/general' -import type { Credential, CustomCollectionBackend, CustomParamSchema, Emoji } from '../types' -import { AuthHeaderPrefix, AuthType } from '../types' -import GetSchema from './get-schema' -import ConfigCredentials from './config-credentials' -import TestApi from './test-api' -import cn from '@/utils/classnames' -import Input from '@/app/components/base/input' -import Textarea from '@/app/components/base/textarea' -import EmojiPicker from '@/app/components/base/emoji-picker' -import AppIcon from '@/app/components/base/app-icon' -import { parseParamsSchema } from '@/service/tools' -import LabelSelector from '@/app/components/tools/labels/selector' -import Toast from '@/app/components/base/toast' -import Modal from '../../base/modal' -import Button from '@/app/components/base/button' - -type Props = { - positionLeft?: boolean - payload: any - onHide: () => void - onAdd?: (payload: CustomCollectionBackend) => void - onRemove?: () => void - onEdit?: (payload: CustomCollectionBackend) => void -} -// Add and Edit -const EditCustomCollectionModal: FC = ({ - payload, - onHide, - onAdd, - onEdit, - onRemove, -}) => { - const { t } = useTranslation() - const isAdd = !payload - const isEdit = !!payload - - const [editFirst, setEditFirst] = useState(!isAdd) - const [paramsSchemas, setParamsSchemas] = useState(payload?.tools || []) - const [customCollection, setCustomCollection, getCustomCollection] = useGetState(isAdd - ? { - provider: '', - credentials: { - auth_type: AuthType.none, - api_key_header: 'Authorization', - api_key_header_prefix: AuthHeaderPrefix.basic, - }, - icon: { - content: '🕵️', - background: '#FEF7C3', - }, - schema_type: '', - schema: '', - } - : payload) - - const originalProvider = isEdit ? payload.provider : '' - - const [showEmojiPicker, setShowEmojiPicker] = useState(false) - const emoji = customCollection.icon - const setEmoji = (emoji: Emoji) => { - const newCollection = produce(customCollection, (draft) => { - draft.icon = emoji - }) - setCustomCollection(newCollection) - } - const schema = customCollection.schema - const debouncedSchema = useDebounce(schema, { wait: 500 }) - const setSchema = (schema: any) => { - const newCollection = produce(customCollection, (draft) => { - draft.schema = schema - }) - setCustomCollection(newCollection) - } - - useEffect(() => { - if (!debouncedSchema) - return - if (isEdit && editFirst) { - setEditFirst(false) - return - } - (async () => { - try { - const { parameters_schema, schema_type } = await parseParamsSchema(debouncedSchema) - const customCollection = getCustomCollection() - const newCollection = produce(customCollection, (draft) => { - draft.schema_type = schema_type - }) - setCustomCollection(newCollection) - setParamsSchemas(parameters_schema) - } - catch { - const customCollection = getCustomCollection() - const newCollection = produce(customCollection, (draft) => { - draft.schema_type = '' - }) - setCustomCollection(newCollection) - setParamsSchemas([]) - } - })() - }, [debouncedSchema]) - - const [credentialsModalShow, setCredentialsModalShow] = useState(false) - const credential = customCollection.credentials - const setCredential = (credential: Credential) => { - const newCollection = produce(customCollection, (draft) => { - draft.credentials = credential - }) - setCustomCollection(newCollection) - } - - const [currTool, setCurrTool] = useState(null) - const [isShowTestApi, setIsShowTestApi] = useState(false) - - const [labels, setLabels] = useState(payload?.labels || []) - const handleLabelSelect = (value: string[]) => { - setLabels(value) - } - - const handleSave = () => { - // const postData = clone(customCollection) - const postData = produce(customCollection, (draft) => { - delete draft.tools - - if (draft.credentials.auth_type === AuthType.none) { - delete draft.credentials.api_key_header - delete draft.credentials.api_key_header_prefix - delete draft.credentials.api_key_value - } - - draft.labels = labels - }) - - let errorMessage = '' - if (!postData.provider) - errorMessage = t('common.errorMsg.fieldRequired', { field: t('tools.createTool.name') }) - - if (!postData.schema) - errorMessage = t('common.errorMsg.fieldRequired', { field: t('tools.createTool.schema') }) - - if (errorMessage) { - Toast.notify({ - type: 'error', - message: errorMessage, - }) - return - } - - if (isAdd) { - onAdd?.(postData) - return - } - - onEdit?.({ - ...postData, - original_provider: originalProvider, - }) - } - - const getPath = (url: string) => { - if (!url) - return '' - - try { - const path = decodeURI(new URL(url).pathname) - return path || '' - } - catch { - return url - } - } - - return ( - <> - -
-
- {t('tools.createTool.title')} -
-
-
-
{t('tools.createTool.name')} *
-
- { setShowEmojiPicker(true) }} className='cursor-pointer' icon={emoji.content} background={emoji.background} /> - { - const newCollection = produce(customCollection, (draft) => { - draft.provider = e.target.value - }) - setCustomCollection(newCollection) - }} - /> -
-
- - {/* Schema */} -
-
-
-
{t('tools.createTool.schema')}*
-
- -
{t('tools.createTool.viewSchemaSpec')}
- -
-
- - -
-