From abdfb1abbf1045581640e84b183b7bb1d450c30b Mon Sep 17 00:00:00 2001 From: veguAI <152010387+vegu-ai-tools@users.noreply.github.com> Date: Sun, 10 Mar 2024 18:03:12 +0200 Subject: [PATCH] WIP: Prep 0.21.0 (#83) * cleanup * refactor clean_dialogue * prompt fixes * prompt fixes * conversation format types - movie script and chat (legacy) * stopping strings updated * mistral.ai client * prompt tweaks * mistral client return token counts * anthropic client * archive history emits whole object so we can inspectr time stamps * show timestamp in history dialog * openai compat fixes to stop trying to coerce openai url path schema and to never attempt to retrieve the model name automatically, hopefully improving compatibility with the various openai api implementations across the board * openai compat client let api control prompt template via config option * fix custom client configs and implement max backscroll * fix backscroll limit * remove debug message * prep 0.21.0 * include model name in prompt template selection label * use tabs for side nav in app config modal * readme / docs * fix issue where "No API key set" could be persisted as the selected model name to the config * deepinfra example * linting --- README.md | 92 +- docs/img/0.21.0/deepinfra-setup.png | Bin 0 -> 57246 bytes docs/img/0.21.0/no-clients.png | Bin 0 -> 7260 bytes docs/img/0.21.0/openai-add-api-key.png | Bin 0 -> 36219 bytes docs/img/0.21.0/openai-setup.png | Bin 0 -> 20587 bytes docs/img/0.21.0/prompt-template-default.png | Bin 0 -> 17168 bytes docs/img/0.21.0/ready-to-go.png | Bin 0 -> 43990 bytes docs/img/0.21.0/select-prompt-template.png | Bin 0 -> 48406 bytes docs/img/0.21.0/selected-prompt-template.png | Bin 0 -> 50021 bytes docs/img/0.21.0/text-gen-webui-setup.png | Bin 0 -> 26541 bytes poetry.lock | 1153 ++++++++--------- pyproject.toml | 3 +- .../templates/computer.jinja2 | 2 + .../templates/instructions.jinja2 | 2 +- src/talemate/__init__.py | 2 +- src/talemate/agents/conversation.py | 33 +- src/talemate/client/__init__.py | 2 + src/talemate/client/anthropic.py | 224 ++++ src/talemate/client/base.py | 15 +- src/talemate/client/mistral.py | 232 ++++ src/talemate/client/openai_compat.py | 72 +- src/talemate/config.py | 70 +- .../templates/conversation/dialogue.jinja2 | 23 +- .../visual/generate-character-prompt.jinja2 | 1 + src/talemate/scene_message.py | 34 + src/talemate/server/websocket_server.py | 15 +- src/talemate/tale_mate.py | 17 +- src/talemate/util.py | 34 +- talemate_frontend/package-lock.json | 4 +- talemate_frontend/package.json | 2 +- .../src/components/AppConfig.vue | 92 +- .../src/components/ClientModal.vue | 5 +- .../src/components/SceneHistory.vue | 4 +- templates/comfyui-workflows/default-sd15.json | 2 +- templates/comfyui-workflows/default-sdxl.json | 2 +- tests/test_dialogue_cleanup.py | 5 +- 36 files changed, 1421 insertions(+), 721 deletions(-) create mode 100644 docs/img/0.21.0/deepinfra-setup.png create mode 100644 docs/img/0.21.0/no-clients.png create mode 100644 docs/img/0.21.0/openai-add-api-key.png create mode 100644 docs/img/0.21.0/openai-setup.png create mode 100644 docs/img/0.21.0/prompt-template-default.png create mode 100644 docs/img/0.21.0/ready-to-go.png create mode 100644 docs/img/0.21.0/select-prompt-template.png create mode 100644 docs/img/0.21.0/selected-prompt-template.png create mode 100644 docs/img/0.21.0/text-gen-webui-setup.png create mode 100644 src/talemate/client/anthropic.py create mode 100644 src/talemate/client/mistral.py diff --git a/README.md b/README.md index 9ddf6592..f5c695ad 100644 --- a/README.md +++ b/README.md @@ -7,16 +7,21 @@ Roleplay with AI with a focus on strong narration and consistent world and game |![Screenshot 4](docs/img/0.17.0/ss-4.png)|![Screenshot 1](docs/img/0.19.0/Screenshot_15.png)| |![Screenshot 2](docs/img/0.19.0/Screenshot_16.png)|![Screenshot 3](docs/img/0.19.0/Screenshot_17.png)| -> :warning: **It does not run any large language models itself but relies on existing APIs. Currently supports OpenAI, text-generation-webui and LMStudio. 0.18.0 also adds support for generic OpenAI api implementations, but generation quality on that will vary.** +> :warning: **It does not run any large language models itself but relies on existing APIs. Currently supports OpenAI, Anthropic, mistral.ai, self-hosted text-generation-webui and LMStudio. 0.18.0 also adds support for generic OpenAI api implementations, but generation quality on that will vary.** -This means you need to either have: -- an [OpenAI](https://platform.openai.com/overview) api key -- setup local (or remote via runpod) LLM inference via: - - [oobabooga/text-generation-webui](https://github.com/oobabooga/text-generation-webui) - - [LMStudio](https://lmstudio.ai/) -- Any other OpenAI api implementation that implements the v1/completions endpoint - - tested llamacpp with the `api_like_OAI.py` wrapper - - let me know if you have tested any other implementations and they failed / worked or landed somewhere in between +Officially supported APIs: +- [OpenAI](https://platform.openai.com/overview) +- [Anthropic](https://www.anthropic.com/) +- [mistral.ai](https://mistral.ai/) + +Officially supported self-hosted APIs: +- [oobabooga/text-generation-webui](https://github.com/oobabooga/text-generation-webui) (local or with runpod support) +- [LMStudio](https://lmstudio.ai/) + +Generic OpenAI api implementations (tested and confirmed working): +- [DeepInfra](https://deepinfra.com/) - see [instructions](https://github.com/vegu-ai/talemate/issues/78#issuecomment-1986884304) +- [llamacpp](https://github.com/ggerganov/llama.cpp) with the `api_like_OAI.py` wrapper +- let me know if you have tested any other implementations and they failed / worked or landed somewhere in between ## Current features @@ -78,8 +83,9 @@ Please read the documents in the `docs` folder for more advanced configuration a - [Installation](#installation) - [Connecting to an LLM](#connecting-to-an-llm) - [Text-generation-webui](#text-generation-webui) - - [Recommended Models](#recommended-models) - - [OpenAI](#openai) + - [Recommended Models](#recommended-models) + - [OpenAI / mistral.ai / Anthropic](#openai) + - [DeepInfra via OpenAI Compatible client](#deepinfra-via-openai-compatible-client) - [Ready to go](#ready-to-go) - [Load the introductory scenario "Infinity Quest"](#load-the-introductory-scenario-infinity-quest) - [Loading character cards](#loading-character-cards) @@ -118,43 +124,67 @@ There is also a [troubleshooting guide](docs/troubleshoot.md) that might help. 1. Start the backend: `python src/talemate/server/run.py runserver --host 0.0.0.0 --port 5050`. 1. Open a new terminal, navigate to the `talemate_frontend` directory, and start the frontend server by running `npm run serve`. -## Connecting to an LLM +# Connecting to an LLM On the right hand side click the "Add Client" button. If there is no button, you may need to toggle the client options by clicking this button: ![Client options](docs/img/client-options-toggle.png) -### Text-generation-webui +![No clients](docs/img/0.21.0/no-clients.png) + +## Text-generation-webui > :warning: As of version 0.13.0 the legacy text-generator-webui API `--extension api` is no longer supported, please use their new `--extension openai` api implementation instead. In the modal if you're planning to connect to text-generation-webui, you can likely leave everything as is and just click Save. -![Add client modal](docs/img/client-setup-0.13.png) +![Add client modal](docs/img/0.21.0/text-gen-webui-setup.png) +### Specifying the correct prompt template -#### Recommended Models +For good results it is **vital** that the correct prompt template is specified for whichever model you have loaded. -As of 2024.02.06 my personal regular drivers (the ones i test with) are: +Talemate does come with a set of pre-defined templates for some popular models, but going forward, due to the sheet number of models released every day, understanding and specifying the correct prompt template is something you should familiarize yourself with. + +If the text-gen-webui client shows a yellow triangle next to it, it means that the prompt template is not set, and it is currently using the default `VICUNA` style prompt template. + +![Default prompt template](docs/img/0.21.0/prompt-template-default.png) + +Click the two cogwheels to the right of the triangle to open the client settings. + +![Client settings](docs/img/0.21.0/select-prompt-template.png) + +You can first try by clicking the `DETERMINE VIA HUGGINGFACE` button, depending on the model's README file, it may be able to determine the correct prompt template for you. (basically the readme needs to contain an example of the template) + +If that doesn't work, you can manually select the prompt template from the dropdown. + +In the case for `bartowski_Nous-Hermes-2-Mistral-7B-DPO-exl2_8_0` that is `ChatML` - select it from the dropdown and click `Save`. + +![Client settings](docs/img/0.21.0/selected-prompt-template.png) + +### Recommended Models + +As of 2024.03.07 my personal regular drivers (the ones i test with) are: - Kunoichi-7B - sparsetral-16x7B -- Nous-Hermes-2-SOLAR-10.7B +- Nous-Hermes-2-Mistral-7B-DPO - brucethemoose_Yi-34B-200K-RPMerge - dolphin-2.7-mixtral-8x7b +- rAIfle_Verdict-8x7B - Mixtral-8x7B-instruct -- GPT-3.5-turbo 0125 -- GPT-4-turbo 0116 That said, any of the top models in any of the size classes here should work well (i wouldn't recommend going lower than 7B): https://www.reddit.com/r/LocalLLaMA/comments/18yp9u4/llm_comparisontest_api_edition_gpt4_vs_gemini_vs/ -### OpenAI +## OpenAI / mistral.ai / Anthropic + +The setup is the same for all three, the example below is for OpenAI. If you want to add an OpenAI client, just change the client type and select the apropriate model. -![Add client modal](docs/img/add-client-modal-openai.png) +![Add client modal](docs/img/0.21.0/openai-setup.png) If you are setting this up for the first time, you should now see the client, but it will have a red dot next to it, stating that it requires an API key. @@ -162,17 +192,33 @@ If you are setting this up for the first time, you should now see the client, bu Click the `SET API KEY` button. This will open a modal where you can enter your API key. -![OpenAI API Key missing](docs/img/0.18.0/openai-api-key-2.png) +![OpenAI API Key missing](docs/img/0.21.0/openai-add-api-key.png) Click `Save` and after a moment the client should have a green dot next to it, indicating that it is ready to go. ![OpenAI API Key set](docs/img/0.18.0/openai-api-key-3.png) +## DeepInfra via OpenAI Compatible client + +You can use the OpenAI compatible client to connect to [DeepInfra](https://deepinfra.com/). + +![DeepInfra](docs/img/0.21.0/deepinfra-setup.png) + +``` +API URL: https://api.deepinfra.com/v1/openai +``` + +Models on DeepInfra that work well with Talemate: + +- [mistralai/Mixtral-8x7B-Instruct-v0.1](https://deepinfra.com/mistralai/Mixtral-8x7B-Instruct-v0.1) (max context 32k, 8k recommended) +- [cognitivecomputations/dolphin-2.6-mixtral-8x7b](https://deepinfra.com/cognitivecomputations/dolphin-2.6-mixtral-8x7b) (max context 32k, 8k recommended) +- [lizpreciatior/lzlv_70b_fp16_hf](https://deepinfra.com/lizpreciatior/lzlv_70b_fp16_hf) (max context 4k) + ## Ready to go You will know you are good to go when the client and all the agents have a green dot next to them. -![Ready to go](docs/img/client-setup-complete.png) +![Ready to go](docs/img/0.21.0/ready-to-go.png) ## Load the introductory scenario "Infinity Quest" diff --git a/docs/img/0.21.0/deepinfra-setup.png b/docs/img/0.21.0/deepinfra-setup.png new file mode 100644 index 0000000000000000000000000000000000000000..992635d35fa3e242750342b17cec4a43c65da4c3 GIT binary patch literal 57246 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
gmEL^b!- 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 literal 0 HcmV?d00001 diff --git a/docs/img/0.21.0/no-clients.png b/docs/img/0.21.0/no-clients.png new file mode 100644 index 0000000000000000000000000000000000000000..8dbf786c93709ed68b68348e5f7997f8ecf46d9b GIT binary patch literal 7260 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࣎|As5BD=2#tQ05TI1a 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 A^#A|> literal 0 HcmV?d00001 diff --git a/docs/img/0.21.0/openai-setup.png b/docs/img/0.21.0/openai-setup.png new file mode 100644 index 0000000000000000000000000000000000000000..47b9a8d51cdb2838d09eb15d28d08a2b66997656 GIT binary patch literal 20587 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 C((+RZAb{c^Dn@ z$=WURU4}=+M_SwkD$$d}Z=BgmD;R3d>AiIrcf*y`)lJkchV9UbD+!ovlrilGAvIiA zbtC2`t;!N+fmBH|qgLCH3?J0G;jp^bNSlGwaR=Sow;)y_Puvw1=!)RJ(MY1{9L@K( z9#As0_{3@S_%Oz|#GsUcU4q;F7H7ShbSyjkfsZg?;37l*mBnQC;@53sMR~yNs8cdB zRuadi*MbQ+*7+rr5D(78R43ttAQw)%>sEYR5FDy(3`|~!vBkhslzsRxInO(M6YsSr zf1G*kbHE6Z7Y)zo6*!AS2f9t6bES#ml{VTZvUBo#U2`XyqooCAUHA};8@q@>Cqg-g zn}7gBNWI%}_(OdGUGD|iI*vQ`w?ZEdW_#4;HuBUWN%D8=CVLK=pxrN8(tw>=-hz(e zNXz@_7Ii48sqNjTNK$^)%RGUb5edP%e()@@`ry3xBdMq;Hm)bG78%(+TZ zK1KN!Fg29JWZ<_QYCexd%P;0x z3OPQZpaeAOy$7OF#*ZVsg@iG;W8sl!7Qj#CwF@||SgIjP(^T9SVD-OFwqzgBohTcs$m^~6DB`CEfDV%6!rNyqLxDf4*1?X9QkLUPb`l zNqh_R-Do59-iuNriUCa$W2X)$kbbC)G4Y*}nP@S> zu&`HHPyyiOLmyZMb4!gC-T-gY!DyF?luq(D2E9W3#_9-G2HQuX>|i07PgC}PPZ<4H zAo~FU^H$r4(649GZ2=txo?DMU?L6wX>qMTaE3{Abb?^hjo7tJ2!qe9mpHAqrSD*Y(|MVZ6Ov|g3e#)lHA$R?1 z8{88u11ysAFwl!}dr3dv-w7@J9}nZ(orxSj1*FBep?hYPqb7C;;$KQhCrp2Np@2d2 z%0A5*u}Tr}!YzIXP}bx6fssw-HzS*E4qvl2X8hA>to_qEtA2V+S?#+tYs`1CsF%ne zzh)E}_T&)8K79Bvi-^ZGTVc+Wbl=FHdj%c_yTN_Cfv}a!tBcXKJ^eGqb3eGR1JgUB zb=KlKssiBTJi2d7LjRI6!A6*?^`HJ`H~9EWp7J>FZ=1eHUgmnB5`&pln-Pu}Wv4A9 z)9mjkWB!D}#b#56LhT=6WEFYqz{|C)a$$!@_Q0S<7Md2<^KF|Y60x^2J7mb0^ADQ9 zh0}M|EBRh8oEleJZQHhj4;EO`!4MnkMOr}q86sKCZQ;QfaS*)DD zcFaB<7)<;~+AI(G0bRNKw!_kc>dW>o;2V+om_s?^e<9v$;rx2=1Cd9qDiG>}4N*ED zC9opY>CsbKX1WaU7-dR>NZUMdmWMM>!c}zbnBiTEiE}-C@m@2-O=&?0yf%l_1F>oV pOZrbE95eLTJ_4gbpI_uTmepf(#6;f{yhL!F)#oZwkDDG~BqQ!zsaf(ZE?@izD z`|o}4%$-YS7>4Yev!C-k=j^rD+B=aNZ(ieIf-wOA0FIKP+*<$u7>oG32OSmh`<6s< z9sr;PD9K4{e*_-;JGxNJdshYC2%6#a@x#TiuB#OAHjt;YSg}0i^L_< zEL6$jwbDmY!+gQ0CBG5%f*$fo6@%Y$QbVejrhs^~z=FliK~LaVJJ8VkYbC!U`(MSB z@s`=Rh64y!iO0jL_xQ=8xNl9ga}e^GUD(o(lf@6?zT>{RyB(*#o)cUk5U7DVFz_}! zQ1M>U*eI^;W6B*|g=cDMDbw^vSRez>_P&m8dDSo9(@w{+Zk?-bzd4(quI(S%n`O|P zpz_SI+kf-|uk@?{G4`?Bvj;Z0A2%`X!x7`v-M{n&defik&g=aig!SgrdIZN+U>(DQ zJ?LVq{dPDmd(mi;-|<#$n6`hae7Ux`XmGz9_-ykh{K7ErLS_Eo@p0rG+&uqm8mDW# zZHk@B_7&7&xheMfxASw@^R@He)Lh>ak<9FDSodvocmChUiNBl-IL3YAFlj@vP@9C; z<;Yb`dAgx~OmEZ zjU9V{D>>MvRgT+`0(riT``bd_^E@s2L}=3LCjYq60hip?Dc2bLY5`vd&Q#$3xu}rs z{04Gl!f8p7cs%Rl=MEa(Ki?U>{J|42#f+4_m8n+&@^**I|A6&^y7bV*Mt`*Zs`xjy zMyrD$hb~>&&tO2a9^&C~QGY^9!#%gvo%G4Ifv*Sa#C5qC&ZPywgPW32!CGEgy@hA? zmMdC+J>XnShcm3u$I8PP;RfLaO z9)+`_J+O^G3Vxk1VA_(|-z&3ez3zJ*GyYG+pM_RSN=p2vAz-c;o5Blr zX{97PVeLqc2zs`!?zHw@uu0aiGxaX6)J01|#k)5|6)$-w4pl%~QU-TE zyU`3uRUO^eOFjr>5lR!ySDTRr9=zD>erWG5GHLg0j1^9YkYQ&6K>?{(B_vd~9MF6u z7tOLBD1&`0%g3gqQ``LUM%3@KLLCHq3cQqmt4urXs&l`KJU>0H{S_C#Ua)Xvz@Euc z3Ptnh3eBCa$%Pbw99eLJpv?g_8u|X8|7ydfRJS^BRtd{G6^jUIOfBK&ytb&=w+3^0 zhW{SS4V_4*JBSZT7k;z$%}n0&e%=yEN}exf>X84R6dLX({^xb!OWQ_;^Y`#Qr}!$fyd@5vq%eLmA;aAnqdc6~;JnrxiC4{$ zNY&U=&Ry5}w-kOq^3AdyD1SX?h!Q;vSxJNE$LIg3jy)a7gR}Nl@FMp54jV-Gxj$%4 z`Sty^b4|*!wBw%0$vfKG_i_p%F_EibJOHe=C~yc$I~2~+^gg!8O}|VXhHd=%U3Yw^ zZ}z|ooe@53ldcscg8FTIaGy}YHBf}d5B8>=6i);cC|Ff0f(aYk@7kb1fSI#tiAu&A z1n9pfnnW%PUQ@G^Bxmirz0L4!>CR(0oYqlIO59jWfVv0bPNEieB7?Uad$yJDsgnu1 z5_L;8ul)|ns@{A^9AL(ZcZN4&eZ|_}jO%$Zzh7uYcl7Zt6R=f|0@y}2dE_H_y2P~N z`#_VKzrV=ThLrZ#R|O*8p5?jT=Im|iQE7^n1kpJ0XuEU>`8v(ve#KH_Sp^qa4&jYF z_)Wv4N>AVch*X;{ra%|cKdE0-LC)G<8r3y9kyK7gm>;um$jtq^e<|Pgh57c6d={(K zojr|lLCPhBDYsK`zK73V4?4`Ar_@*Oe3v<&ZVBH5*2Pn`YbtIf`JR+Wk5VyVe18y@ z`|CWxlC#)kW_BBVdn6Cc7vlbrBX%PBT2E42%G3P2`z|fMamzRS2xMfun`AR@)2s3V zTxQ#~e3b{Q3=o7iWD#E1>ybohPV5LK%cpWS6&hAEWKVr%H;qC7E>WqsHk~GwraS3S zBh5@|W?hrl072q|tz_MgJD`rdP*(q~*$KZfY714cI1HQOGep7*9%J^A@U!RXHdPb9 z@;S$=``{LIqBYp4l1I-eZzYCR<3tav6;tWs=YWOCG<|YC-ZPABh)jK^ zyf}E-mN?bhn+K^fbMbr5@;qwN{g8po*xQsUI-?8*@h~L1g>sK^W7sPh0{I8r8qEzD zB$G$YyrzHPL0VJt;Ilhw;1hk6q_8T|$K^QlbjUZLF6pl|#M~6WbSgq2QD*te-x_Q2 zpx6-x&mL_b6-}b-b0lkJTf9GQ8ckF~y8=FFe2gCm!dSWt{qTm`ld5tdG=^_RBRo?{ z))4))*Td3~#F|R&5PICnK`#~fq{f2I)AKw?%Eq0>!ZG;kl`8y#8K=3J4(|6cCDlQM z$<}cDJ>hInt60lVw}kz>J+!7yw;ZJ+hj{mDxHC4KEMHx`^M~nsqcQobp6NWN74gP3 zY)rH6{0bSwjaQozR$B)CZb4_Xh_sVw@s3#8?^Lu1>Uw4|PtS4}+0m!?ojO z3QjF|z&ZNLRYt7h78rG<^QHpnDw09jvv>y+7C0yJn`&?|g$bQn+8e zPkm9Z@6n)~7RZ=NHPx85j2{Fyt1DV4d2Se6Txfr(nCV07{x-YG-+0?&G?nWLBh(+W z_OCGYDsIFY^6xc5bpJkvUErec?Xt}8z3t8Tkrmo5L$!Ut(ve?skRCtm_>z{V)^6m= zG>lQ`P>W${d85$pSR6-&D#c3*8M-pFHr=AUTbQW>^bRZy5VVSQdUi>9G4hIrHI55s zk>$zT60U*fmX_zt2nV#Rko=MxC^!8R%XMi#wQR=_!+lB!Jm3V~c;M{=k`(Yfek(BG z0MqkYV_ati1jOrw^*;Zmh6nqgN|spF*~+1%LwwMA7vSdj zw#dl0MJ!> z3rc=p;IC!WL|%#KKXHTzl<@qYDg2>wXif?FeXl<>t;QY$zMI3%0k+71|IFmEPJ$uq z2MKOATHYYcyG1qvQ)aE-5*dZB_WHB-CSSWj~~+|p7z0AL!_uZ+6o&F2Kj|0vS zaVf8(1?lqg@=s#R;))t(Gt1=_Yj-(o11~joR#*{2A^h z7o$bQ^Yx3I1*$K38n&9duDHHyc6Jd=cpWb>9o&zPrN>B? zT$f*HtwlJieiv$V7a%+_sp^h%Oe)EMm6UNF_0FdbxVK3;>|yBQm)Dxd)A0R<$PoLf zUXsz+;ltWr31UnXOw>>vtBY?R7!W|J!oWu;=|^Srs`9M`+;(NDR1VyT%_(vw&Ar_0 z+>FMHDx9R?_;ij)Boa*h{>YE)xP`D%`yTQ6JYCI?M(AIoDT1V;FVDeW2nh)<5h+ka zw@)NI+I_ZzBS()O=Sf6WE}tTveBzxOyUYzleR$tgTm2An=C6Uk@vIPTRYJ7qhg8}O6S%>PQq_0)Imftu+B zhASQjZJv*z{{rz-wU~yyib(hP^5btlW0Bh0*(r;~N#CB2@?eo7qtcIeUpH1q`jUMb zx+n;zegWdho0wj9?&f-S`I1qg4F1@q&j~+2=l8!GH6saa%e?w@FRL4rO*u&hV~3if zVvEoU9mEMHN)>=`;RWNRq`9M({DtCYlv3{x=PEt3zL~G1_^^V!hwIKb&nF*VpMsKO z?*q3e*78pSZrbUe;P4ku&!>O8O0kw)TwSL;mkX$@mcJv#`$ykPqfH6|yeV~Z;;&wJ zzR8o|k}@;ZT2?nrdOd{cFB16NQ7%qGLel?oFDcnzY)~C7L1FybYI$p^^~3Hb`A~_n z8B!mb5ubzCdov>=n9??`coStX*WDa1%=2W?YRNd!GEqTMQFhJ^ea_!yg!dO?&(`o7 z>-}Gr)xYzd#$^P{TV_5=NSx- z&?D2(ZZK3)=95YvFZPsrb?0?vdTn8V4^93vEm@1C=jkff5NICY_i%kocpj9jN!pSK z2rFf#v{7-UBPP*6SPLQ5P_L_k0`eQLOuNolJ;l8{~<4IJ zT!w~*BDrgJnWAl1&e1p`(-ULu;1)A$vh7cf(WX3@X6I~ z9$-rf3}KTbVCvrY=FHA6ORsAJV>S96`Qfo_Vnc|NTOS%Po2J=BQ^7G5`tY{fDj+E- zsgTCw>FpsH^YbSrx1$BV2|@Uk;#?9Updo$Om$18WEov#z7Q*U50wK``_eS+13!(HF zQ7yRj03)^mAdPi{mA;qy;2P%j_r1=u@E&JIM$Cf+<=8K|Rfj{4GfRSo@P(m{pt;1U4B(V*HxO?>OVNB2=rslKgEo1Jf%Wqjf z)v2$7c}%p@9hKoy;O=x(DN2vm*?=7jUG8NZDHL90jSXt4B2BndyZPrAOUT}I>Ob3D zFB7#;#*|@n%Ow5bp7IZcl~ZWxI^FJn{=z`{fq5_gg+b%oCL6H8;XB!065R!oFF4^`{TAI z&27sUo7w}#MAYrx*7*arl|E(08LShA83IREG%@QEm&klBmkDQ*Dx|WCEIa5rI3QF% zfpp~i2xsysQwe6~tfFk2(`A!<#-3yYilX*)Yek;e$Yb&HYicI%5%=@bk*MpS2VCUn z2cN)Fx1IxeD%$RoT%_TG+!|(cjIs$jvt$tbNBt1U9~hEm^-Z^_qC_mDG@jary?S_8 zJB{w1+$Zi@dwTf8j8YR$E@;0Tx%)&ug877IpADyCIX^`Div8ROJ%nl5_+6<}+0F(NqgmfQ0(ouC-EV21K}L z!f6QA9RLEuf_Z8-qf2iO*t+VXCakt{pMU6QkeIp6c8eNeP>SMwbs>JYhBq7XT`%O% zOC7&XT_?lOqN9fgX>P7md^COr#Pd5W9UQ|EzB#G&hW@u*-S#m`MZli*3_&9!05Lw$ z?~mJrvmZT0-dO5`NNL`%DIPqC0%uzX5Aa4^9qYW$=I{^YwH1KvdvVwk*;$#l!?l2* zAahmUk1$C;T$)#N8{|hyuD^eh&+oRC&ju^?(ZI?ZO-fGxaeg($Q$e^r?*Rm*0&akY zmC2H%R8&q<=m!}$f$cpD{Z5}R%k0qEDa`pLep++%v!wbQu!p&*z01>=Bx7Dwf08*7n zVF#WEjL;t9Pu>5(Q%els(M6yv6%`#w@vsj5a<3o-_<)Zg81fcFIt_HfJQQnH=Q7qi z68~ypLv#ty&sNEUkK5FB#en6V^Dh(Xjl<}XMS~MzAhWu4yoxAz5ezzVhxdGeek!f$ zjOW9_Pk*Cfy7TY2(iqO1#dV}%?jtL)Tm|m)!}Z7Cp8vr|i3Om<(0-=QD={W7HJT8z zhl)WIER3)*CrE#-r>jruo5u`z-W!3_@4~DJAp&3`lE_-C>`fL-T?s%x{upHx{LGpu zt{C!znwn%Eloby33k<__^UTgF(lC$O9Ip9@iu_6}1Ge&3fsH{<0Lzd(k{r_!*h@}C z88`jDK#nOvPb!`|qWWiIxr?Ni<;bwJdl+0r*QmKJK*l;2l6sN6^hzN#OVc?Nb zWT0#Bq9dr9YW^NY^+A5zb5F74!lAvGK(s;e zA_W}^uK0cGW)UiR(gkjda{P~4133EF)MM~FOx1BM&0!&5 z^YoZAv9VAxzZIkJCUq}WhqdI{xpvv=dE~+fzTVa2PLczDX`!%7rS5S4Xrh4d=X@1Y z$E>ermXS6zOuHwlwpe(wanBp4(F=Q%Yu;DpbeA7W<7No=WAPPBoxb8 zos>jGqz^^R4Fzwt|g3L*eY;binx*}lxSln?;__Z!8zv~2%I1^jBz6hVh|;6 ztHD^=5dO1#Y|s-|`Q_<<&ULNhWhe1dY-qA_vig^-`g55`V;C_1Bd>zNJS|$pLq#1l z74oUPFUD*E=!&xP8S7g}aRDKw)M^K+RPwr0NP4_hy{)o}5;$!inNFA%BWOMt&PbBs z>`h+0L!>tR_zktq1I{bG;tEo_N!2kOJ=|rEg}c3RRUfX)xpry(Y;belcE1;?l4q#S zj);#DWS;bhlHeG|XvB9`gA$7a*vBp2xB@3ebXWQ!IcEpL-cI8Z{)Lfodka zowJ37OMinrS^Yn0Rj$h)SBN#yq{yQd6bEfSuRYLHiO84QxGmI1Sb-rqOcIm z@Vxz_o%l7ZhJ6GYx6(_1d6Zq`SF0%BuqKm?kgJITmSQ-F)mhlYASYkKJtD;HsLU%B z(KdsA07-HE{&t?DdDD`fF3p?tFSx>kXndV!TsU#C&v!VPn8Q<;nw3WG$7nxe$=-LT z6n(__iTvc&-E0N4J;4)LuWGaTmNYPwD=fd0xLkmdIi0$aigKC;hX@Fka<-~zNsr9o zv&Ly`o6nfizq%aCZrz?k8r_tMQK|C;8-+Y?eX*j@I7d)8UZ>r(f0VE+8`6=*Z`Cl zsqKM^$^W3~=MySs9Mp+t;6%W&J#(z6Vo{s#*Co~L(;H=qYYy|871gMJc$TXHavx4a zE=Df)p!2`r6FeClfP$TxHJtblDD4rGVvSCCM-vlj+tpQYYyfo8F``*#O_c$IWq zaAhk;=UjH=nw;9t9-PeJ@r>R1v3JeFnzKuOSVaGR6Iwam9)5nP*JIwA!MUsg-V|7O z^L^v2;T2Td^l&m^WkeyWLmT_kG&Cj>b~9Idi2eSU7N=Y6%JahUMgRjWfC~LB=lHad zH6hyU*narqe_Wn4h4<)L89BV$Ti-=XJVuSx-8S?6W#0^WJfB&vB)&S`6>D-_RzN`Q z8Uhb|HxKH7+nv?x?kJMDzgWhT5WiEiuz|8N)9Q%DBq~f4_li8`&BqT z{nRUO0^HV6G{?0Q;q`PE(+64MY}xMDf987YYV!RIeO+R#;j6EDGwuf1MD}Nh?>6t^ zZ(~}dd#A`ph?2>@nHG632A=Vj&kUT!D2i`$2{2i8-@c<$*xKy6i#+dV%kU~!0y*{Z zf%{ozK&Uuh#x#6}*;Ous>obU!c-(23But#mPZPN4G7U7ARR4C|b@7sqNH>Vi9K$IJEjfqmi6*!v?KZ@J08 zu9J9#mMpyo7p`IwC{5}v7o1%plN&K4hft1sE6by@)d)y?51mMZf#p=nqw8 z+yZFoaG=;W+3y${2L`?jK+@B4qEq_dI|%()FU?R-K5b|LcR|;-H)O($r#8n8z?VW1p@LlQ z!%m8MyK-vBHB%&D>Sv`&YJ|m}rpDpI(PPXe=CYWgMSWCzZTNCiuJizuJlR+2pYTSu zAgVy=zYx}mjKqnRWcW{?n+gvaw1oRrRQ{J;IwUg!3c>68rELCRmWVI}L!{R;0z<-F zp>90?6hlzZRAs$ImDeF>(SNyta8;!UNL6YR?`nv;V+sc{$D#s4ZH_9lYQ5}@oFMqO zGbIx8UaQ_L{?8YA&Ifqjv^*wVP7`Kn;ekSLw*Li52Ph;TREe6S9^e)f!}BP%v7oqG zNsFx{Jfu=B+q_#n+Sg4nEzm&m-!8y(L&sCip3K~zBlDOjDTa-Z0?NPmP#LCF|16ol zJKXtm>O_a*CukHv+=N==dA;R%UExG@YitIqEI3jah2DJVq<>v`to^((GzSc<^f*(V zSDw7v`TL}DdE^|Jz545~z-GkS)o-5O7M<6fkGeY?7yItdKHiV*EJ`3>6EY&v^p{@q z(-JYeFXK5(rh9e&-dCR1zYmNEx@G6?iYfmq|HX@>-(AG-5a<0&m%b6-F)9;0fHpQ9 z^fzgB=|&&~;?jTWBdr!v>*IG+JGi&J_AH1<;|ouO!%e#~ow;_+?nd-%y}dL3>3pId z2SmR?_HO=*!KMIP~v9#lez~10Mc0y7!eKd+Y18{ufzmu;x{t=vDt4 zll$kJZuPaN6E8NB=++=3e+9|;QTXZULTzZS|Fwb7#%EHozorNwPSaW25`Xq*o@$Tb|FdfcMJ1OqY2q%nu%eqq#T zSzn!J?1&X7`_ul*Q?+WW?>EVBP~Wig37gxWG;io*pV+X6WYeHO4ATkOWkzYaxh<^9 zGG_lw*zyrz75+BLC;!JXJxr(w2OAvVmwTRCyfgG}*yOsmCuSjA38ux#a5Y-r%AiHG z6e2GFvu=7JMk&ZEn7@8pg2L8pH&>M*4#iMxdxlRKTs%X5oXct9o1W;_jceb1J{e5J zR3XUM^vTw`*SFk=F8uXF+0!;pT!s2!TqRNg3))|bPC|iUnMBlpEgx~K(tHf~$3H(v z_Z#O;|5f~9xD3VwPUMPr(UwcZedu(!3ScFok4HL}6EW?d!h|c9OkX1EBc~6myHDtG z@lmTbsNtm^NxMEzcV2q&VfE!kRr-bRC1h(gWh0?PtS^aSy^15q{eEHAGC;SU$`!bN z_Kz>v&txj~A>*fLXal}|JW&Ft?BM5z|3V@?*Y59H2_GEh#l}2| z(L`-O&oP1BmP+^T$6%}!Vt?4}6kEcf5OTzsJPWR9Ic1KO&s_Z0a+dm*XwgpNV^`_+ zPSYG_85^cktOlkP&n}w)Mcsp(!wGCf_5szCnf3G?&h~E^%LOP_Lko}Gz;(-l^<0X2 zncQONxOhXgt#7$n&4+b*Pu!Kw&az~sfZt!jY`Y(8(Q#12*qj{Mb(C_W{P*d!#P^MW zGB-~n6VrB=HlICe9~WNlPnrFt`NV)w`CPl_+!*yY(KP~hQuL5(LReE%Q}_Ofzf{65 zJ%r}7Hao4RRUKcp5E_I0+TFMpD>(N4w~(Nq0#E1V+rASve3~Kj)ECc;u8QB|=Mzw& zv-cau)slZtP~rINCC4;5nRURC%jR$>wNauWNZ(;yK-4B!TLemkg~A@hyB!qXK3c>1 z`HCJ#v#Oi&x2nj_jQ9Uy6iN|eIok8A!sHiy!z=?w{@o_fv}kR8_H;g)ay7uvKyCvb zblaAjDF2KgTKnwhqBmxFJMA0B97oHG=w#8RJ!vo^hcDf!?@){scb(=JG0G2tS9?1A zsFTweEbwQ>i0UHZ&w9nT1L)sx=bF2$jKEk}SV-|n!h_i6a+4-|N}j@&dg;P{8EXVi9<{ zr*%`JcA}W$oAw)U@lN(;ZsJL~2XidD8~S9lJ}r09q zp^3)E@>%9OF^qw^)pfUJ{r1Y^>*fjqdk&NT1x>#jWVlHpvU;${6lSSDKlP2lJaLd?sLSIkK-z}A1s+?T1(qLR6kLgWIyo;N`Fj1 z2udbgR!aFgas2qWq_{{^M$JydLAXf3v+s?c4)Mew^>jj}h=r7+8eJ_hZ(}FE8O&Rn8{ z+lLKRz&hJ(<-RD3hlGR?JEP3uJpWR&5)Qa*B5$-$D z;_!`DuIGvpm%RHS#AO{Ar80obY~yLjo>7JF5oQ|FK8mC@jk4)^SPJ+yF*)n|azbp> z`hb4=3)$5I5FO_iTE1`K~>pK#M6AgC5lzjp|!^vpQn8b`N$N%)OpvPhSL3^ z`^oiwcH#+XgY}n|Fg@#+%arpzaVp5{S`9D$R(#Kw4=ttmtZDOzD(~G9SswMVi9@lp zQH&QzO6$g7l^9?At2CKWQ$F_=52HKeu%P76379#Y=xz^&DErWgsZE8?NVRyck;P8Y z>z>lGw)4pKO}kl_8-Y=j-;fbytG>N@mJ*8u36TnHN52Qk`LW!WVZhOE(Y|vGZ=u~*wyd(E`#=AEMCyFu z%2TVO^!<=>|BrDozsKZEpyd5t5j}2jde8PY3~=@IaD&CM^>}w-RYl#&DK6R4Si^rf zYW7^GhX2azgz>Qqx>1PK!+=|8TAeBhKll{fBl>Jdhx;#B6T>tM-_9~M8`K`XhTtX)G2SndATrh`no9BAn_g9nv4}Xy=?z~KvO(G5s4x|ognfrP>!w!{Tw?lt*&}p#w zVihAgdEcZ3rDAAUyrKLuI5Q~^QHI@Y|(81wI`fK|6J^p#gN+)^ayA)#X2#x3hU-nia-=Vf=}l1{N;wvb_QEpTUJ#9D`>9kxtY4+|E@9v(uSlDrWat2t=e1m zk=`r6dCGqBXG`Hc5E=9;i;vS=WH;9p4WFe8-Sjy#@_)l4+Zp~rpW-96T*1K0OZR~8 z@}1KgHXoBE9_XlRBrZ^}wDZ!SZ~nE2}f}^ZCUA9`S zMaoh&DPs=r7OA#OF~_pO zA7bi*#HeRbNMjzyYHb$)%Cb0h+RgMMrfvm~X7OqLHeb0ayB1}?d8@yIfY;!E9GI^& z4wZurKA}@Z8Dp`HEThC?mv{R2VPpS*KtMqwG;wHoRaYmWI=*0`uTOUwTT6K3C?nQJ zrXC}c949mH<=TtFjL%4m$8-`5d9dt8Xo`W&--+<@bLs2vks_GRY2L5S@8USGr+ z9S3)1s%iDIQy85wvxJW|@rOXfGV&`rSTK~Kc*&>V;uOGFBULw6B>@6KypuPGwx|RM z3Dmk=x**ixLsC&Ok$e-FD7U!@U=jhR6$BX$X+g;;&_6?Y^MmXfA4;}}_+^MB4TvT{ z8lgt?$pgAIqvTPANB-m^JZb%5Y8#c~t6uvvEza?FKahzbfhdCFfI$59;fEiQaV%& zI`B>|r?ROZRa;~#wU4M-Q9GrYQP2qt8{)H9kJ7Sz&EjZaqJpBVh63e%f4rYCF{wJV zxJ5z1O5e@W^quogO&Ja6KphNa}_vUrm{9gaRXJI3%uA^|E^Jr*EKRL{&B_ zfig#^(94~EVmnvKR{yPU4@xA7+XL?53>ijHb3wjx zc%LMb@*{naHX0LALuS-VSdDm<%Ht_{u#m9e_vIR(J@rzXFc z+!lsFmBy)qk-n~*rgWLyodp3{o0E`KF)y9q#+u|@TP&;OXE0x_%qTNXXH~Hn(;&|O zuzP?}?~x;{sWbPms5xL|xvrjJW~Iy8vJgJCY7)?-97Ck?d6tBY5*fJ^@c zqN-+_lIa>-QwoEBSw)e;#4RhgpjO&`_&60`UQ3skw0^@nb!AQ&972W@#T^7$Ii*Lh ztEsG@WTGMG?=?WpM#xbNX$)9*m9t8*hG0Sgh!9)a*_W23?D3t9Cz)dxDmEs_at9+wgRA>t=ejA=SsJ@%ME8=^r|$VHSd zJhuZ^X#85(%CT@SyTdg2%)@!h!y)d?(0I=@<(bQahw}p;v;s8L44x5WgkDOu>mIP6 zcAlV!pS1tJ|Dsfc))T8#^g%a=@daw`@1XGIYTxBJ#D5iKk;rLYy{5+Y`Gw`P;x%?f zm4uoU_9Q5j^yV1W_g_Q*D~dwUZU1G5Aoh9%&X;VqJC}5^#m0bm&1N@EG>DI*8i8^4 z0HLNgA=Eb}AN&VlQvmbJgQJX{Z@)s`uS0P^wmh{pKm9AYT7cV1p=nPp6N$gplW0-8 z?#`OucYBv9Se7>^?3NL~`Fp46**Pe$o4KyV(-cT_DDujAr(daA=6BNk{wD1Fs7JHS zfkgRrWm`o@wWWrqPZBqcX5Q|H#=N_g8MOZ)6t^2EhI|_<9RL}|1@`uGmx!i5PiTtn zT8HX9a$p6b<-n*C}nUTjM1U@#>ox+{XDzL;0{Hats&BzB$(!u z47r9Ph|xSrM+7?Lvt?^YuG)wPX+wo&cQ}$ z>$TqAi26G*x48r9Cva$zK3fpl~O+XJt!N7`&~LnGUHgSMFybB zq;`A4k08+GACTNw4$u-kk2K>e+nw8 zxb)BS5>^SJHw)1~UtdrI<~~`hbN%(ug5aCl&mqSjNNIj&MQOoTh2A3~f42SFm-W4v z#=OuKW%sB}x4-B|H)pqEJ86~v{VC!D$7&G^CRWWtNfDBf>E_#LBZu3$iF1Sh>4k|1 za2vxOdC-?R%C!^EzXmBaWj)?5^gj^o@o#KY*9oo2h?dd{ z{HB(EIok(?;aR3UAgVU*LO~#w=GZh`MHgPsM*1vA@YzFUMqmkOBN2j%YP+dM5GB-U zs0xnK8IYs%Xr8jjQnL88SwcK%5b>7R{5X~i@T*hZ^R8=yY2*ke@!c`Z#t_VA!`zWw zSSA(p_3ayS`q&lFa-H?t>)bh}7ry$EWCB7eFK#j*9a0I^BBDF9B-cSn_4kMdrN%I( zW-F(!SR?%Nn5WQW$!29M6(?di8Ck?MQ!PxlgL0Gn!#kBwjQ+VT(M=&oW*nS&lp&*e zWb@aoj_sjt5K>HyTg53ll$P?uEutDlDSVlfO8rqKSuW6W&j6Is+yo&7H8zq8pTBfI zw~;9=0RWJ?l@Q+xpn8;Yd;8}<{$9ls zoiu>s2UWI}tmsOqos=qAZ9b`pgkknx`b=T@S&Wuo%R}2;k>(q?T&`%#=P* z%#0$du}W2lRHnzLE?fv9Mwg^6-UuQ=ug-#0NC|I(?+|bfb;y*BX~jx93Kp#`N0o*A zBA_d9NduQwqRwN=S#;7GPF66~%lf&=9HUZNHtr`>#pzcns#J6QzhmBN*wN6)%?QCk zO#Uq3#c{@s5RExfi)3nM?jdEXcm5P36%->5WyWD1%k;=!3kun>a!dX<aJaO{cn$Pd{bfGr36+SGC#h)W zKdMR5biE6Jot|GynwR{`5hgc;}ANo(yOhzGiYsA=t=Q#hT-G!n-;y?W$jK0&l$ zbfLrqWa-p*?4-gFCO(Ii$cP$`-tFG)sY6Q*HHjFYKA9@n4(<1zB{Rpj2@omD$9Zu_ zm($LhbL{kA%oU&tkmD@Eb!vJA=Gf=|YqLInMrFZFo5!iLFXTZJT$eId|DSwtN&SJA-@EL8%>pfk^lWBc4$@)z`oMqoHB%0L V3vzBS2A*`m;OXk;vd$@?2>{Db7#aWo literal 0 HcmV?d00001 diff --git a/docs/img/0.21.0/ready-to-go.png b/docs/img/0.21.0/ready-to-go.png new file mode 100644 index 0000000000000000000000000000000000000000..fa09c381c69b349812336d4510ecd6d7caaa6521 GIT binary patch literal 43990 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/img/0.21.0/select-prompt-template.png b/docs/img/0.21.0/select-prompt-template.png new file mode 100644 index 0000000000000000000000000000000000000000..c976fc05d5fb0fe9d3e4128fca95c3102e730e43 GIT binary patch literal 48406 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 QKn47%t7t3dT)XS{KVk&u9{>OV literal 0 HcmV?d00001 diff --git a/docs/img/0.21.0/selected-prompt-template.png b/docs/img/0.21.0/selected-prompt-template.png new file mode 100644 index 0000000000000000000000000000000000000000..213525ce4e52395f249363d0ade47e0772180ddd GIT binary patch literal 50021 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%0AkIDasNiNmcgLw8LVz8znMzp9?p);{-cn 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 literal 0 HcmV?d00001 diff --git a/docs/img/0.21.0/text-gen-webui-setup.png b/docs/img/0.21.0/text-gen-webui-setup.png new file mode 100644 index 0000000000000000000000000000000000000000..39c820c80f3bee2ed04d97e6a29898dc439f8625 GIT binary patch literal 26541 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.28.57)", "botocore (>=1.31.57)"] +vertex = ["google-auth (>=2,<3)"] + [[package]] name = "anyio" -version = "4.2.0" +version = "4.3.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" files = [ - {file = "anyio-4.2.0-py3-none-any.whl", hash = "sha256:745843b39e829e108e518c489b31dc757de7d2131d53fac32bd8df268227bfee"}, - {file = "anyio-4.2.0.tar.gz", hash = "sha256:e1875bb4b4e2de1669f4bc7869b6d3f54231cdced71605e6e64c9be77e3be50f"}, + {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, + {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, ] [package.dependencies] @@ -381,17 +405,17 @@ files = [ [[package]] name = "boto3" -version = "1.34.43" +version = "1.34.58" description = "The AWS SDK for Python" optional = false python-versions = ">= 3.8" files = [ - {file = "boto3-1.34.43-py3-none-any.whl", hash = "sha256:179cdcff2dee116ff0bbe10c21a374fff8ae0d9ea3842bd8dd2c9f69e8185d91"}, - {file = "boto3-1.34.43.tar.gz", hash = "sha256:ed646f600b76939d54fa1ff868415793551a5a08b9de0a09696b46d116da7da5"}, + {file = "boto3-1.34.58-py3-none-any.whl", hash = "sha256:d213a6fea9db6d537b1e65924133d8279ada79a40bc840d4930e1b64be869d4c"}, + {file = "boto3-1.34.58.tar.gz", hash = "sha256:09e3d17c718bc938a76774f31bc557b20733c0f5f9135a3e7782b55f3459cbdd"}, ] [package.dependencies] -botocore = ">=1.34.43,<1.35.0" +botocore = ">=1.34.58,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -400,13 +424,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.43" +version = "1.34.58" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">= 3.8" files = [ - {file = "botocore-1.34.43-py3-none-any.whl", hash = "sha256:ab7d8046a8c3326ecf3d9f9884e79aa77fed864416ed8af52b9e22ab055acf4e"}, - {file = "botocore-1.34.43.tar.gz", hash = "sha256:00dea9fd602dc97420318d373079bdfcc8da34501aaa908ab98b477526bdefec"}, + {file = "botocore-1.34.58-py3-none-any.whl", hash = "sha256:8086a6ea27d0f658505ac81e6d7314e013561469c40db9b5a4692127eb5c97cf"}, + {file = "botocore-1.34.58.tar.gz", hash = "sha256:d75216952886dc513ea1b5e2979a6af08feed2f537e3fc102e4a0a2ead563a35"}, ] [package.dependencies] @@ -550,17 +574,18 @@ cffi = ">=1.0.0" [[package]] name = "build" -version = "1.0.3" +version = "1.1.1" description = "A simple, correct Python build frontend" optional = false python-versions = ">= 3.7" files = [ - {file = "build-1.0.3-py3-none-any.whl", hash = "sha256:589bf99a67df7c9cf07ec0ac0e5e2ea5d4b37ac63301c4986d1acb126aa83f8f"}, - {file = "build-1.0.3.tar.gz", hash = "sha256:538aab1b64f9828977f84bc63ae570b060a8ed1be419e7870b8b4fc5e6ea553b"}, + {file = "build-1.1.1-py3-none-any.whl", hash = "sha256:8ed0851ee76e6e38adce47e4bee3b51c771d86c64cf578d0c2245567ee200e73"}, + {file = "build-1.1.1.tar.gz", hash = "sha256:8eea65bb45b1aac2e734ba2cc8dad3a6d97d97901a395bd0ed3e7b46953d2a31"}, ] [package.dependencies] colorama = {version = "*", markers = "os_name == \"nt\""} +importlib-metadata = {version = ">=4.6", markers = "python_full_version < \"3.10.2\""} packaging = ">=19.0" pyproject_hooks = "*" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} @@ -573,13 +598,13 @@ virtualenv = ["virtualenv (>=20.0.35)"] [[package]] name = "cachetools" -version = "5.3.2" +version = "5.3.3" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" files = [ - {file = "cachetools-5.3.2-py3-none-any.whl", hash = "sha256:861f35a13a451f94e301ce2bec7cac63e881232ccce7ed67fab9b5df4d3beaa1"}, - {file = "cachetools-5.3.2.tar.gz", hash = "sha256:086ee420196f7b2ab9ca2db2520aca326318b68fe5ba8bc4d49cca91add450f2"}, + {file = "cachetools-5.3.3-py3-none-any.whl", hash = "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945"}, + {file = "cachetools-5.3.3.tar.gz", hash = "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"}, ] [[package]] @@ -795,13 +820,13 @@ numpy = "*" [[package]] name = "chromadb" -version = "0.4.22" +version = "0.4.24" description = "Chroma." optional = false python-versions = ">=3.8" files = [ - {file = "chromadb-0.4.22-py3-none-any.whl", hash = "sha256:ad210b27b4cda2f09d15adc9c83c81bfa66b69f39648a27b637306e40de0680d"}, - {file = "chromadb-0.4.22.tar.gz", hash = "sha256:c793149e1c2bbbb52d77602c6c0594c5752f04cd9be12619250ddad2082af27a"}, + {file = "chromadb-0.4.24-py3-none-any.whl", hash = "sha256:3a08e237a4ad28b5d176685bd22429a03717fe09d35022fb230d516108da01da"}, + {file = "chromadb-0.4.24.tar.gz", hash = "sha256:a5c80b4e4ad9b236ed2d4899a5b9e8002b489293f2881cb2cadab5b199ee1c72"}, ] [package.dependencies] @@ -819,6 +844,7 @@ opentelemetry-api = ">=1.2.0" opentelemetry-exporter-otlp-proto-grpc = ">=1.2.0" opentelemetry-instrumentation-fastapi = ">=0.41b0" opentelemetry-sdk = ">=1.2.0" +orjson = ">=3.9.12" overrides = ">=7.3.1" posthog = ">=2.4.0" pulsar-client = ">=3.1.0" @@ -877,43 +903,43 @@ cron = ["capturer (>=2.4)"] [[package]] name = "cryptography" -version = "42.0.3" +version = "42.0.5" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:de5086cd475d67113ccb6f9fae6d8fe3ac54a4f9238fd08bfdb07b03d791ff0a"}, - {file = "cryptography-42.0.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:935cca25d35dda9e7bd46a24831dfd255307c55a07ff38fd1a92119cffc34857"}, - {file = "cryptography-42.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20100c22b298c9eaebe4f0b9032ea97186ac2555f426c3e70670f2517989543b"}, - {file = "cryptography-42.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eb6368d5327d6455f20327fb6159b97538820355ec00f8cc9464d617caecead"}, - {file = "cryptography-42.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:39d5c93e95bcbc4c06313fc6a500cee414ee39b616b55320c1904760ad686938"}, - {file = "cryptography-42.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3d96ea47ce6d0055d5b97e761d37b4e84195485cb5a38401be341fabf23bc32a"}, - {file = "cryptography-42.0.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:d1998e545081da0ab276bcb4b33cce85f775adb86a516e8f55b3dac87f469548"}, - {file = "cryptography-42.0.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:93fbee08c48e63d5d1b39ab56fd3fdd02e6c2431c3da0f4edaf54954744c718f"}, - {file = "cryptography-42.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:90147dad8c22d64b2ff7331f8d4cddfdc3ee93e4879796f837bdbb2a0b141e0c"}, - {file = "cryptography-42.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4dcab7c25e48fc09a73c3e463d09ac902a932a0f8d0c568238b3696d06bf377b"}, - {file = "cryptography-42.0.3-cp37-abi3-win32.whl", hash = "sha256:1e935c2900fb53d31f491c0de04f41110351377be19d83d908c1fd502ae8daa5"}, - {file = "cryptography-42.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:762f3771ae40e111d78d77cbe9c1035e886ac04a234d3ee0856bf4ecb3749d54"}, - {file = "cryptography-42.0.3-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:0d3ec384058b642f7fb7e7bff9664030011ed1af8f852540c76a1317a9dd0d20"}, - {file = "cryptography-42.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35772a6cffd1f59b85cb670f12faba05513446f80352fe811689b4e439b5d89e"}, - {file = "cryptography-42.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:04859aa7f12c2b5f7e22d25198ddd537391f1695df7057c8700f71f26f47a129"}, - {file = "cryptography-42.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c3d1f5a1d403a8e640fa0887e9f7087331abb3f33b0f2207d2cc7f213e4a864c"}, - {file = "cryptography-42.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:df34312149b495d9d03492ce97471234fd9037aa5ba217c2a6ea890e9166f151"}, - {file = "cryptography-42.0.3-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:de4ae486041878dc46e571a4c70ba337ed5233a1344c14a0790c4c4be4bbb8b4"}, - {file = "cryptography-42.0.3-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:0fab2a5c479b360e5e0ea9f654bcebb535e3aa1e493a715b13244f4e07ea8eec"}, - {file = "cryptography-42.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25b09b73db78facdfd7dd0fa77a3f19e94896197c86e9f6dc16bce7b37a96504"}, - {file = "cryptography-42.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d5cf11bc7f0b71fb71af26af396c83dfd3f6eed56d4b6ef95d57867bf1e4ba65"}, - {file = "cryptography-42.0.3-cp39-abi3-win32.whl", hash = "sha256:0fea01527d4fb22ffe38cd98951c9044400f6eff4788cf52ae116e27d30a1ba3"}, - {file = "cryptography-42.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:2619487f37da18d6826e27854a7f9d4d013c51eafb066c80d09c63cf24505306"}, - {file = "cryptography-42.0.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ead69ba488f806fe1b1b4050febafdbf206b81fa476126f3e16110c818bac396"}, - {file = "cryptography-42.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:20180da1b508f4aefc101cebc14c57043a02b355d1a652b6e8e537967f1e1b46"}, - {file = "cryptography-42.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:5fbf0f3f0fac7c089308bd771d2c6c7b7d53ae909dce1db52d8e921f6c19bb3a"}, - {file = "cryptography-42.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c23f03cfd7d9826cdcbad7850de67e18b4654179e01fe9bc623d37c2638eb4ef"}, - {file = "cryptography-42.0.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:db0480ffbfb1193ac4e1e88239f31314fe4c6cdcf9c0b8712b55414afbf80db4"}, - {file = "cryptography-42.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:6c25e1e9c2ce682d01fc5e2dde6598f7313027343bd14f4049b82ad0402e52cd"}, - {file = "cryptography-42.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9541c69c62d7446539f2c1c06d7046aef822940d248fa4b8962ff0302862cc1f"}, - {file = "cryptography-42.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b797099d221df7cce5ff2a1d272761d1554ddf9a987d3e11f6459b38cd300fd"}, - {file = "cryptography-42.0.3.tar.gz", hash = "sha256:069d2ce9be5526a44093a0991c450fe9906cdf069e0e7cd67d9dee49a62b9ebe"}, + {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16"}, + {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278"}, + {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d"}, + {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da"}, + {file = "cryptography-42.0.5-cp37-abi3-win32.whl", hash = "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74"}, + {file = "cryptography-42.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940"}, + {file = "cryptography-42.0.5-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc"}, + {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc"}, + {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30"}, + {file = "cryptography-42.0.5-cp39-abi3-win32.whl", hash = "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413"}, + {file = "cryptography-42.0.5-cp39-abi3-win_amd64.whl", hash = "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c"}, + {file = "cryptography-42.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac"}, + {file = "cryptography-42.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd"}, + {file = "cryptography-42.0.5.tar.gz", hash = "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1"}, ] [package.dependencies] @@ -959,33 +985,33 @@ files = [ [[package]] name = "dnspython" -version = "2.5.0" +version = "2.6.1" description = "DNS toolkit" optional = false python-versions = ">=3.8" files = [ - {file = "dnspython-2.5.0-py3-none-any.whl", hash = "sha256:6facdf76b73c742ccf2d07add296f178e629da60be23ce4b0a9c927b1e02c3a6"}, - {file = "dnspython-2.5.0.tar.gz", hash = "sha256:a0034815a59ba9ae888946be7ccca8f7c157b286f8455b379c692efb51022a15"}, + {file = "dnspython-2.6.1-py3-none-any.whl", hash = "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50"}, + {file = "dnspython-2.6.1.tar.gz", hash = "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc"}, ] [package.extras] -dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=5.0.3)", "mypy (>=1.0.1)", "pylint (>=2.7)", "pytest (>=6.2.5)", "pytest-cov (>=3.0.0)", "sphinx (>=7.0.0)", "twine (>=4.0.0)", "wheel (>=0.41.0)"] +dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "sphinx (>=7.2.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] dnssec = ["cryptography (>=41)"] -doh = ["h2 (>=4.1.0)", "httpcore (>=0.17.3)", "httpx (>=0.25.1)"] -doq = ["aioquic (>=0.9.20)"] -idna = ["idna (>=2.1)"] -trio = ["trio (>=0.14)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] +doq = ["aioquic (>=0.9.25)"] +idna = ["idna (>=3.6)"] +trio = ["trio (>=0.23)"] wmi = ["wmi (>=1.5.1)"] [[package]] name = "email-validator" -version = "2.1.0.post1" +version = "2.1.1" description = "A robust email address syntax and deliverability validation library." optional = false python-versions = ">=3.8" files = [ - {file = "email_validator-2.1.0.post1-py3-none-any.whl", hash = "sha256:c973053efbeddfef924dc0bd93f6e77a1ea7ee0fce935aea7103c7a3d6d2d637"}, - {file = "email_validator-2.1.0.post1.tar.gz", hash = "sha256:a4b0bd1cf55f073b924258d19321b1f3aa74b4b5a71a42c305575dba920e1a44"}, + {file = "email_validator-2.1.1-py3-none-any.whl", hash = "sha256:97d882d174e2a65732fb43bfce81a3a834cbc1bde8bf419e30ef5ea976370a05"}, + {file = "email_validator-2.1.1.tar.gz", hash = "sha256:200a70680ba08904be6d1eef729205cc0d687634399a5924d842533efb824b84"}, ] [package.dependencies] @@ -1008,13 +1034,13 @@ test = ["pytest (>=6)"] [[package]] name = "fastapi" -version = "0.109.2" +version = "0.110.0" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" files = [ - {file = "fastapi-0.109.2-py3-none-any.whl", hash = "sha256:2c9bab24667293b501cad8dd388c05240c850b58ec5876ee3283c47d6e1e3a4d"}, - {file = "fastapi-0.109.2.tar.gz", hash = "sha256:f3817eac96fe4f65a2ebb4baa000f394e55f5fccdaf7f75250804bc58f354f73"}, + {file = "fastapi-0.110.0-py3-none-any.whl", hash = "sha256:87a1f6fb632a218222c5984be540055346a8f5d8a68e8f6fb647b1dc9934de4b"}, + {file = "fastapi-0.110.0.tar.gz", hash = "sha256:266775f0dcc95af9d3ef39bad55cff525329a931d5fd51930aadd4f428bf7ff3"}, ] [package.dependencies] @@ -1054,13 +1080,13 @@ typing = ["typing-extensions (>=4.8)"] [[package]] name = "flatbuffers" -version = "23.5.26" +version = "24.3.7" description = "The FlatBuffers serialization format for Python" optional = false python-versions = "*" files = [ - {file = "flatbuffers-23.5.26-py2.py3-none-any.whl", hash = "sha256:c0ff356da363087b915fde4b8b45bdda73432fc17cddb3c8157472eab1422ad1"}, - {file = "flatbuffers-23.5.26.tar.gz", hash = "sha256:9ea1144cac05ce5d86e2859f431c6cd5e66cd9c78c558317c7955fb8d4c78d89"}, + {file = "flatbuffers-24.3.7-py2.py3-none-any.whl", hash = "sha256:80c4f5dcad0ee76b7e349671a0d657f2fbba927a0244f88dd3f5ed6a3694e1fc"}, + {file = "flatbuffers-24.3.7.tar.gz", hash = "sha256:0895c22b9a6019ff2f4de2e5e2f7cd15914043e6e7033a94c0c6369422690f22"}, ] [[package]] @@ -1186,13 +1212,13 @@ tqdm = ["tqdm"] [[package]] name = "google-auth" -version = "2.28.0" +version = "2.28.1" description = "Google Authentication Library" optional = false python-versions = ">=3.7" files = [ - {file = "google-auth-2.28.0.tar.gz", hash = "sha256:3cfc1b6e4e64797584fb53fc9bd0b7afa9b7c0dba2004fa7dcc9349e58cc3195"}, - {file = "google_auth-2.28.0-py2.py3-none-any.whl", hash = "sha256:7634d29dcd1e101f5226a23cbc4a0c6cda6394253bf80e281d9c5c6797869c53"}, + {file = "google-auth-2.28.1.tar.gz", hash = "sha256:34fc3046c257cedcf1622fc4b31fc2be7923d9b4d44973d481125ecc50d83885"}, + {file = "google_auth-2.28.1-py2.py3-none-any.whl", hash = "sha256:25141e2d7a14bfcba945f5e9827f98092716e99482562f15306e5b026e21aa72"}, ] [package.dependencies] @@ -1226,69 +1252,69 @@ grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] [[package]] name = "grpcio" -version = "1.60.1" +version = "1.62.0" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.7" files = [ - {file = "grpcio-1.60.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:14e8f2c84c0832773fb3958240c69def72357bc11392571f87b2d7b91e0bb092"}, - {file = "grpcio-1.60.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:33aed0a431f5befeffd9d346b0fa44b2c01aa4aeae5ea5b2c03d3e25e0071216"}, - {file = "grpcio-1.60.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:fead980fbc68512dfd4e0c7b1f5754c2a8e5015a04dea454b9cada54a8423525"}, - {file = "grpcio-1.60.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:082081e6a36b6eb5cf0fd9a897fe777dbb3802176ffd08e3ec6567edd85bc104"}, - {file = "grpcio-1.60.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55ccb7db5a665079d68b5c7c86359ebd5ebf31a19bc1a91c982fd622f1e31ff2"}, - {file = "grpcio-1.60.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9b54577032d4f235452f77a83169b6527bf4b77d73aeada97d45b2aaf1bf5ce0"}, - {file = "grpcio-1.60.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7d142bcd604166417929b071cd396aa13c565749a4c840d6c702727a59d835eb"}, - {file = "grpcio-1.60.1-cp310-cp310-win32.whl", hash = "sha256:2a6087f234cb570008a6041c8ffd1b7d657b397fdd6d26e83d72283dae3527b1"}, - {file = "grpcio-1.60.1-cp310-cp310-win_amd64.whl", hash = "sha256:f2212796593ad1d0235068c79836861f2201fc7137a99aa2fea7beeb3b101177"}, - {file = "grpcio-1.60.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:79ae0dc785504cb1e1788758c588c711f4e4a0195d70dff53db203c95a0bd303"}, - {file = "grpcio-1.60.1-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:4eec8b8c1c2c9b7125508ff7c89d5701bf933c99d3910e446ed531cd16ad5d87"}, - {file = "grpcio-1.60.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:8c9554ca8e26241dabe7951aa1fa03a1ba0856688ecd7e7bdbdd286ebc272e4c"}, - {file = "grpcio-1.60.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91422ba785a8e7a18725b1dc40fbd88f08a5bb4c7f1b3e8739cab24b04fa8a03"}, - {file = "grpcio-1.60.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cba6209c96828711cb7c8fcb45ecef8c8859238baf15119daa1bef0f6c84bfe7"}, - {file = "grpcio-1.60.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c71be3f86d67d8d1311c6076a4ba3b75ba5703c0b856b4e691c9097f9b1e8bd2"}, - {file = "grpcio-1.60.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:af5ef6cfaf0d023c00002ba25d0751e5995fa0e4c9eec6cd263c30352662cbce"}, - {file = "grpcio-1.60.1-cp311-cp311-win32.whl", hash = "sha256:a09506eb48fa5493c58f946c46754ef22f3ec0df64f2b5149373ff31fb67f3dd"}, - {file = "grpcio-1.60.1-cp311-cp311-win_amd64.whl", hash = "sha256:49c9b6a510e3ed8df5f6f4f3c34d7fbf2d2cae048ee90a45cd7415abab72912c"}, - {file = "grpcio-1.60.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:b58b855d0071575ea9c7bc0d84a06d2edfbfccec52e9657864386381a7ce1ae9"}, - {file = "grpcio-1.60.1-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:a731ac5cffc34dac62053e0da90f0c0b8560396a19f69d9703e88240c8f05858"}, - {file = "grpcio-1.60.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:cf77f8cf2a651fbd869fbdcb4a1931464189cd210abc4cfad357f1cacc8642a6"}, - {file = "grpcio-1.60.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c557e94e91a983e5b1e9c60076a8fd79fea1e7e06848eb2e48d0ccfb30f6e073"}, - {file = "grpcio-1.60.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:069fe2aeee02dfd2135d562d0663fe70fbb69d5eed6eb3389042a7e963b54de8"}, - {file = "grpcio-1.60.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb0af13433dbbd1c806e671d81ec75bd324af6ef75171fd7815ca3074fe32bfe"}, - {file = "grpcio-1.60.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2f44c32aef186bbba254129cea1df08a20be414144ac3bdf0e84b24e3f3b2e05"}, - {file = "grpcio-1.60.1-cp312-cp312-win32.whl", hash = "sha256:a212e5dea1a4182e40cd3e4067ee46be9d10418092ce3627475e995cca95de21"}, - {file = "grpcio-1.60.1-cp312-cp312-win_amd64.whl", hash = "sha256:6e490fa5f7f5326222cb9f0b78f207a2b218a14edf39602e083d5f617354306f"}, - {file = "grpcio-1.60.1-cp37-cp37m-linux_armv7l.whl", hash = "sha256:4216e67ad9a4769117433814956031cb300f85edc855252a645a9a724b3b6594"}, - {file = "grpcio-1.60.1-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:73e14acd3d4247169955fae8fb103a2b900cfad21d0c35f0dcd0fdd54cd60367"}, - {file = "grpcio-1.60.1-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:6ecf21d20d02d1733e9c820fb5c114c749d888704a7ec824b545c12e78734d1c"}, - {file = "grpcio-1.60.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33bdea30dcfd4f87b045d404388469eb48a48c33a6195a043d116ed1b9a0196c"}, - {file = "grpcio-1.60.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53b69e79d00f78c81eecfb38f4516080dc7f36a198b6b37b928f1c13b3c063e9"}, - {file = "grpcio-1.60.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:39aa848794b887120b1d35b1b994e445cc028ff602ef267f87c38122c1add50d"}, - {file = "grpcio-1.60.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:72153a0d2e425f45b884540a61c6639436ddafa1829a42056aa5764b84108b8e"}, - {file = "grpcio-1.60.1-cp37-cp37m-win_amd64.whl", hash = "sha256:50d56280b482875d1f9128ce596e59031a226a8b84bec88cb2bf76c289f5d0de"}, - {file = "grpcio-1.60.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:6d140bdeb26cad8b93c1455fa00573c05592793c32053d6e0016ce05ba267549"}, - {file = "grpcio-1.60.1-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:bc808924470643b82b14fe121923c30ec211d8c693e747eba8a7414bc4351a23"}, - {file = "grpcio-1.60.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:70c83bb530572917be20c21f3b6be92cd86b9aecb44b0c18b1d3b2cc3ae47df0"}, - {file = "grpcio-1.60.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9b106bc52e7f28170e624ba61cc7dc6829566e535a6ec68528f8e1afbed1c41f"}, - {file = "grpcio-1.60.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30e980cd6db1088c144b92fe376747328d5554bc7960ce583ec7b7d81cd47287"}, - {file = "grpcio-1.60.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0c5807e9152eff15f1d48f6b9ad3749196f79a4a050469d99eecb679be592acc"}, - {file = "grpcio-1.60.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f1c3dc536b3ee124e8b24feb7533e5c70b9f2ef833e3b2e5513b2897fd46763a"}, - {file = "grpcio-1.60.1-cp38-cp38-win32.whl", hash = "sha256:d7404cebcdb11bb5bd40bf94131faf7e9a7c10a6c60358580fe83913f360f929"}, - {file = "grpcio-1.60.1-cp38-cp38-win_amd64.whl", hash = "sha256:c8754c75f55781515a3005063d9a05878b2cfb3cb7e41d5401ad0cf19de14872"}, - {file = "grpcio-1.60.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:0250a7a70b14000fa311de04b169cc7480be6c1a769b190769d347939d3232a8"}, - {file = "grpcio-1.60.1-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:660fc6b9c2a9ea3bb2a7e64ba878c98339abaf1811edca904ac85e9e662f1d73"}, - {file = "grpcio-1.60.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:76eaaba891083fcbe167aa0f03363311a9f12da975b025d30e94b93ac7a765fc"}, - {file = "grpcio-1.60.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5d97c65ea7e097056f3d1ead77040ebc236feaf7f71489383d20f3b4c28412a"}, - {file = "grpcio-1.60.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb2a2911b028f01c8c64d126f6b632fcd8a9ac975aa1b3855766c94e4107180"}, - {file = "grpcio-1.60.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5a1ebbae7e2214f51b1f23b57bf98eeed2cf1ba84e4d523c48c36d5b2f8829ff"}, - {file = "grpcio-1.60.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9a66f4d2a005bc78e61d805ed95dedfcb35efa84b7bba0403c6d60d13a3de2d6"}, - {file = "grpcio-1.60.1-cp39-cp39-win32.whl", hash = "sha256:8d488fbdbf04283f0d20742b64968d44825617aa6717b07c006168ed16488804"}, - {file = "grpcio-1.60.1-cp39-cp39-win_amd64.whl", hash = "sha256:61b7199cd2a55e62e45bfb629a35b71fc2c0cb88f686a047f25b1112d3810904"}, - {file = "grpcio-1.60.1.tar.gz", hash = "sha256:dd1d3a8d1d2e50ad9b59e10aa7f07c7d1be2b367f3f2d33c5fade96ed5460962"}, + {file = "grpcio-1.62.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:136ffd79791b1eddda8d827b607a6285474ff8a1a5735c4947b58c481e5e4271"}, + {file = "grpcio-1.62.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:d6a56ba703be6b6267bf19423d888600c3f574ac7c2cc5e6220af90662a4d6b0"}, + {file = "grpcio-1.62.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:4cd356211579043fce9f52acc861e519316fff93980a212c8109cca8f47366b6"}, + {file = "grpcio-1.62.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e803e9b58d8f9b4ff0ea991611a8d51b31c68d2e24572cd1fe85e99e8cc1b4f8"}, + {file = "grpcio-1.62.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4c04fe33039b35b97c02d2901a164bbbb2f21fb9c4e2a45a959f0b044c3512c"}, + {file = "grpcio-1.62.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:95370c71b8c9062f9ea033a0867c4c73d6f0ff35113ebd2618171ec1f1e903e0"}, + {file = "grpcio-1.62.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c912688acc05e4ff012c8891803659d6a8a8b5106f0f66e0aed3fb7e77898fa6"}, + {file = "grpcio-1.62.0-cp310-cp310-win32.whl", hash = "sha256:821a44bd63d0f04e33cf4ddf33c14cae176346486b0df08b41a6132b976de5fc"}, + {file = "grpcio-1.62.0-cp310-cp310-win_amd64.whl", hash = "sha256:81531632f93fece32b2762247c4c169021177e58e725494f9a746ca62c83acaa"}, + {file = "grpcio-1.62.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:3fa15850a6aba230eed06b236287c50d65a98f05054a0f01ccedf8e1cc89d57f"}, + {file = "grpcio-1.62.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:36df33080cd7897623feff57831eb83c98b84640b016ce443305977fac7566fb"}, + {file = "grpcio-1.62.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:7a195531828b46ea9c4623c47e1dc45650fc7206f8a71825898dd4c9004b0928"}, + {file = "grpcio-1.62.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab140a3542bbcea37162bdfc12ce0d47a3cda3f2d91b752a124cc9fe6776a9e2"}, + {file = "grpcio-1.62.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f9d6c3223914abb51ac564dc9c3782d23ca445d2864321b9059d62d47144021"}, + {file = "grpcio-1.62.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fbe0c20ce9a1cff75cfb828b21f08d0a1ca527b67f2443174af6626798a754a4"}, + {file = "grpcio-1.62.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:38f69de9c28c1e7a8fd24e4af4264726637b72f27c2099eaea6e513e7142b47e"}, + {file = "grpcio-1.62.0-cp311-cp311-win32.whl", hash = "sha256:ce1aafdf8d3f58cb67664f42a617af0e34555fe955450d42c19e4a6ad41c84bd"}, + {file = "grpcio-1.62.0-cp311-cp311-win_amd64.whl", hash = "sha256:eef1d16ac26c5325e7d39f5452ea98d6988c700c427c52cbc7ce3201e6d93334"}, + {file = "grpcio-1.62.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:8aab8f90b2a41208c0a071ec39a6e5dbba16fd827455aaa070fec241624ccef8"}, + {file = "grpcio-1.62.0-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:62aa1659d8b6aad7329ede5d5b077e3d71bf488d85795db517118c390358d5f6"}, + {file = "grpcio-1.62.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:0d7ae7fc7dbbf2d78d6323641ded767d9ec6d121aaf931ec4a5c50797b886532"}, + {file = "grpcio-1.62.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f359d635ee9428f0294bea062bb60c478a8ddc44b0b6f8e1f42997e5dc12e2ee"}, + {file = "grpcio-1.62.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77d48e5b1f8f4204889f1acf30bb57c30378e17c8d20df5acbe8029e985f735c"}, + {file = "grpcio-1.62.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:662d3df5314ecde3184cf87ddd2c3a66095b3acbb2d57a8cada571747af03873"}, + {file = "grpcio-1.62.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:92cdb616be44c8ac23a57cce0243af0137a10aa82234f23cd46e69e115071388"}, + {file = "grpcio-1.62.0-cp312-cp312-win32.whl", hash = "sha256:0b9179478b09ee22f4a36b40ca87ad43376acdccc816ce7c2193a9061bf35701"}, + {file = "grpcio-1.62.0-cp312-cp312-win_amd64.whl", hash = "sha256:614c3ed234208e76991992342bab725f379cc81c7dd5035ee1de2f7e3f7a9842"}, + {file = "grpcio-1.62.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:7e1f51e2a460b7394670fdb615e26d31d3260015154ea4f1501a45047abe06c9"}, + {file = "grpcio-1.62.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:bcff647e7fe25495e7719f779cc219bbb90b9e79fbd1ce5bda6aae2567f469f2"}, + {file = "grpcio-1.62.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:56ca7ba0b51ed0de1646f1735154143dcbdf9ec2dbe8cc6645def299bb527ca1"}, + {file = "grpcio-1.62.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e84bfb2a734e4a234b116be208d6f0214e68dcf7804306f97962f93c22a1839"}, + {file = "grpcio-1.62.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c1488b31a521fbba50ae86423f5306668d6f3a46d124f7819c603979fc538c4"}, + {file = "grpcio-1.62.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:98d8f4eb91f1ce0735bf0b67c3b2a4fea68b52b2fd13dc4318583181f9219b4b"}, + {file = "grpcio-1.62.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b3d3d755cfa331d6090e13aac276d4a3fb828bf935449dc16c3d554bf366136b"}, + {file = "grpcio-1.62.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a33f2bfd8a58a02aab93f94f6c61279be0f48f99fcca20ebaee67576cd57307b"}, + {file = "grpcio-1.62.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:5e709f7c8028ce0443bddc290fb9c967c1e0e9159ef7a030e8c21cac1feabd35"}, + {file = "grpcio-1.62.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:2f3d9a4d0abb57e5f49ed5039d3ed375826c2635751ab89dcc25932ff683bbb6"}, + {file = "grpcio-1.62.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:62ccb92f594d3d9fcd00064b149a0187c246b11e46ff1b7935191f169227f04c"}, + {file = "grpcio-1.62.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:921148f57c2e4b076af59a815467d399b7447f6e0ee10ef6d2601eb1e9c7f402"}, + {file = "grpcio-1.62.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f897b16190b46bc4d4aaf0a32a4b819d559a37a756d7c6b571e9562c360eed72"}, + {file = "grpcio-1.62.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1bc8449084fe395575ed24809752e1dc4592bb70900a03ca42bf236ed5bf008f"}, + {file = "grpcio-1.62.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:81d444e5e182be4c7856cd33a610154fe9ea1726bd071d07e7ba13fafd202e38"}, + {file = "grpcio-1.62.0-cp38-cp38-win32.whl", hash = "sha256:88f41f33da3840b4a9bbec68079096d4caf629e2c6ed3a72112159d570d98ebe"}, + {file = "grpcio-1.62.0-cp38-cp38-win_amd64.whl", hash = "sha256:fc2836cb829895ee190813446dce63df67e6ed7b9bf76060262c55fcd097d270"}, + {file = "grpcio-1.62.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:fcc98cff4084467839d0a20d16abc2a76005f3d1b38062464d088c07f500d170"}, + {file = "grpcio-1.62.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:0d3dee701e48ee76b7d6fbbba18ba8bc142e5b231ef7d3d97065204702224e0e"}, + {file = "grpcio-1.62.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:b7a6be562dd18e5d5bec146ae9537f20ae1253beb971c0164f1e8a2f5a27e829"}, + {file = "grpcio-1.62.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29cb592c4ce64a023712875368bcae13938c7f03e99f080407e20ffe0a9aa33b"}, + {file = "grpcio-1.62.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eda79574aec8ec4d00768dcb07daba60ed08ef32583b62b90bbf274b3c279f7"}, + {file = "grpcio-1.62.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7eea57444a354ee217fda23f4b479a4cdfea35fb918ca0d8a0e73c271e52c09c"}, + {file = "grpcio-1.62.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0e97f37a3b7c89f9125b92d22e9c8323f4e76e7993ba7049b9f4ccbe8bae958a"}, + {file = "grpcio-1.62.0-cp39-cp39-win32.whl", hash = "sha256:39cd45bd82a2e510e591ca2ddbe22352e8413378852ae814549c162cf3992a93"}, + {file = "grpcio-1.62.0-cp39-cp39-win_amd64.whl", hash = "sha256:b71c65427bf0ec6a8b48c68c17356cb9fbfc96b1130d20a07cb462f4e4dcdcd5"}, + {file = "grpcio-1.62.0.tar.gz", hash = "sha256:748496af9238ac78dcd98cce65421f1adce28c3979393e3609683fcd7f3880d7"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.60.1)"] +protobuf = ["grpcio-tools (>=1.62.0)"] [[package]] name = "h11" @@ -1303,13 +1329,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.3" +version = "1.0.4" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.3-py3-none-any.whl", hash = "sha256:9a6a501c3099307d9fd76ac244e08503427679b1e81ceb1d922485e2f2462ad2"}, - {file = "httpcore-1.0.3.tar.gz", hash = "sha256:5c0f9546ad17dac4d0772b0808856eb616eb8b48ce94f49ed819fd6982a8a544"}, + {file = "httpcore-1.0.4-py3-none-any.whl", hash = "sha256:ac418c1db41bade2ad53ae2f3834a3a0f5ae76b56cf5aa497d2d033384fc7d73"}, + {file = "httpcore-1.0.4.tar.gz", hash = "sha256:cb2839ccfcba0d2d3c1131d3c3e26dfc327326fbe7a5dc0dbfe9f6c9151bb022"}, ] [package.dependencies] @@ -1320,7 +1346,7 @@ h11 = ">=0.13,<0.15" asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.24.0)"] +trio = ["trio (>=0.22.0,<0.25.0)"] [[package]] name = "httptools" @@ -1372,13 +1398,13 @@ test = ["Cython (>=0.29.24,<0.30.0)"] [[package]] name = "httpx" -version = "0.26.0" +version = "0.27.0" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpx-0.26.0-py3-none-any.whl", hash = "sha256:8915f5a3627c4d47b73e8202457cb28f1266982d1159bd5779d86a80c0eab1cd"}, - {file = "httpx-0.26.0.tar.gz", hash = "sha256:451b55c30d5185ea6b23c2c793abf9bb237d2a7dfb901ced6ff69ad37ec1dfaf"}, + {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, + {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, ] [package.dependencies] @@ -1396,13 +1422,13 @@ socks = ["socksio (==1.*)"] [[package]] name = "huggingface-hub" -version = "0.20.3" +version = "0.21.4" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.20.3-py3-none-any.whl", hash = "sha256:d988ae4f00d3e307b0c80c6a05ca6dbb7edba8bba3079f74cda7d9c2e562a7b6"}, - {file = "huggingface_hub-0.20.3.tar.gz", hash = "sha256:94e7f8e074475fbc67d6a71957b678e1b4a74ff1b64a644fd6cbb83da962d05d"}, + {file = "huggingface_hub-0.21.4-py3-none-any.whl", hash = "sha256:df37c2c37fc6c82163cdd8a67ede261687d80d1e262526d6c0ce73b6b3630a7b"}, + {file = "huggingface_hub-0.21.4.tar.gz", hash = "sha256:e1f4968c93726565a80edf6dc309763c7b546d0cfe79aa221206034d50155531"}, ] [package.dependencies] @@ -1419,11 +1445,12 @@ all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", cli = ["InquirerPy (==0.3.4)"] dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "mypy (==1.5.1)", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.1.3)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] +hf-transfer = ["hf-transfer (>=0.1.4)"] inference = ["aiohttp", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)"] quality = ["mypy (==1.5.1)", "ruff (>=0.1.3)"] tensorflow = ["graphviz", "pydot", "tensorflow"] testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "numpy", "pydantic (>1.1,<2.0)", "pydantic (>1.1,<3.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] -torch = ["torch"] +torch = ["safetensors", "torch"] typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] [[package]] @@ -1472,18 +1499,18 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs [[package]] name = "importlib-resources" -version = "6.1.1" +version = "6.1.3" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, - {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, + {file = "importlib_resources-6.1.3-py3-none-any.whl", hash = "sha256:4c0269e3580fe2634d364b39b38b961540a7738c02cb984e98add8b4221d793d"}, + {file = "importlib_resources-6.1.3.tar.gz", hash = "sha256:56fb4525197b78544a3354ea27793952ab93f935bb4bf746b846bb1015020f2b"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] +testing = ["jaraco.collections", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] [[package]] name = "iniconfig" @@ -2253,13 +2280,13 @@ files = [ [[package]] name = "nvidia-nvjitlink-cu12" -version = "12.3.101" +version = "12.4.99" description = "Nvidia JIT LTO Library" optional = false python-versions = ">=3" files = [ - {file = "nvidia_nvjitlink_cu12-12.3.101-py3-none-manylinux1_x86_64.whl", hash = "sha256:64335a8088e2b9d196ae8665430bc6a2b7e6ef2eb877a9c735c804bd4ff6467c"}, - {file = "nvidia_nvjitlink_cu12-12.3.101-py3-none-win_amd64.whl", hash = "sha256:1b2e317e437433753530792f13eece58f0aec21a2b05903be7bffe58a606cbd1"}, + {file = "nvidia_nvjitlink_cu12-12.4.99-py3-none-manylinux2014_x86_64.whl", hash = "sha256:c6428836d20fe7e327191c175791d38570e10762edc588fb46749217cd444c74"}, + {file = "nvidia_nvjitlink_cu12-12.4.99-py3-none-win_amd64.whl", hash = "sha256:991905ffa2144cb603d8ca7962d75c35334ae82bf92820b6ba78157277da1ad2"}, ] [[package]] @@ -2291,36 +2318,36 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] [[package]] name = "onnxruntime" -version = "1.17.0" +version = "1.17.1" description = "ONNX Runtime is a runtime accelerator for Machine Learning models" optional = false python-versions = "*" files = [ - {file = "onnxruntime-1.17.0-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d2b22a25a94109cc983443116da8d9805ced0256eb215c5e6bc6dcbabefeab96"}, - {file = "onnxruntime-1.17.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4c87d83c6f58d1af2675fc99e3dc810f2dbdb844bcefd0c1b7573632661f6fc"}, - {file = "onnxruntime-1.17.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dba55723bf9b835e358f48c98a814b41692c393eb11f51e02ece0625c756b797"}, - {file = "onnxruntime-1.17.0-cp310-cp310-win32.whl", hash = "sha256:ee48422349cc500273beea7607e33c2237909f58468ae1d6cccfc4aecd158565"}, - {file = "onnxruntime-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:f34cc46553359293854e38bdae2ab1be59543aad78a6317e7746d30e311110c3"}, - {file = "onnxruntime-1.17.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:16d26badd092c8c257fa57c458bb600d96dc15282c647ccad0ed7b2732e6c03b"}, - {file = "onnxruntime-1.17.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6f1273bebcdb47ed932d076c85eb9488bc4768fcea16d5f2747ca692fad4f9d3"}, - {file = "onnxruntime-1.17.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cb60fd3c2c1acd684752eb9680e89ae223e9801a9b0e0dc7b28adabe45a2e380"}, - {file = "onnxruntime-1.17.0-cp311-cp311-win32.whl", hash = "sha256:4b038324586bc905299e435f7c00007e6242389c856b82fe9357fdc3b1ef2bdc"}, - {file = "onnxruntime-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:93d39b3fa1ee01f034f098e1c7769a811a21365b4883f05f96c14a2b60c6028b"}, - {file = "onnxruntime-1.17.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:90c0890e36f880281c6c698d9bc3de2afbeee2f76512725ec043665c25c67d21"}, - {file = "onnxruntime-1.17.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7466724e809a40e986b1637cba156ad9fc0d1952468bc00f79ef340bc0199552"}, - {file = "onnxruntime-1.17.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d47bee7557a8b99c8681b6882657a515a4199778d6d5e24e924d2aafcef55b0a"}, - {file = "onnxruntime-1.17.0-cp312-cp312-win32.whl", hash = "sha256:bb1bf1ee575c665b8bbc3813ab906e091a645a24ccc210be7932154b8260eca1"}, - {file = "onnxruntime-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:ac2f286da3494b29b4186ca193c7d4e6a2c1f770c4184c7192c5da142c3dec28"}, - {file = "onnxruntime-1.17.0-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:1ec485643b93e0a3896c655eb2426decd63e18a278bb7ccebc133b340723624f"}, - {file = "onnxruntime-1.17.0-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83c35809cda898c5a11911c69ceac8a2ac3925911854c526f73bad884582f911"}, - {file = "onnxruntime-1.17.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fa464aa4d81df818375239e481887b656e261377d5b6b9a4692466f5f3261edc"}, - {file = "onnxruntime-1.17.0-cp38-cp38-win32.whl", hash = "sha256:b7b337cd0586f7836601623cbd30a443df9528ef23965860d11c753ceeb009f2"}, - {file = "onnxruntime-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:fbb9faaf51d01aa2c147ef52524d9326744c852116d8005b9041809a71838878"}, - {file = "onnxruntime-1.17.0-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:5a06ab84eaa350bf64b1d747b33ccf10da64221ed1f38f7287f15eccbec81603"}, - {file = "onnxruntime-1.17.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d3d11db2c8242766212a68d0b139745157da7ce53bd96ba349a5c65e5a02357"}, - {file = "onnxruntime-1.17.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5632077c3ab8b0cd4f74b0af9c4e924be012b1a7bcd7daa845763c6c6bf14b7d"}, - {file = "onnxruntime-1.17.0-cp39-cp39-win32.whl", hash = "sha256:61a12732cba869b3ad2d4e29ab6cb62c7a96f61b8c213f7fcb961ba412b70b37"}, - {file = "onnxruntime-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:461fa0fc7d9c392c352b6cccdedf44d818430f3d6eacd924bb804fdea2dcfd02"}, + {file = "onnxruntime-1.17.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:d43ac17ac4fa3c9096ad3c0e5255bb41fd134560212dc124e7f52c3159af5d21"}, + {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:55b5e92a4c76a23981c998078b9bf6145e4fb0b016321a8274b1607bd3c6bd35"}, + {file = "onnxruntime-1.17.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ebbcd2bc3a066cf54e6f18c75708eb4d309ef42be54606d22e5bdd78afc5b0d7"}, + {file = "onnxruntime-1.17.1-cp310-cp310-win32.whl", hash = "sha256:5e3716b5eec9092e29a8d17aab55e737480487deabfca7eac3cd3ed952b6ada9"}, + {file = "onnxruntime-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:fbb98cced6782ae1bb799cc74ddcbbeeae8819f3ad1d942a74d88e72b6511337"}, + {file = "onnxruntime-1.17.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:36fd6f87a1ecad87e9c652e42407a50fb305374f9a31d71293eb231caae18784"}, + {file = "onnxruntime-1.17.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99a8bddeb538edabc524d468edb60ad4722cff8a49d66f4e280c39eace70500b"}, + {file = "onnxruntime-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd7fddb4311deb5a7d3390cd8e9b3912d4d963efbe4dfe075edbaf18d01c024e"}, + {file = "onnxruntime-1.17.1-cp311-cp311-win32.whl", hash = "sha256:606a7cbfb6680202b0e4f1890881041ffc3ac6e41760a25763bd9fe146f0b335"}, + {file = "onnxruntime-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:53e4e06c0a541696ebdf96085fd9390304b7b04b748a19e02cf3b35c869a1e76"}, + {file = "onnxruntime-1.17.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:40f08e378e0f85929712a2b2c9b9a9cc400a90c8a8ca741d1d92c00abec60843"}, + {file = "onnxruntime-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac79da6d3e1bb4590f1dad4bb3c2979d7228555f92bb39820889af8b8e6bd472"}, + {file = "onnxruntime-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ae9ba47dc099004e3781f2d0814ad710a13c868c739ab086fc697524061695ea"}, + {file = "onnxruntime-1.17.1-cp312-cp312-win32.whl", hash = "sha256:2dff1a24354220ac30e4a4ce2fb1df38cb1ea59f7dac2c116238d63fe7f4c5ff"}, + {file = "onnxruntime-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:6226a5201ab8cafb15e12e72ff2a4fc8f50654e8fa5737c6f0bd57c5ff66827e"}, + {file = "onnxruntime-1.17.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:cd0c07c0d1dfb8629e820b05fda5739e4835b3b82faf43753d2998edf2cf00aa"}, + {file = "onnxruntime-1.17.1-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:617ebdf49184efa1ba6e4467e602fbfa029ed52c92f13ce3c9f417d303006381"}, + {file = "onnxruntime-1.17.1-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9dae9071e3facdf2920769dceee03b71c684b6439021defa45b830d05e148924"}, + {file = "onnxruntime-1.17.1-cp38-cp38-win32.whl", hash = "sha256:835d38fa1064841679433b1aa8138b5e1218ddf0cfa7a3ae0d056d8fd9cec713"}, + {file = "onnxruntime-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:96621e0c555c2453bf607606d08af3f70fbf6f315230c28ddea91754e17ad4e6"}, + {file = "onnxruntime-1.17.1-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:7a9539935fb2d78ebf2cf2693cad02d9930b0fb23cdd5cf37a7df813e977674d"}, + {file = "onnxruntime-1.17.1-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:45c6a384e9d9a29c78afff62032a46a993c477b280247a7e335df09372aedbe9"}, + {file = "onnxruntime-1.17.1-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4e19f966450f16863a1d6182a685ca33ae04d7772a76132303852d05b95411ea"}, + {file = "onnxruntime-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e2ae712d64a42aac29ed7a40a426cb1e624a08cfe9273dcfe681614aa65b07dc"}, + {file = "onnxruntime-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:f7e9f7fb049825cdddf4a923cfc7c649d84d63c0134315f8e0aa9e0c3004672c"}, ] [package.dependencies] @@ -2333,13 +2360,13 @@ sympy = "*" [[package]] name = "openai" -version = "1.12.0" +version = "1.13.3" description = "The official Python library for the openai API" optional = false python-versions = ">=3.7.1" files = [ - {file = "openai-1.12.0-py3-none-any.whl", hash = "sha256:a54002c814e05222e413664f651b5916714e4700d041d5cf5724d3ae1a3e3481"}, - {file = "openai-1.12.0.tar.gz", hash = "sha256:99c5d257d09ea6533d689d1cc77caa0ac679fa21efef8893d8b0832a86877f1b"}, + {file = "openai-1.13.3-py3-none-any.whl", hash = "sha256:5769b62abd02f350a8dd1a3a242d8972c947860654466171d60fb0972ae0a41c"}, + {file = "openai-1.13.3.tar.gz", hash = "sha256:ff6c6b3bc7327e715e4b3592a923a5a1c7519ff5dd764a83d69f633d49e77a7b"}, ] [package.dependencies] @@ -2356,13 +2383,13 @@ datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] [[package]] name = "opentelemetry-api" -version = "1.22.0" +version = "1.23.0" description = "OpenTelemetry Python API" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_api-1.22.0-py3-none-any.whl", hash = "sha256:43621514301a7e9f5d06dd8013a1b450f30c2e9372b8e30aaeb4562abf2ce034"}, - {file = "opentelemetry_api-1.22.0.tar.gz", hash = "sha256:15ae4ca925ecf9cfdfb7a709250846fbb08072260fca08ade78056c502b86bed"}, + {file = "opentelemetry_api-1.23.0-py3-none-any.whl", hash = "sha256:cc03ea4025353048aadb9c64919099663664672ea1c6be6ddd8fee8e4cd5e774"}, + {file = "opentelemetry_api-1.23.0.tar.gz", hash = "sha256:14a766548c8dd2eb4dfc349739eb4c3893712a0daa996e5dbf945f9da665da9d"}, ] [package.dependencies] @@ -2371,52 +2398,50 @@ importlib-metadata = ">=6.0,<7.0" [[package]] name = "opentelemetry-exporter-otlp-proto-common" -version = "1.22.0" +version = "1.23.0" description = "OpenTelemetry Protobuf encoding" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_exporter_otlp_proto_common-1.22.0-py3-none-any.whl", hash = "sha256:3f2538bec5312587f8676c332b3747f54c89fe6364803a807e217af4603201fa"}, - {file = "opentelemetry_exporter_otlp_proto_common-1.22.0.tar.gz", hash = "sha256:71ae2f81bc6d6fe408d06388826edc8933759b2ca3a97d24054507dc7cfce52d"}, + {file = "opentelemetry_exporter_otlp_proto_common-1.23.0-py3-none-any.whl", hash = "sha256:2a9e7e9d5a8b026b572684b6b24dcdefcaa58613d5ce3d644130b0c373c056c1"}, + {file = "opentelemetry_exporter_otlp_proto_common-1.23.0.tar.gz", hash = "sha256:35e4ea909e7a0b24235bd0aaf17fba49676527feb1823b46565ff246d5a1ab18"}, ] [package.dependencies] -backoff = {version = ">=1.10.0,<3.0.0", markers = "python_version >= \"3.7\""} -opentelemetry-proto = "1.22.0" +opentelemetry-proto = "1.23.0" [[package]] name = "opentelemetry-exporter-otlp-proto-grpc" -version = "1.22.0" +version = "1.23.0" description = "OpenTelemetry Collector Protobuf over gRPC Exporter" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_exporter_otlp_proto_grpc-1.22.0-py3-none-any.whl", hash = "sha256:b5bcadc129272004316a455e9081216d3380c1fc2231a928ea6a70aa90e173fb"}, - {file = "opentelemetry_exporter_otlp_proto_grpc-1.22.0.tar.gz", hash = "sha256:1e0e5aa4bbabc74942f06f268deffd94851d12a8dc30b02527472ef1729fe5b1"}, + {file = "opentelemetry_exporter_otlp_proto_grpc-1.23.0-py3-none-any.whl", hash = "sha256:40f9e3e7761eb34f2a1001f4543028783ac26e2db27e420d5374f2cca0182dad"}, + {file = "opentelemetry_exporter_otlp_proto_grpc-1.23.0.tar.gz", hash = "sha256:aa1a012eea5342bfef51fcf3f7f22601dcb0f0984a07ffe6025b2fbb6d91a2a9"}, ] [package.dependencies] -backoff = {version = ">=1.10.0,<3.0.0", markers = "python_version >= \"3.7\""} deprecated = ">=1.2.6" googleapis-common-protos = ">=1.52,<2.0" grpcio = ">=1.0.0,<2.0.0" opentelemetry-api = ">=1.15,<2.0" -opentelemetry-exporter-otlp-proto-common = "1.22.0" -opentelemetry-proto = "1.22.0" -opentelemetry-sdk = ">=1.22.0,<1.23.0" +opentelemetry-exporter-otlp-proto-common = "1.23.0" +opentelemetry-proto = "1.23.0" +opentelemetry-sdk = ">=1.23.0,<1.24.0" [package.extras] test = ["pytest-grpc"] [[package]] name = "opentelemetry-instrumentation" -version = "0.43b0" +version = "0.44b0" description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_instrumentation-0.43b0-py3-none-any.whl", hash = "sha256:0ff1334d7e359e27640e9d420024efeb73eacae464309c2e14ede7ba6c93967e"}, - {file = "opentelemetry_instrumentation-0.43b0.tar.gz", hash = "sha256:c3755da6c4be8033be0216d0501e11f4832690f4e2eca5a3576fbf113498f0f6"}, + {file = "opentelemetry_instrumentation-0.44b0-py3-none-any.whl", hash = "sha256:79560f386425176bcc60c59190064597096114c4a8e5154f1cb281bb4e47d2fc"}, + {file = "opentelemetry_instrumentation-0.44b0.tar.gz", hash = "sha256:8213d02d8c0987b9b26386ae3e091e0477d6331673123df736479322e1a50b48"}, ] [package.dependencies] @@ -2426,57 +2451,57 @@ wrapt = ">=1.0.0,<2.0.0" [[package]] name = "opentelemetry-instrumentation-asgi" -version = "0.43b0" +version = "0.44b0" description = "ASGI instrumentation for OpenTelemetry" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_instrumentation_asgi-0.43b0-py3-none-any.whl", hash = "sha256:1f593829fa039e9367820736fb063e92acd15c25b53d7bcb5d319971b8e93fd7"}, - {file = "opentelemetry_instrumentation_asgi-0.43b0.tar.gz", hash = "sha256:3f6f19333dca31ef696672e4e36cb1c2613c71dc7e847c11ff36a37e1130dadc"}, + {file = "opentelemetry_instrumentation_asgi-0.44b0-py3-none-any.whl", hash = "sha256:0d95c84a8991008c8a8ac35e15d43cc7768a5bb46f95f129e802ad2990d7c366"}, + {file = "opentelemetry_instrumentation_asgi-0.44b0.tar.gz", hash = "sha256:72d4d28ec7ccd551eac11edc5ae8cac3586c0a228467d6a95fad7b6d4edd597a"}, ] [package.dependencies] asgiref = ">=3.0,<4.0" opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.43b0" -opentelemetry-semantic-conventions = "0.43b0" -opentelemetry-util-http = "0.43b0" +opentelemetry-instrumentation = "0.44b0" +opentelemetry-semantic-conventions = "0.44b0" +opentelemetry-util-http = "0.44b0" [package.extras] instruments = ["asgiref (>=3.0,<4.0)"] -test = ["opentelemetry-instrumentation-asgi[instruments]", "opentelemetry-test-utils (==0.43b0)"] +test = ["opentelemetry-instrumentation-asgi[instruments]", "opentelemetry-test-utils (==0.44b0)"] [[package]] name = "opentelemetry-instrumentation-fastapi" -version = "0.43b0" +version = "0.44b0" description = "OpenTelemetry FastAPI Instrumentation" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_instrumentation_fastapi-0.43b0-py3-none-any.whl", hash = "sha256:b79c044df68a52e07b35fa12a424e7cc0dd27ff0a171c5fdcc41dea9de8fc938"}, - {file = "opentelemetry_instrumentation_fastapi-0.43b0.tar.gz", hash = "sha256:2afaaf470622e1a2732182c68f6d2431ffe5e026a7edacd0f83605632b66347f"}, + {file = "opentelemetry_instrumentation_fastapi-0.44b0-py3-none-any.whl", hash = "sha256:4441482944bea6676816668d56deb94af990e8c6e9582c581047e5d84c91d3c9"}, + {file = "opentelemetry_instrumentation_fastapi-0.44b0.tar.gz", hash = "sha256:67ed10b93ad9d35238ae0be73cf8acbbb65a4a61fb7444d0aee5b0c492e294db"}, ] [package.dependencies] opentelemetry-api = ">=1.12,<2.0" -opentelemetry-instrumentation = "0.43b0" -opentelemetry-instrumentation-asgi = "0.43b0" -opentelemetry-semantic-conventions = "0.43b0" -opentelemetry-util-http = "0.43b0" +opentelemetry-instrumentation = "0.44b0" +opentelemetry-instrumentation-asgi = "0.44b0" +opentelemetry-semantic-conventions = "0.44b0" +opentelemetry-util-http = "0.44b0" [package.extras] instruments = ["fastapi (>=0.58,<1.0)"] -test = ["httpx (>=0.22,<1.0)", "opentelemetry-instrumentation-fastapi[instruments]", "opentelemetry-test-utils (==0.43b0)", "requests (>=2.23,<3.0)"] +test = ["httpx (>=0.22,<1.0)", "opentelemetry-instrumentation-fastapi[instruments]", "opentelemetry-test-utils (==0.44b0)", "requests (>=2.23,<3.0)"] [[package]] name = "opentelemetry-proto" -version = "1.22.0" +version = "1.23.0" description = "OpenTelemetry Python Proto" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_proto-1.22.0-py3-none-any.whl", hash = "sha256:ce7188d22c75b6d0fe53e7fb58501613d0feade5139538e79dedd9420610fa0c"}, - {file = "opentelemetry_proto-1.22.0.tar.gz", hash = "sha256:9ec29169286029f17ca34ec1f3455802ffb90131642d2f545ece9a63e8f69003"}, + {file = "opentelemetry_proto-1.23.0-py3-none-any.whl", hash = "sha256:4c017deca052cb287a6003b7c989ed8b47af65baeb5d57ebf93dde0793f78509"}, + {file = "opentelemetry_proto-1.23.0.tar.gz", hash = "sha256:e6aaf8b7ace8d021942d546161401b83eed90f9f2cc6f13275008cea730e4651"}, ] [package.dependencies] @@ -2484,99 +2509,99 @@ protobuf = ">=3.19,<5.0" [[package]] name = "opentelemetry-sdk" -version = "1.22.0" +version = "1.23.0" description = "OpenTelemetry Python SDK" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_sdk-1.22.0-py3-none-any.whl", hash = "sha256:a730555713d7c8931657612a88a141e3a4fe6eb5523d9e2d5a8b1e673d76efa6"}, - {file = "opentelemetry_sdk-1.22.0.tar.gz", hash = "sha256:45267ac1f38a431fc2eb5d6e0c0d83afc0b78de57ac345488aa58c28c17991d0"}, + {file = "opentelemetry_sdk-1.23.0-py3-none-any.whl", hash = "sha256:a93c96990ac0f07c6d679e2f1015864ff7a4f5587122dd5af968034436efb1fd"}, + {file = "opentelemetry_sdk-1.23.0.tar.gz", hash = "sha256:9ddf60195837b59e72fd2033d6a47e2b59a0f74f0ec37d89387d89e3da8cab7f"}, ] [package.dependencies] -opentelemetry-api = "1.22.0" -opentelemetry-semantic-conventions = "0.43b0" +opentelemetry-api = "1.23.0" +opentelemetry-semantic-conventions = "0.44b0" typing-extensions = ">=3.7.4" [[package]] name = "opentelemetry-semantic-conventions" -version = "0.43b0" +version = "0.44b0" description = "OpenTelemetry Semantic Conventions" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_semantic_conventions-0.43b0-py3-none-any.whl", hash = "sha256:291284d7c1bf15fdaddf309b3bd6d3b7ce12a253cec6d27144439819a15d8445"}, - {file = "opentelemetry_semantic_conventions-0.43b0.tar.gz", hash = "sha256:b9576fb890df479626fa624e88dde42d3d60b8b6c8ae1152ad157a8b97358635"}, + {file = "opentelemetry_semantic_conventions-0.44b0-py3-none-any.whl", hash = "sha256:7c434546c9cbd797ab980cc88bf9ff3f4a5a28f941117cad21694e43d5d92019"}, + {file = "opentelemetry_semantic_conventions-0.44b0.tar.gz", hash = "sha256:2e997cb28cd4ca81a25a9a43365f593d0c2b76be0685015349a89abdf1aa4ffa"}, ] [[package]] name = "opentelemetry-util-http" -version = "0.43b0" +version = "0.44b0" description = "Web util for OpenTelemetry" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "opentelemetry_util_http-0.43b0-py3-none-any.whl", hash = "sha256:f25a820784b030f6cb86b3d76e5676c769b75ed3f55a210bcdae0a5e175ebadb"}, - {file = "opentelemetry_util_http-0.43b0.tar.gz", hash = "sha256:3ff6ab361dbe99fc81200d625603c0fb890c055c6e416a3e6d661ddf47a6c7f7"}, + {file = "opentelemetry_util_http-0.44b0-py3-none-any.whl", hash = "sha256:ff018ab6a2fa349537ff21adcef99a294248b599be53843c44f367aef6bccea5"}, + {file = "opentelemetry_util_http-0.44b0.tar.gz", hash = "sha256:75896dffcbbeb5df5429ad4526e22307fc041a27114e0c5bfd90bb219381e68f"}, ] [[package]] name = "orjson" -version = "3.9.14" +version = "3.9.15" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.9.14-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:793f6c9448ab6eb7d4974b4dde3f230345c08ca6c7995330fbceeb43a5c8aa5e"}, - {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6bc7928d161840096adc956703494b5c0193ede887346f028216cac0af87500"}, - {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:58b36f54da759602d8e2f7dad958752d453dfe2c7122767bc7f765e17dc59959"}, - {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:abcda41ecdc950399c05eff761c3de91485d9a70d8227cb599ad3a66afe93bcc"}, - {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df76ecd17b1b3627bddfd689faaf206380a1a38cc9f6c4075bd884eaedcf46c2"}, - {file = "orjson-3.9.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d450a8e0656efb5d0fcb062157b918ab02dcca73278975b4ee9ea49e2fcf5bd5"}, - {file = "orjson-3.9.14-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:95c03137b0cf66517c8baa65770507a756d3a89489d8ecf864ea92348e1beabe"}, - {file = "orjson-3.9.14-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:20837e10835c98973673406d6798e10f821e7744520633811a5a3d809762d8cc"}, - {file = "orjson-3.9.14-cp310-none-win32.whl", hash = "sha256:1f7b6f3ef10ae8e3558abb729873d033dbb5843507c66b1c0767e32502ba96bb"}, - {file = "orjson-3.9.14-cp310-none-win_amd64.whl", hash = "sha256:ea890e6dc1711aeec0a33b8520e395c2f3d59ead5b4351a788e06bf95fc7ba81"}, - {file = "orjson-3.9.14-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c19009ff37f033c70acd04b636380379499dac2cba27ae7dfc24f304deabbc81"}, - {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19cdea0664aec0b7f385be84986d4defd3334e9c3c799407686ee1c26f7b8251"}, - {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:135d518f73787ce323b1a5e21fb854fe22258d7a8ae562b81a49d6c7f826f2a3"}, - {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d2cf1d0557c61c75e18cf7d69fb689b77896e95553e212c0cc64cf2087944b84"}, - {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7c11667421df2d8b18b021223505dcc3ee51be518d54e4dc49161ac88ac2b87"}, - {file = "orjson-3.9.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2eefc41ba42e75ed88bc396d8fe997beb20477f3e7efa000cd7a47eda452fbb2"}, - {file = "orjson-3.9.14-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:917311d6a64d1c327c0dfda1e41f3966a7fb72b11ca7aa2e7a68fcccc7db35d9"}, - {file = "orjson-3.9.14-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4dc1c132259b38d12c6587d190cd09cd76e3b5273ce71fe1372437b4cbc65f6f"}, - {file = "orjson-3.9.14-cp311-none-win32.whl", hash = "sha256:6f39a10408478f4c05736a74da63727a1ae0e83e3533d07b19443400fe8591ca"}, - {file = "orjson-3.9.14-cp311-none-win_amd64.whl", hash = "sha256:26280a7fcb62d8257f634c16acebc3bec626454f9ab13558bbf7883b9140760e"}, - {file = "orjson-3.9.14-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:08e722a8d06b13b67a51f247a24938d1a94b4b3862e40e0eef3b2e98c99cd04c"}, - {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a2591faa0c031cf3f57e5bce1461cfbd6160f3f66b5a72609a130924917cb07d"}, - {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e2450d87dd7b4f277f4c5598faa8b49a0c197b91186c47a2c0b88e15531e4e3e"}, - {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:90903d2908158a2c9077a06f11e27545de610af690fb178fd3ba6b32492d4d1c"}, - {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce6f095eef0026eae76fc212f20f786011ecf482fc7df2f4c272a8ae6dd7b1ef"}, - {file = "orjson-3.9.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:751250a31fef2bac05a2da2449aae7142075ea26139271f169af60456d8ad27a"}, - {file = "orjson-3.9.14-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9a1af21160a38ee8be3f4fcf24ee4b99e6184cadc7f915d599f073f478a94d2c"}, - {file = "orjson-3.9.14-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:449bf090b2aa4e019371d7511a6ea8a5a248139205c27d1834bb4b1e3c44d936"}, - {file = "orjson-3.9.14-cp312-none-win_amd64.whl", hash = "sha256:a603161318ff699784943e71f53899983b7dee571b4dd07c336437c9c5a272b0"}, - {file = "orjson-3.9.14-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:814f288c011efdf8f115c5ebcc1ab94b11da64b207722917e0ceb42f52ef30a3"}, - {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a88cafb100af68af3b9b29b5ccd09fdf7a48c63327916c8c923a94c336d38dd3"}, - {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ba3518b999f88882ade6686f1b71e207b52e23546e180499be5bbb63a2f9c6e6"}, - {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:978f416bbff9da8d2091e3cf011c92da68b13f2c453dcc2e8109099b2a19d234"}, - {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75fc593cf836f631153d0e21beaeb8d26e144445c73645889335c2247fcd71a0"}, - {file = "orjson-3.9.14-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d1528db3c7554f9d6eeb09df23cb80dd5177ec56eeb55cc5318826928de506"}, - {file = "orjson-3.9.14-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:7183cc68ee2113b19b0b8714221e5e3b07b3ba10ca2bb108d78fd49cefaae101"}, - {file = "orjson-3.9.14-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:df3266d54246cb56b8bb17fa908660d2a0f2e3f63fbc32451ffc1b1505051d07"}, - {file = "orjson-3.9.14-cp38-none-win32.whl", hash = "sha256:7913079b029e1b3501854c9a78ad938ed40d61fe09bebab3c93e60ff1301b189"}, - {file = "orjson-3.9.14-cp38-none-win_amd64.whl", hash = "sha256:29512eb925b620e5da2fd7585814485c67cc6ba4fe739a0a700c50467a8a8065"}, - {file = "orjson-3.9.14-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5bf597530544db27a8d76aced49cfc817ee9503e0a4ebf0109cd70331e7bbe0c"}, - {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac650d49366fa41fe702e054cb560171a8634e2865537e91f09a8d05ea5b1d37"}, - {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:236230433a9a4968ab895140514c308fdf9f607cb8bee178a04372b771123860"}, - {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3014ccbda9be0b1b5f8ea895121df7e6524496b3908f4397ff02e923bcd8f6dd"}, - {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ac0c7eae7ad3a223bde690565442f8a3d620056bd01196f191af8be58a5248e1"}, - {file = "orjson-3.9.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fca33fdd0b38839b01912c57546d4f412ba7bfa0faf9bf7453432219aec2df07"}, - {file = "orjson-3.9.14-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f75823cc1674a840a151e999a7dfa0d86c911150dd6f951d0736ee9d383bf415"}, - {file = "orjson-3.9.14-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6f52ac2eb49e99e7373f62e2a68428c6946cda52ce89aa8fe9f890c7278e2d3a"}, - {file = "orjson-3.9.14-cp39-none-win32.whl", hash = "sha256:0572f174f50b673b7df78680fb52cd0087a8585a6d06d295a5f790568e1064c6"}, - {file = "orjson-3.9.14-cp39-none-win_amd64.whl", hash = "sha256:ab90c02cb264250b8a58cedcc72ed78a4a257d956c8d3c8bebe9751b818dfad8"}, - {file = "orjson-3.9.14.tar.gz", hash = "sha256:06fb40f8e49088ecaa02f1162581d39e2cf3fd9dbbfe411eb2284147c99bad79"}, + {file = "orjson-3.9.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:d61f7ce4727a9fa7680cd6f3986b0e2c732639f46a5e0156e550e35258aa313a"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4feeb41882e8aa17634b589533baafdceb387e01e117b1ec65534ec724023d04"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fbbeb3c9b2edb5fd044b2a070f127a0ac456ffd079cb82746fc84af01ef021a4"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b66bcc5670e8a6b78f0313bcb74774c8291f6f8aeef10fe70e910b8040f3ab75"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2973474811db7b35c30248d1129c64fd2bdf40d57d84beed2a9a379a6f57d0ab"}, + {file = "orjson-3.9.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fe41b6f72f52d3da4db524c8653e46243c8c92df826ab5ffaece2dba9cccd58"}, + {file = "orjson-3.9.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4228aace81781cc9d05a3ec3a6d2673a1ad0d8725b4e915f1089803e9efd2b99"}, + {file = "orjson-3.9.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f7b65bfaf69493c73423ce9db66cfe9138b2f9ef62897486417a8fcb0a92bfe"}, + {file = "orjson-3.9.15-cp310-none-win32.whl", hash = "sha256:2d99e3c4c13a7b0fb3792cc04c2829c9db07838fb6973e578b85c1745e7d0ce7"}, + {file = "orjson-3.9.15-cp310-none-win_amd64.whl", hash = "sha256:b725da33e6e58e4a5d27958568484aa766e825e93aa20c26c91168be58e08cbb"}, + {file = "orjson-3.9.15-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c8e8fe01e435005d4421f183038fc70ca85d2c1e490f51fb972db92af6e047c2"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87f1097acb569dde17f246faa268759a71a2cb8c96dd392cd25c668b104cad2f"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff0f9913d82e1d1fadbd976424c316fbc4d9c525c81d047bbdd16bd27dd98cfc"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8055ec598605b0077e29652ccfe9372247474375e0e3f5775c91d9434e12d6b1"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d6768a327ea1ba44c9114dba5fdda4a214bdb70129065cd0807eb5f010bfcbb5"}, + {file = "orjson-3.9.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12365576039b1a5a47df01aadb353b68223da413e2e7f98c02403061aad34bde"}, + {file = "orjson-3.9.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:71c6b009d431b3839d7c14c3af86788b3cfac41e969e3e1c22f8a6ea13139404"}, + {file = "orjson-3.9.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e18668f1bd39e69b7fed19fa7cd1cd110a121ec25439328b5c89934e6d30d357"}, + {file = "orjson-3.9.15-cp311-none-win32.whl", hash = "sha256:62482873e0289cf7313461009bf62ac8b2e54bc6f00c6fabcde785709231a5d7"}, + {file = "orjson-3.9.15-cp311-none-win_amd64.whl", hash = "sha256:b3d336ed75d17c7b1af233a6561cf421dee41d9204aa3cfcc6c9c65cd5bb69a8"}, + {file = "orjson-3.9.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:82425dd5c7bd3adfe4e94c78e27e2fa02971750c2b7ffba648b0f5d5cc016a73"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c51378d4a8255b2e7c1e5cc430644f0939539deddfa77f6fac7b56a9784160a"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6ae4e06be04dc00618247c4ae3f7c3e561d5bc19ab6941427f6d3722a0875ef7"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcef128f970bb63ecf9a65f7beafd9b55e3aaf0efc271a4154050fc15cdb386e"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b72758f3ffc36ca566ba98a8e7f4f373b6c17c646ff8ad9b21ad10c29186f00d"}, + {file = "orjson-3.9.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10c57bc7b946cf2efa67ac55766e41764b66d40cbd9489041e637c1304400494"}, + {file = "orjson-3.9.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:946c3a1ef25338e78107fba746f299f926db408d34553b4754e90a7de1d44068"}, + {file = "orjson-3.9.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2f256d03957075fcb5923410058982aea85455d035607486ccb847f095442bda"}, + {file = "orjson-3.9.15-cp312-none-win_amd64.whl", hash = "sha256:5bb399e1b49db120653a31463b4a7b27cf2fbfe60469546baf681d1b39f4edf2"}, + {file = "orjson-3.9.15-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b17f0f14a9c0ba55ff6279a922d1932e24b13fc218a3e968ecdbf791b3682b25"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f6cbd8e6e446fb7e4ed5bac4661a29e43f38aeecbf60c4b900b825a353276a1"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76bc6356d07c1d9f4b782813094d0caf1703b729d876ab6a676f3aaa9a47e37c"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fdfa97090e2d6f73dced247a2f2d8004ac6449df6568f30e7fa1a045767c69a6"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7413070a3e927e4207d00bd65f42d1b780fb0d32d7b1d951f6dc6ade318e1b5a"}, + {file = "orjson-3.9.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9cf1596680ac1f01839dba32d496136bdd5d8ffb858c280fa82bbfeb173bdd40"}, + {file = "orjson-3.9.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:809d653c155e2cc4fd39ad69c08fdff7f4016c355ae4b88905219d3579e31eb7"}, + {file = "orjson-3.9.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:920fa5a0c5175ab14b9c78f6f820b75804fb4984423ee4c4f1e6d748f8b22bc1"}, + {file = "orjson-3.9.15-cp38-none-win32.whl", hash = "sha256:2b5c0f532905e60cf22a511120e3719b85d9c25d0e1c2a8abb20c4dede3b05a5"}, + {file = "orjson-3.9.15-cp38-none-win_amd64.whl", hash = "sha256:67384f588f7f8daf040114337d34a5188346e3fae6c38b6a19a2fe8c663a2f9b"}, + {file = "orjson-3.9.15-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6fc2fe4647927070df3d93f561d7e588a38865ea0040027662e3e541d592811e"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34cbcd216e7af5270f2ffa63a963346845eb71e174ea530867b7443892d77180"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f541587f5c558abd93cb0de491ce99a9ef8d1ae29dd6ab4dbb5a13281ae04cbd"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92255879280ef9c3c0bcb327c5a1b8ed694c290d61a6a532458264f887f052cb"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:05a1f57fb601c426635fcae9ddbe90dfc1ed42245eb4c75e4960440cac667262"}, + {file = "orjson-3.9.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ede0bde16cc6e9b96633df1631fbcd66491d1063667f260a4f2386a098393790"}, + {file = "orjson-3.9.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e88b97ef13910e5f87bcbc4dd7979a7de9ba8702b54d3204ac587e83639c0c2b"}, + {file = "orjson-3.9.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:57d5d8cf9c27f7ef6bc56a5925c7fbc76b61288ab674eb352c26ac780caa5b10"}, + {file = "orjson-3.9.15-cp39-none-win32.whl", hash = "sha256:001f4eb0ecd8e9ebd295722d0cbedf0748680fb9998d3993abaed2f40587257a"}, + {file = "orjson-3.9.15-cp39-none-win_amd64.whl", hash = "sha256:ea0b183a5fe6b2b45f3b854b0d19c4e932d6f5934ae1f723b07cf9560edd4ec7"}, + {file = "orjson-3.9.15.tar.gz", hash = "sha256:95cae920959d772f30ab36d3b25f83bb0f3be671e986c72ce22f8fa700dae061"}, ] [[package]] @@ -2790,13 +2815,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "posthog" -version = "3.4.1" +version = "3.5.0" description = "Integrate PostHog into any python application." optional = false python-versions = "*" files = [ - {file = "posthog-3.4.1-py2.py3-none-any.whl", hash = "sha256:8f9e01fc223d113ad1b7fc66516bd2b7b745cb460802b757795d4cec16d91696"}, - {file = "posthog-3.4.1.tar.gz", hash = "sha256:cbdae309e65172dcb7b921c611914139eb46a8a8f38266c2b51d78b60582af9d"}, + {file = "posthog-3.5.0-py2.py3-none-any.whl", hash = "sha256:3c672be7ba6f95d555ea207d4486c171d06657eb34b3ce25eb043bfe7b6b5b76"}, + {file = "posthog-3.5.0.tar.gz", hash = "sha256:8f7e3b2c6e8714d0c0c542a2109b83a7549f63b7113a133ab2763a89245ef2ef"}, ] [package.dependencies] @@ -2813,20 +2838,20 @@ test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint" [[package]] name = "prettytable" -version = "3.9.0" +version = "3.10.0" description = "A simple Python library for easily displaying tabular data in a visually appealing ASCII table format" optional = false python-versions = ">=3.8" files = [ - {file = "prettytable-3.9.0-py3-none-any.whl", hash = "sha256:a71292ab7769a5de274b146b276ce938786f56c31cf7cea88b6f3775d82fe8c8"}, - {file = "prettytable-3.9.0.tar.gz", hash = "sha256:f4ed94803c23073a90620b201965e5dc0bccf1760b7a7eaf3158cab8aaffdf34"}, + {file = "prettytable-3.10.0-py3-none-any.whl", hash = "sha256:6536efaf0757fdaa7d22e78b3aac3b69ea1b7200538c2c6995d649365bddab92"}, + {file = "prettytable-3.10.0.tar.gz", hash = "sha256:9665594d137fb08a1117518c25551e0ede1687197cf353a4fdc78d27e1073568"}, ] [package.dependencies] wcwidth = "*" [package.extras] -tests = ["pytest", "pytest-cov", "pytest-lazy-fixture"] +tests = ["pytest", "pytest-cov", "pytest-lazy-fixtures"] [[package]] name = "prompt-toolkit" @@ -3035,18 +3060,18 @@ files = [ [[package]] name = "pydantic" -version = "2.6.1" +version = "2.6.3" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.6.1-py3-none-any.whl", hash = "sha256:0b6a909df3192245cb736509a92ff69e4fef76116feffec68e93a567347bae6f"}, - {file = "pydantic-2.6.1.tar.gz", hash = "sha256:4fd5c182a2488dc63e6d32737ff19937888001e2a6d86e94b3f233104a5d1fa9"}, + {file = "pydantic-2.6.3-py3-none-any.whl", hash = "sha256:72c6034df47f46ccdf81869fddb81aade68056003900a8724a4f160700016a2a"}, + {file = "pydantic-2.6.3.tar.gz", hash = "sha256:e07805c4c7f5c6826e33a1d4c9d47950d7eaf34868e2690f8594d2e30241f11f"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.16.2" +pydantic-core = "2.16.3" typing-extensions = ">=4.6.1" [package.extras] @@ -3054,90 +3079,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.16.2" +version = "2.16.3" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.16.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3fab4e75b8c525a4776e7630b9ee48aea50107fea6ca9f593c98da3f4d11bf7c"}, - {file = "pydantic_core-2.16.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8bde5b48c65b8e807409e6f20baee5d2cd880e0fad00b1a811ebc43e39a00ab2"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2924b89b16420712e9bb8192396026a8fbd6d8726224f918353ac19c4c043d2a"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:16aa02e7a0f539098e215fc193c8926c897175d64c7926d00a36188917717a05"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:936a787f83db1f2115ee829dd615c4f684ee48ac4de5779ab4300994d8af325b"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:459d6be6134ce3b38e0ef76f8a672924460c455d45f1ad8fdade36796df1ddc8"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9ee4febb249c591d07b2d4dd36ebcad0ccd128962aaa1801508320896575ef"}, - {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40a0bd0bed96dae5712dab2aba7d334a6c67cbcac2ddfca7dbcc4a8176445990"}, - {file = "pydantic_core-2.16.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:870dbfa94de9b8866b37b867a2cb37a60c401d9deb4a9ea392abf11a1f98037b"}, - {file = "pydantic_core-2.16.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:308974fdf98046db28440eb3377abba274808bf66262e042c412eb2adf852731"}, - {file = "pydantic_core-2.16.2-cp310-none-win32.whl", hash = "sha256:a477932664d9611d7a0816cc3c0eb1f8856f8a42435488280dfbf4395e141485"}, - {file = "pydantic_core-2.16.2-cp310-none-win_amd64.whl", hash = "sha256:8f9142a6ed83d90c94a3efd7af8873bf7cefed2d3d44387bf848888482e2d25f"}, - {file = "pydantic_core-2.16.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:406fac1d09edc613020ce9cf3f2ccf1a1b2f57ab00552b4c18e3d5276c67eb11"}, - {file = "pydantic_core-2.16.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce232a6170dd6532096cadbf6185271e4e8c70fc9217ebe105923ac105da9978"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a90fec23b4b05a09ad988e7a4f4e081711a90eb2a55b9c984d8b74597599180f"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8aafeedb6597a163a9c9727d8a8bd363a93277701b7bfd2749fbefee2396469e"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9957433c3a1b67bdd4c63717eaf174ebb749510d5ea612cd4e83f2d9142f3fc8"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0d7a9165167269758145756db43a133608a531b1e5bb6a626b9ee24bc38a8f7"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dffaf740fe2e147fedcb6b561353a16243e654f7fe8e701b1b9db148242e1272"}, - {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8ed79883b4328b7f0bd142733d99c8e6b22703e908ec63d930b06be3a0e7113"}, - {file = "pydantic_core-2.16.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cf903310a34e14651c9de056fcc12ce090560864d5a2bb0174b971685684e1d8"}, - {file = "pydantic_core-2.16.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:46b0d5520dbcafea9a8645a8164658777686c5c524d381d983317d29687cce97"}, - {file = "pydantic_core-2.16.2-cp311-none-win32.whl", hash = "sha256:70651ff6e663428cea902dac297066d5c6e5423fda345a4ca62430575364d62b"}, - {file = "pydantic_core-2.16.2-cp311-none-win_amd64.whl", hash = "sha256:98dc6f4f2095fc7ad277782a7c2c88296badcad92316b5a6e530930b1d475ebc"}, - {file = "pydantic_core-2.16.2-cp311-none-win_arm64.whl", hash = "sha256:ef6113cd31411eaf9b39fc5a8848e71c72656fd418882488598758b2c8c6dfa0"}, - {file = "pydantic_core-2.16.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:88646cae28eb1dd5cd1e09605680c2b043b64d7481cdad7f5003ebef401a3039"}, - {file = "pydantic_core-2.16.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b883af50eaa6bb3299780651e5be921e88050ccf00e3e583b1e92020333304b"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bf26c2e2ea59d32807081ad51968133af3025c4ba5753e6a794683d2c91bf6e"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99af961d72ac731aae2a1b55ccbdae0733d816f8bfb97b41909e143de735f522"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02906e7306cb8c5901a1feb61f9ab5e5c690dbbeaa04d84c1b9ae2a01ebe9379"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5362d099c244a2d2f9659fb3c9db7c735f0004765bbe06b99be69fbd87c3f15"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ac426704840877a285d03a445e162eb258924f014e2f074e209d9b4ff7bf380"}, - {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b94cbda27267423411c928208e89adddf2ea5dd5f74b9528513f0358bba019cb"}, - {file = "pydantic_core-2.16.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6db58c22ac6c81aeac33912fb1af0e930bc9774166cdd56eade913d5f2fff35e"}, - {file = "pydantic_core-2.16.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:396fdf88b1b503c9c59c84a08b6833ec0c3b5ad1a83230252a9e17b7dfb4cffc"}, - {file = "pydantic_core-2.16.2-cp312-none-win32.whl", hash = "sha256:7c31669e0c8cc68400ef0c730c3a1e11317ba76b892deeefaf52dcb41d56ed5d"}, - {file = "pydantic_core-2.16.2-cp312-none-win_amd64.whl", hash = "sha256:a3b7352b48fbc8b446b75f3069124e87f599d25afb8baa96a550256c031bb890"}, - {file = "pydantic_core-2.16.2-cp312-none-win_arm64.whl", hash = "sha256:a9e523474998fb33f7c1a4d55f5504c908d57add624599e095c20fa575b8d943"}, - {file = "pydantic_core-2.16.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:ae34418b6b389d601b31153b84dce480351a352e0bb763684a1b993d6be30f17"}, - {file = "pydantic_core-2.16.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:732bd062c9e5d9582a30e8751461c1917dd1ccbdd6cafb032f02c86b20d2e7ec"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b52776a2e3230f4854907a1e0946eec04d41b1fc64069ee774876bbe0eab55"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ef551c053692b1e39e3f7950ce2296536728871110e7d75c4e7753fb30ca87f4"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ebb892ed8599b23fa8f1799e13a12c87a97a6c9d0f497525ce9858564c4575a4"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa6c8c582036275997a733427b88031a32ffa5dfc3124dc25a730658c47a572f"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4ba0884a91f1aecce75202473ab138724aa4fb26d7707f2e1fa6c3e68c84fbf"}, - {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7924e54f7ce5d253d6160090ddc6df25ed2feea25bfb3339b424a9dd591688bc"}, - {file = "pydantic_core-2.16.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69a7b96b59322a81c2203be537957313b07dd333105b73db0b69212c7d867b4b"}, - {file = "pydantic_core-2.16.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7e6231aa5bdacda78e96ad7b07d0c312f34ba35d717115f4b4bff6cb87224f0f"}, - {file = "pydantic_core-2.16.2-cp38-none-win32.whl", hash = "sha256:41dac3b9fce187a25c6253ec79a3f9e2a7e761eb08690e90415069ea4a68ff7a"}, - {file = "pydantic_core-2.16.2-cp38-none-win_amd64.whl", hash = "sha256:f685dbc1fdadb1dcd5b5e51e0a378d4685a891b2ddaf8e2bba89bd3a7144e44a"}, - {file = "pydantic_core-2.16.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:55749f745ebf154c0d63d46c8c58594d8894b161928aa41adbb0709c1fe78b77"}, - {file = "pydantic_core-2.16.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b30b0dd58a4509c3bd7eefddf6338565c4905406aee0c6e4a5293841411a1286"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18de31781cdc7e7b28678df7c2d7882f9692ad060bc6ee3c94eb15a5d733f8f7"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5864b0242f74b9dd0b78fd39db1768bc3f00d1ffc14e596fd3e3f2ce43436a33"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8f9186ca45aee030dc8234118b9c0784ad91a0bb27fc4e7d9d6608a5e3d386c"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc6f6c9be0ab6da37bc77c2dda5f14b1d532d5dbef00311ee6e13357a418e646"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa057095f621dad24a1e906747179a69780ef45cc8f69e97463692adbcdae878"}, - {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ad84731a26bcfb299f9eab56c7932d46f9cad51c52768cace09e92a19e4cf55"}, - {file = "pydantic_core-2.16.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3b052c753c4babf2d1edc034c97851f867c87d6f3ea63a12e2700f159f5c41c3"}, - {file = "pydantic_core-2.16.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e0f686549e32ccdb02ae6f25eee40cc33900910085de6aa3790effd391ae10c2"}, - {file = "pydantic_core-2.16.2-cp39-none-win32.whl", hash = "sha256:7afb844041e707ac9ad9acad2188a90bffce2c770e6dc2318be0c9916aef1469"}, - {file = "pydantic_core-2.16.2-cp39-none-win_amd64.whl", hash = "sha256:9da90d393a8227d717c19f5397688a38635afec89f2e2d7af0df037f3249c39a"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f60f920691a620b03082692c378661947d09415743e437a7478c309eb0e4f82"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:47924039e785a04d4a4fa49455e51b4eb3422d6eaacfde9fc9abf8fdef164e8a"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6294e76b0380bb7a61eb8a39273c40b20beb35e8c87ee101062834ced19c545"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe56851c3f1d6f5384b3051c536cc81b3a93a73faf931f404fef95217cf1e10d"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9d776d30cde7e541b8180103c3f294ef7c1862fd45d81738d156d00551005784"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:72f7919af5de5ecfaf1eba47bf9a5d8aa089a3340277276e5636d16ee97614d7"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:4bfcbde6e06c56b30668a0c872d75a7ef3025dc3c1823a13cf29a0e9b33f67e8"}, - {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ff7c97eb7a29aba230389a2661edf2e9e06ce616c7e35aa764879b6894a44b25"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9b5f13857da99325dcabe1cc4e9e6a3d7b2e2c726248ba5dd4be3e8e4a0b6d0e"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a7e41e3ada4cca5f22b478c08e973c930e5e6c7ba3588fb8e35f2398cdcc1545"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60eb8ceaa40a41540b9acae6ae7c1f0a67d233c40dc4359c256ad2ad85bdf5e5"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7beec26729d496a12fd23cf8da9944ee338c8b8a17035a560b585c36fe81af20"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:22c5f022799f3cd6741e24f0443ead92ef42be93ffda0d29b2597208c94c3753"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:eca58e319f4fd6df004762419612122b2c7e7d95ffafc37e890252f869f3fb2a"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed957db4c33bc99895f3a1672eca7e80e8cda8bd1e29a80536b4ec2153fa9804"}, - {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:459c0d338cc55d099798618f714b21b7ece17eb1a87879f2da20a3ff4c7628e2"}, - {file = "pydantic_core-2.16.2.tar.gz", hash = "sha256:0ba503850d8b8dcc18391f10de896ae51d37fe5fe43dbfb6a35c5c5cad271a06"}, + {file = "pydantic_core-2.16.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4"}, + {file = "pydantic_core-2.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:162e498303d2b1c036b957a1278fa0899d02b2842f1ff901b6395104c5554a45"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f583bd01bbfbff4eaee0868e6fc607efdfcc2b03c1c766b06a707abbc856187"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b926dd38db1519ed3043a4de50214e0d600d404099c3392f098a7f9d75029ff8"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:716b542728d4c742353448765aa7cdaa519a7b82f9564130e2b3f6766018c9ec"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4ad7f7ee1a13d9cb49d8198cd7d7e3aa93e425f371a68235f784e99741561f"}, + {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd87f48924f360e5d1c5f770d6155ce0e7d83f7b4e10c2f9ec001c73cf475c99"}, + {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0df446663464884297c793874573549229f9eca73b59360878f382a0fc085979"}, + {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4df8a199d9f6afc5ae9a65f8f95ee52cae389a8c6b20163762bde0426275b7db"}, + {file = "pydantic_core-2.16.3-cp310-none-win32.whl", hash = "sha256:456855f57b413f077dff513a5a28ed838dbbb15082ba00f80750377eed23d132"}, + {file = "pydantic_core-2.16.3-cp310-none-win_amd64.whl", hash = "sha256:732da3243e1b8d3eab8c6ae23ae6a58548849d2e4a4e03a1924c8ddf71a387cb"}, + {file = "pydantic_core-2.16.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:519ae0312616026bf4cedc0fe459e982734f3ca82ee8c7246c19b650b60a5ee4"}, + {file = "pydantic_core-2.16.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b3992a322a5617ded0a9f23fd06dbc1e4bd7cf39bc4ccf344b10f80af58beacd"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d62da299c6ecb04df729e4b5c52dc0d53f4f8430b4492b93aa8de1f541c4aac"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2acca2be4bb2f2147ada8cac612f8a98fc09f41c89f87add7256ad27332c2fda"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b662180108c55dfbf1280d865b2d116633d436cfc0bba82323554873967b340"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7c6ed0dc9d8e65f24f5824291550139fe6f37fac03788d4580da0d33bc00c97"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1bb0827f56654b4437955555dc3aeeebeddc47c2d7ed575477f082622c49e"}, + {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e56f8186d6210ac7ece503193ec84104da7ceb98f68ce18c07282fcc2452e76f"}, + {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:936e5db01dd49476fa8f4383c259b8b1303d5dd5fb34c97de194560698cc2c5e"}, + {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33809aebac276089b78db106ee692bdc9044710e26f24a9a2eaa35a0f9fa70ba"}, + {file = "pydantic_core-2.16.3-cp311-none-win32.whl", hash = "sha256:ded1c35f15c9dea16ead9bffcde9bb5c7c031bff076355dc58dcb1cb436c4721"}, + {file = "pydantic_core-2.16.3-cp311-none-win_amd64.whl", hash = "sha256:d89ca19cdd0dd5f31606a9329e309d4fcbb3df860960acec32630297d61820df"}, + {file = "pydantic_core-2.16.3-cp311-none-win_arm64.whl", hash = "sha256:6162f8d2dc27ba21027f261e4fa26f8bcb3cf9784b7f9499466a311ac284b5b9"}, + {file = "pydantic_core-2.16.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f56ae86b60ea987ae8bcd6654a887238fd53d1384f9b222ac457070b7ac4cff"}, + {file = "pydantic_core-2.16.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9bd22a2a639e26171068f8ebb5400ce2c1bc7d17959f60a3b753ae13c632975"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4204e773b4b408062960e65468d5346bdfe139247ee5f1ca2a378983e11388a2"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f651dd19363c632f4abe3480a7c87a9773be27cfe1341aef06e8759599454120"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aaf09e615a0bf98d406657e0008e4a8701b11481840be7d31755dc9f97c44053"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e47755d8152c1ab5b55928ab422a76e2e7b22b5ed8e90a7d584268dd49e9c6b"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500960cb3a0543a724a81ba859da816e8cf01b0e6aaeedf2c3775d12ee49cade"}, + {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf6204fe865da605285c34cf1172879d0314ff267b1c35ff59de7154f35fdc2e"}, + {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d33dd21f572545649f90c38c227cc8631268ba25c460b5569abebdd0ec5974ca"}, + {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:49d5d58abd4b83fb8ce763be7794d09b2f50f10aa65c0f0c1696c677edeb7cbf"}, + {file = "pydantic_core-2.16.3-cp312-none-win32.whl", hash = "sha256:f53aace168a2a10582e570b7736cc5bef12cae9cf21775e3eafac597e8551fbe"}, + {file = "pydantic_core-2.16.3-cp312-none-win_amd64.whl", hash = "sha256:0d32576b1de5a30d9a97f300cc6a3f4694c428d956adbc7e6e2f9cad279e45ed"}, + {file = "pydantic_core-2.16.3-cp312-none-win_arm64.whl", hash = "sha256:ec08be75bb268473677edb83ba71e7e74b43c008e4a7b1907c6d57e940bf34b6"}, + {file = "pydantic_core-2.16.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b1f6f5938d63c6139860f044e2538baeee6f0b251a1816e7adb6cbce106a1f01"}, + {file = "pydantic_core-2.16.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a1ef6a36fdbf71538142ed604ad19b82f67b05749512e47f247a6ddd06afdc7"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704d35ecc7e9c31d48926150afada60401c55efa3b46cd1ded5a01bdffaf1d48"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d937653a696465677ed583124b94a4b2d79f5e30b2c46115a68e482c6a591c8a"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9803edf8e29bd825f43481f19c37f50d2b01899448273b3a7758441b512acf8"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72282ad4892a9fb2da25defeac8c2e84352c108705c972db82ab121d15f14e6d"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f752826b5b8361193df55afcdf8ca6a57d0232653494ba473630a83ba50d8c9"}, + {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4384a8f68ddb31a0b0c3deae88765f5868a1b9148939c3f4121233314ad5532c"}, + {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4b2bf78342c40b3dc830880106f54328928ff03e357935ad26c7128bbd66ce8"}, + {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:13dcc4802961b5f843a9385fc821a0b0135e8c07fc3d9949fd49627c1a5e6ae5"}, + {file = "pydantic_core-2.16.3-cp38-none-win32.whl", hash = "sha256:e3e70c94a0c3841e6aa831edab1619ad5c511199be94d0c11ba75fe06efe107a"}, + {file = "pydantic_core-2.16.3-cp38-none-win_amd64.whl", hash = "sha256:ecdf6bf5f578615f2e985a5e1f6572e23aa632c4bd1dc67f8f406d445ac115ed"}, + {file = "pydantic_core-2.16.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:bda1ee3e08252b8d41fa5537413ffdddd58fa73107171a126d3b9ff001b9b820"}, + {file = "pydantic_core-2.16.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:21b888c973e4f26b7a96491c0965a8a312e13be108022ee510248fe379a5fa23"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be0ec334369316fa73448cc8c982c01e5d2a81c95969d58b8f6e272884df0074"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5b6079cc452a7c53dd378c6f881ac528246b3ac9aae0f8eef98498a75657805"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee8d5f878dccb6d499ba4d30d757111847b6849ae07acdd1205fffa1fc1253c"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7233d65d9d651242a68801159763d09e9ec96e8a158dbf118dc090cd77a104c9"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6119dc90483a5cb50a1306adb8d52c66e447da88ea44f323e0ae1a5fcb14256"}, + {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:578114bc803a4c1ff9946d977c221e4376620a46cf78da267d946397dc9514a8"}, + {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d8f99b147ff3fcf6b3cc60cb0c39ea443884d5559a30b1481e92495f2310ff2b"}, + {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4ac6b4ce1e7283d715c4b729d8f9dab9627586dafce81d9eaa009dd7f25dd972"}, + {file = "pydantic_core-2.16.3-cp39-none-win32.whl", hash = "sha256:e7774b570e61cb998490c5235740d475413a1f6de823169b4cf94e2fe9e9f6b2"}, + {file = "pydantic_core-2.16.3-cp39-none-win_amd64.whl", hash = "sha256:9091632a25b8b87b9a605ec0e61f241c456e9248bfdcf7abdf344fdb169c81cf"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:36fa178aacbc277bc6b62a2c3da95226520da4f4e9e206fdf076484363895d2c"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:dcca5d2bf65c6fb591fff92da03f94cd4f315972f97c21975398bd4bd046854a"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a72fb9963cba4cd5793854fd12f4cfee731e86df140f59ff52a49b3552db241"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60cc1a081f80a2105a59385b92d82278b15d80ebb3adb200542ae165cd7d183"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cbcc558401de90a746d02ef330c528f2e668c83350f045833543cd57ecead1ad"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fee427241c2d9fb7192b658190f9f5fd6dfe41e02f3c1489d2ec1e6a5ab1e04a"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f4cb85f693044e0f71f394ff76c98ddc1bc0953e48c061725e540396d5c8a2e1"}, + {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b29eeb887aa931c2fcef5aa515d9d176d25006794610c264ddc114c053bf96fe"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a425479ee40ff021f8216c9d07a6a3b54b31c8267c6e17aa88b70d7ebd0e5e5b"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5c5cbc703168d1b7a838668998308018a2718c2130595e8e190220238addc96f"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99b6add4c0b39a513d323d3b93bc173dac663c27b99860dd5bf491b240d26137"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f76ee558751746d6a38f89d60b6228fa174e5172d143886af0f85aa306fd89"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:00ee1c97b5364b84cb0bd82e9bbf645d5e2871fb8c58059d158412fee2d33d8a"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:287073c66748f624be4cef893ef9174e3eb88fe0b8a78dc22e88eca4bc357ca6"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed25e1835c00a332cb10c683cd39da96a719ab1dfc08427d476bce41b92531fc"}, + {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:86b3d0033580bd6bbe07590152007275bd7af95f98eaa5bd36f3da219dcd93da"}, + {file = "pydantic_core-2.16.3.tar.gz", hash = "sha256:1cac689f80a3abab2d3c0048b29eea5751114054f032a941a32de4c852c59cad"}, ] [package.dependencies] @@ -3145,36 +3170,40 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pydantic-extra-types" -version = "2.5.0" +version = "2.6.0" description = "Extra Pydantic types." optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_extra_types-2.5.0-py3-none-any.whl", hash = "sha256:7346873019cac32061b471adf2cdac711664ddb7a6ede04219bed2da34888c4d"}, - {file = "pydantic_extra_types-2.5.0.tar.gz", hash = "sha256:46b85240093dc63ad4a8f3cab49e03d76ae0577e4f99e2bbff7d32f99d009bf9"}, + {file = "pydantic_extra_types-2.6.0-py3-none-any.whl", hash = "sha256:d291d521c2e2bf2e6f11971caf8d639518124ae26a76d2e712599e98c4ef2b2b"}, + {file = "pydantic_extra_types-2.6.0.tar.gz", hash = "sha256:e9a93cfb245158462acb76621785219f80ad112303a0a7784d2ada65e6ed6cba"}, ] [package.dependencies] pydantic = ">=2.5.2" [package.extras] -all = ["pendulum (>=3.0.0,<4.0.0)", "phonenumbers (>=8,<9)", "pycountry (>=23,<24)", "python-ulid (>=1,<2)"] +all = ["pendulum (>=3.0.0,<4.0.0)", "phonenumbers (>=8,<9)", "pycountry (>=23)", "python-ulid (>=1,<2)", "python-ulid (>=1,<3)"] [[package]] name = "pydantic-settings" -version = "2.1.0" +version = "2.2.1" description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_settings-2.1.0-py3-none-any.whl", hash = "sha256:7621c0cb5d90d1140d2f0ef557bdf03573aac7035948109adf2574770b77605a"}, - {file = "pydantic_settings-2.1.0.tar.gz", hash = "sha256:26b1492e0a24755626ac5e6d715e9077ab7ad4fb5f19a8b7ed7011d52f36141c"}, + {file = "pydantic_settings-2.2.1-py3-none-any.whl", hash = "sha256:0235391d26db4d2190cb9b31051c4b46882d28a51533f97440867f012d4da091"}, + {file = "pydantic_settings-2.2.1.tar.gz", hash = "sha256:00b9f6a5e95553590434c0fa01ead0b216c3e10bc54ae02e37f359948643c5ed"}, ] [package.dependencies] pydantic = ">=2.3.0" python-dotenv = ">=0.21.0" +[package.extras] +toml = ["tomli (>=2.0.1)"] +yaml = ["pyyaml (>=6.0.1)"] + [[package]] name = "pynacl" version = "1.5.0" @@ -3262,13 +3291,13 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xm [[package]] name = "python-dateutil" -version = "2.8.2" +version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, - {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, ] [package.dependencies] @@ -3363,101 +3392,101 @@ files = [ [[package]] name = "rapidfuzz" -version = "3.6.1" +version = "3.6.2" description = "rapid fuzzy string matching" optional = false python-versions = ">=3.8" files = [ - {file = "rapidfuzz-3.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ac434fc71edda30d45db4a92ba5e7a42c7405e1a54cb4ec01d03cc668c6dcd40"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2a791168e119cfddf4b5a40470620c872812042f0621e6a293983a2d52372db0"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5a2f3e9df346145c2be94e4d9eeffb82fab0cbfee85bd4a06810e834fe7c03fa"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23de71e7f05518b0bbeef55d67b5dbce3bcd3e2c81e7e533051a2e9401354eb0"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d056e342989248d2bdd67f1955bb7c3b0ecfa239d8f67a8dfe6477b30872c607"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:01835d02acd5d95c1071e1da1bb27fe213c84a013b899aba96380ca9962364bc"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed0f712e0bb5fea327e92aec8a937afd07ba8de4c529735d82e4c4124c10d5a0"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96cd19934f76a1264e8ecfed9d9f5291fde04ecb667faef5f33bdbfd95fe2d1f"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e06c4242a1354cf9d48ee01f6f4e6e19c511d50bb1e8d7d20bcadbb83a2aea90"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:d73dcfe789d37c6c8b108bf1e203e027714a239e50ad55572ced3c004424ed3b"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:06e98ff000e2619e7cfe552d086815671ed09b6899408c2c1b5103658261f6f3"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:08b6fb47dd889c69fbc0b915d782aaed43e025df6979b6b7f92084ba55edd526"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a1788ebb5f5b655a15777e654ea433d198f593230277e74d51a2a1e29a986283"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-win32.whl", hash = "sha256:c65f92881753aa1098c77818e2b04a95048f30edbe9c3094dc3707d67df4598b"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:4243a9c35667a349788461aae6471efde8d8800175b7db5148a6ab929628047f"}, - {file = "rapidfuzz-3.6.1-cp310-cp310-win_arm64.whl", hash = "sha256:f59d19078cc332dbdf3b7b210852ba1f5db8c0a2cd8cc4c0ed84cc00c76e6802"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fbc07e2e4ac696497c5f66ec35c21ddab3fc7a406640bffed64c26ab2f7ce6d6"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:40cced1a8852652813f30fb5d4b8f9b237112a0bbaeebb0f4cc3611502556764"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:82300e5f8945d601c2daaaac139d5524d7c1fdf719aa799a9439927739917460"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edf97c321fd641fea2793abce0e48fa4f91f3c202092672f8b5b4e781960b891"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7420e801b00dee4a344ae2ee10e837d603461eb180e41d063699fb7efe08faf0"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:060bd7277dc794279fa95522af355034a29c90b42adcb7aa1da358fc839cdb11"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7e3375e4f2bfec77f907680328e4cd16cc64e137c84b1886d547ab340ba6928"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a490cd645ef9d8524090551016f05f052e416c8adb2d8b85d35c9baa9d0428ab"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2e03038bfa66d2d7cffa05d81c2f18fd6acbb25e7e3c068d52bb7469e07ff382"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b19795b26b979c845dba407fe79d66975d520947b74a8ab6cee1d22686f7967"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:064c1d66c40b3a0f488db1f319a6e75616b2e5fe5430a59f93a9a5e40a656d15"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3c772d04fb0ebeece3109d91f6122b1503023086a9591a0b63d6ee7326bd73d9"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:841eafba6913c4dfd53045835545ba01a41e9644e60920c65b89c8f7e60c00a9"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-win32.whl", hash = "sha256:266dd630f12696ea7119f31d8b8e4959ef45ee2cbedae54417d71ae6f47b9848"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:d79aec8aeee02ab55d0ddb33cea3ecd7b69813a48e423c966a26d7aab025cdfe"}, - {file = "rapidfuzz-3.6.1-cp311-cp311-win_arm64.whl", hash = "sha256:484759b5dbc5559e76fefaa9170147d1254468f555fd9649aea3bad46162a88b"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b2ef4c0fd3256e357b70591ffb9e8ed1d439fb1f481ba03016e751a55261d7c1"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:588c4b20fa2fae79d60a4e438cf7133d6773915df3cc0a7f1351da19eb90f720"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7142ee354e9c06e29a2636b9bbcb592bb00600a88f02aa5e70e4f230347b373e"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1dfc557c0454ad22382373ec1b7df530b4bbd974335efe97a04caec936f2956a"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:03f73b381bdeccb331a12c3c60f1e41943931461cdb52987f2ecf46bfc22f50d"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b0ccc2ec1781c7e5370d96aef0573dd1f97335343e4982bdb3a44c133e27786"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da3e8c9f7e64bb17faefda085ff6862ecb3ad8b79b0f618a6cf4452028aa2222"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fde9b14302a31af7bdafbf5cfbb100201ba21519be2b9dedcf4f1048e4fbe65d"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1a23eee225dfb21c07f25c9fcf23eb055d0056b48e740fe241cbb4b22284379"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e49b9575d16c56c696bc7b06a06bf0c3d4ef01e89137b3ddd4e2ce709af9fe06"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:0a9fc714b8c290261669f22808913aad49553b686115ad0ee999d1cb3df0cd66"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:a3ee4f8f076aa92184e80308fc1a079ac356b99c39408fa422bbd00145be9854"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f056ba42fd2f32e06b2c2ba2443594873cfccc0c90c8b6327904fc2ddf6d5799"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-win32.whl", hash = "sha256:5d82b9651e3d34b23e4e8e201ecd3477c2baa17b638979deeabbb585bcb8ba74"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:dad55a514868dae4543ca48c4e1fc0fac704ead038dafedf8f1fc0cc263746c1"}, - {file = "rapidfuzz-3.6.1-cp312-cp312-win_arm64.whl", hash = "sha256:3c84294f4470fcabd7830795d754d808133329e0a81d62fcc2e65886164be83b"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e19d519386e9db4a5335a4b29f25b8183a1c3f78cecb4c9c3112e7f86470e37f"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:01eb03cd880a294d1bf1a583fdd00b87169b9cc9c9f52587411506658c864d73"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:be368573255f8fbb0125a78330a1a40c65e9ba3c5ad129a426ff4289099bfb41"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b3e5af946f419c30f5cb98b69d40997fe8580efe78fc83c2f0f25b60d0e56efb"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f382f7ffe384ce34345e1c0b2065451267d3453cadde78946fbd99a59f0cc23c"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be156f51f3a4f369e758505ed4ae64ea88900dcb2f89d5aabb5752676d3f3d7e"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1936d134b6c513fbe934aeb668b0fee1ffd4729a3c9d8d373f3e404fbb0ce8a0"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ff8eaf4a9399eb2bebd838f16e2d1ded0955230283b07376d68947bbc2d33d"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ae598a172e3a95df3383634589660d6b170cc1336fe7578115c584a99e0ba64d"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:cd4ba4c18b149da11e7f1b3584813159f189dc20833709de5f3df8b1342a9759"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:0402f1629e91a4b2e4aee68043a30191e5e1b7cd2aa8dacf50b1a1bcf6b7d3ab"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:1e12319c6b304cd4c32d5db00b7a1e36bdc66179c44c5707f6faa5a889a317c0"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0bbfae35ce4de4c574b386c43c78a0be176eeddfdae148cb2136f4605bebab89"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-win32.whl", hash = "sha256:7fec74c234d3097612ea80f2a80c60720eec34947066d33d34dc07a3092e8105"}, - {file = "rapidfuzz-3.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:a553cc1a80d97459d587529cc43a4c7c5ecf835f572b671107692fe9eddf3e24"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:757dfd7392ec6346bd004f8826afb3bf01d18a723c97cbe9958c733ab1a51791"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2963f4a3f763870a16ee076796be31a4a0958fbae133dbc43fc55c3968564cf5"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d2f0274595cc5b2b929c80d4e71b35041104b577e118cf789b3fe0a77b37a4c5"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f211e366e026de110a4246801d43a907cd1a10948082f47e8a4e6da76fef52"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a59472b43879012b90989603aa5a6937a869a72723b1bf2ff1a0d1edee2cc8e6"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a03863714fa6936f90caa7b4b50ea59ea32bb498cc91f74dc25485b3f8fccfe9"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd95b6b7bfb1584f806db89e1e0c8dbb9d25a30a4683880c195cc7f197eaf0c"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7183157edf0c982c0b8592686535c8b3e107f13904b36d85219c77be5cefd0d8"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ad9d74ef7c619b5b0577e909582a1928d93e07d271af18ba43e428dc3512c2a1"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:b53137d81e770c82189e07a8f32722d9e4260f13a0aec9914029206ead38cac3"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:49b9ed2472394d306d5dc967a7de48b0aab599016aa4477127b20c2ed982dbf9"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:dec307b57ec2d5054d77d03ee4f654afcd2c18aee00c48014cb70bfed79597d6"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4381023fa1ff32fd5076f5d8321249a9aa62128eb3f21d7ee6a55373e672b261"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-win32.whl", hash = "sha256:8d7a072f10ee57c8413c8ab9593086d42aaff6ee65df4aa6663eecdb7c398dca"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:ebcfb5bfd0a733514352cfc94224faad8791e576a80ffe2fd40b2177bf0e7198"}, - {file = "rapidfuzz-3.6.1-cp39-cp39-win_arm64.whl", hash = "sha256:1c47d592e447738744905c18dda47ed155620204714e6df20eb1941bb1ba315e"}, - {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:eef8b346ab331bec12bbc83ac75641249e6167fab3d84d8f5ca37fd8e6c7a08c"}, - {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53251e256017e2b87f7000aee0353ba42392c442ae0bafd0f6b948593d3f68c6"}, - {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6dede83a6b903e3ebcd7e8137e7ff46907ce9316e9d7e7f917d7e7cdc570ee05"}, - {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e4da90e4c2b444d0a171d7444ea10152e07e95972bb40b834a13bdd6de1110c"}, - {file = "rapidfuzz-3.6.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ca3dfcf74f2b6962f411c33dd95b0adf3901266e770da6281bc96bb5a8b20de9"}, - {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:bcc957c0a8bde8007f1a8a413a632a1a409890f31f73fe764ef4eac55f59ca87"}, - {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:692c9a50bea7a8537442834f9bc6b7d29d8729a5b6379df17c31b6ab4df948c2"}, - {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c23ceaea27e790ddd35ef88b84cf9d721806ca366199a76fd47cfc0457a81b"}, - {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b155e67fff215c09f130555002e42f7517d0ea72cbd58050abb83cb7c880cec"}, - {file = "rapidfuzz-3.6.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3028ee8ecc48250607fa8a0adce37b56275ec3b1acaccd84aee1f68487c8557b"}, - {file = "rapidfuzz-3.6.1.tar.gz", hash = "sha256:35660bee3ce1204872574fa041c7ad7ec5175b3053a4cb6e181463fc07013de7"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a5637e6bf11b15b5aff6ee818c76bdec99ad208511b78985e6209ba648a6e3ee"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:380586664f2f63807050ddb95e7702888b4f0b425abf17655940c411f39287ad"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3168ff565d4b8c239cf11fb604dd2507d30e9bcaac76a4077c0ac23cf2c866ed"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be69f7fd46b5c6467fe5e2fd4cff3816b0c03048eed8a4becb9a73e6000960e7"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cbd5894f23fdf5697499cf759523639838ac822bd1600e343fdce7313baa02ae"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:85a5b6e026393fe39fb61146b9c17c5af66fffbe1410e992c4bb06d9ec327bd3"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab269adfc64480f209e99f253391a10735edd5c09046e04899adab5fb132f20e"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35aeac852bca06023d6bbd50c1fc504ca5a9a3613d5e75a140f0be7601fa34ef"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e706f302c6a3ae0d74edd0d6ace46aee1ae07c563b436ccf5ff04db2b3571e60"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bec353f022011e6e5cd28ccb8700fbd2a33918197af0d4e0abb3c3f4845cc864"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ef3925daaa93eed20401012e219f569ff0c039ed5bf4ce2d3737b4f75d441622"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:6ee98d88ae9ccc77ff61992ed33b2496478def5dc0da55c9a9aa06fcb725a352"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:423c7c588b09d618601097b7a0017dfcb91132a2076bef29023c5f3cd2dc3de1"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-win32.whl", hash = "sha256:c17c5efee347a40a6f4c1eec59e3d7d1e22f7613a97f8b8a07733ef723483a04"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:4209816626d8d6ff8ae7dc248061c6059e618b70c6e6f6e4d7444ae3740b2b85"}, + {file = "rapidfuzz-3.6.2-cp310-cp310-win_arm64.whl", hash = "sha256:1c54d3c85e522d3ac9ee39415f183c8fa184c4f87e7e5a37938f15a6d50e853a"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e06f6d270112f5db001f1cba5a97e1a48aee3d3dbdcbea3ec027c230462dbf9b"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:080cb71b50cb6aff11d1c6aeb157f273e2da0b2bdb3f9d7b01257e49e69a8576"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a7895e04a22d6515bc91a850e0831f2405547605aa311d1ffec51e4818abc3c1"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd82f9838519136b7083dd1e3149ee80344521f3dc37f744f227505ff0883efb"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a945567c2b0b6e069454c9782d5234b0b6795718adf7a9f868bd3144afa6a023"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:673ba2c343644805acdae1cb949c6a4de71aa2f62a998978551ebea59603af3f"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9d457c89bac1471442002e70551e8268e639b3870b4a4521eae363c07253be87"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:495c0d8e14e6f12520eb7fc71b9ba9fcaafb47fc23a654e6e89b6c7985ec0020"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6d67b649bf3e1b1722d04eca44d37919aef88305ce7ad05564502d013cf550fd"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e48dde8ca83d11daa00900cf6a5d281a1297aef9b7bfa73801af6e8822be5019"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:824cc381cf81cbf8d158f6935664ec2a69e6ac3b1d39fa201988bf81a257f775"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:1dfe4c24957474ce0ac75d886387e30e292b4be39228a6d71f76de414dc187db"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d57b98013b802621bbc8b12a46bfc9d36ac552ab51ca207f7ce167ad46adabeb"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-win32.whl", hash = "sha256:9a07dffac439223b4f1025dbfc68f4445a3460a859309c9858c2a3fa29617cdc"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-win_amd64.whl", hash = "sha256:95a49c6b8bf1229743ae585dd5b7d57f0d15a7eb6e826866d5c9965ba958503c"}, + {file = "rapidfuzz-3.6.2-cp311-cp311-win_arm64.whl", hash = "sha256:af7c19ec86e11488539380d3db1755be5d561a3c0e7b04ff9d07abd7f9a8e9d8"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:de8adc12161bf282c60f12dc9233bb31632f71d446a010fe7469a69b8153427f"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:337e357f693130c4c6be740652542b260e36f622c59e01fa33d58f1d2750c930"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6468f8bc8c3c50604f43631550ef9cfec873515dba5023ca34d461be94669fc8"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74c6773b11445b5e5cf93ca383171cd0ac0cdeafea11a7b2a5688f8bf8d813e6"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1507fc5769aa109dda4de3a15f822a0f6a03e18d627bd0ba3ddbb253cf70e07"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:617949a70150e6fffdaed19253dd49f7a53528411dc8bf7663d499ba21e0f61e"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8b77779174b1b40aa70827692571ab457061897846255ad7d5d559e2edb1932"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80e51b22a7da83f9c87a97e92df07ed0612c74c35496590255f4b5d5b4212dfe"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3ae7c86914cb6673e97e187ba431b9c4cf4177d9ae77f8a1e5b2ba9a5628839e"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:ddc380ffaa90f204cc9ddcb779114b9ab6f015246d549de9d47871a97ef9f18a"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:3c1dc078ef371fce09f9f3eec2ca4eaa2a8cd412ec53941015b4f39f14d34407"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:9a74102fc5a2534fe91f7507838623e1f3a149d8e05648389c42bb42e14b1c3f"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:48e1eaea8fcd522fca7f04f0480663f0f0cfb77957092cce60a93f4462864996"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-win32.whl", hash = "sha256:66b008bf2972740cd2dda5d382eb8bdb87265cd88198e71c7797bdc0d1f79d20"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-win_amd64.whl", hash = "sha256:87ac3a87f2251ae2e95fc9478ca5c759de6d141d04c84d3fec9f9cdcfc167b33"}, + {file = "rapidfuzz-3.6.2-cp312-cp312-win_arm64.whl", hash = "sha256:b593cc51aed887e93b78c2f94dfae9008be2b23d17afd3b1f1d3eb3913b58f26"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:7d830bc7a9b586a374147ec60b08b1f9ae5996b43f75cc514f37faef3866b519"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:dbee7f5ff11872b76505cbd87c814abc823e8757f11c69062eb3b25130a283da"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:28c011fb31f2c3f82f503aedd6097d3d3854e574e327a119a3b7eb2cf90b79ca"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cda81d0e0ce0c13abfa46b24e10c1e85f9c6acb628f0a9a948f5779f9c2076a2"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c279928651ce0e9e5220dcb25a00cc53b65e592a0861336a38299bcdca3a596"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:35bd4bc9c40e6994c5d6edea4b9319388b4d9711c13c66d543bb4c37624b4184"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d07899506a5a8760448d9df036d528b55a554bf571714173635c79eef4a86e58"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb2e51d01b9c6d6954a3e055c57a80d4685b4fc82719db5519fc153566bcd6bb"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:153d065e353371cc0aeff32b99999a5758266a64e958d1364189367c1c9f6814"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4edcceebb85ebfa49a3ddcde20ad891d36c08dc0fd592efdab0e7d313a4e36af"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3549123fca5bb817341025f98e8e49ca99f84596c7c4f92b658f8e5836040d4a"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:84c1032ae42628465b7a5cc35249906061e18a8193c9c27cbd2db54e9823a9a6"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9bcc91ebd8fc69a6bd3b5711c8250f5f4e70606b4da75ef415f57ad209978205"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-win32.whl", hash = "sha256:f3a70f341c4c111bad910d2df69c78577a98af140319a996af24c9385939335d"}, + {file = "rapidfuzz-3.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:354ad5fe655beb7b279390cb58334903931c5452ecbad1b1666ffb06786498e2"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1b86b93d93020c2b3edc1665d75c8855784845fc0a739b312c26c3a4bf0c80d5"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:28243086ed0e50808bb56632e5442c457241646aeafafd501ac87901f40a3237"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ed52461ae5a9ea4c400d38e2649c74a413f1a6d8fb8308b66f1fbd122514732f"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a46220f86a5f9cb016af31525e0d0865cad437d02239aa0d8aed2ab8bff1f1c"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81a630ed2fc3ec5fc7400eb66bab1f87e282b4d47f0abe3e48c6634dfa13b5e4"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8e5a437b9089df6242a718d9c31ab1742989e9400a0977af012ef483b63b4c2"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16270b5529de83b7bae7457e952e4d9cf3fbf029a837dd32d415bb9e0eb8e599"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5378c04102c7f084cde30a100154fa6d7e2baf0d51a6bdd2f912545559c1fb35"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7f18397c8d6a65fc0b288d2fc29bc7baeea6ba91eeb95163a3cd98f23cd3bc85"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2acd2514defce81e6ff4bbff50252d5e7df8e85a731442c4b83e44c86cf1c916"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:1df2faf80201952e252413b6fac6f3e146080dcebb87bb1bb722508e67558ed8"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6440ed0b3007c1c9286b0b88fe2ab2d9e83edd60cd62293b3dfabb732b4e8a30"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4fcfa23b5553b27f4016df77c53172ea743454cf12c28cfa7c35a309a2be93b3"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-win32.whl", hash = "sha256:2d580d937146e803c8e5e1b87916cab8d6f84013b6392713e201efcda335c7d8"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:fe2a68be734e8e88af23385c68d6467e15818b6b1df1cbfebf7bff577226c957"}, + {file = "rapidfuzz-3.6.2-cp39-cp39-win_arm64.whl", hash = "sha256:6478f7803efebf5f644d0b758439c5b25728550fdfbb19783d150004c46a75a9"}, + {file = "rapidfuzz-3.6.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:36ce7b68a7b90b787cdd73480a68d2f1ca63c31a3a9d5a79a8736f978e1e9344"}, + {file = "rapidfuzz-3.6.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53597fd72a9340bcdd80d3620f4957c2b92f9b569313b969a3abdaffd193aae6"}, + {file = "rapidfuzz-3.6.2-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d4f6de745fe6ce46a422d353ee10599013631d7d714a36d025f164b2d4e8c000"}, + {file = "rapidfuzz-3.6.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62df2136068e2515ed8beb01756381ff62c29384d785e3bf46e3111d4ea3ba1e"}, + {file = "rapidfuzz-3.6.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7382c90170f60c846c81a07ddd80bb2e8c43c8383754486fa37f67391a571897"}, + {file = "rapidfuzz-3.6.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f31314fd2e2f3dc3e519e6f93669462ce7953df2def1c344aa8f5345976d0eb2"}, + {file = "rapidfuzz-3.6.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:012221629d54d3bee954148247f711eb86d4d390b589ebfe03172ea0b37a7531"}, + {file = "rapidfuzz-3.6.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d41dd59a70decfce6595315367a2fea2af660d92a9d144acc6479030501014d7"}, + {file = "rapidfuzz-3.6.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f9fa14136a5b0cba1ec42531f7c3e0b0d3edb7fd6bc5e5ae7b498541f3855ab"}, + {file = "rapidfuzz-3.6.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:259364199cbfeca33b1af369fc7951f71717aa285184a3fa5a7b1772da1b89db"}, + {file = "rapidfuzz-3.6.2.tar.gz", hash = "sha256:cf911e792ab0c431694c9bf2648afabfd92099103f2e31492893e078ddca5e1a"}, ] [package.extras] @@ -3900,96 +3929,40 @@ test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", [[package]] name = "sentence-transformers" -version = "2.3.1" +version = "2.5.1" description = "Multilingual text embeddings" optional = false python-versions = ">=3.8.0" files = [ - {file = "sentence-transformers-2.3.1.tar.gz", hash = "sha256:d589d85a464f45338cdbdf99ea715f8068e1fb01c582e0bcdbf60bcf3eade6d0"}, - {file = "sentence_transformers-2.3.1-py3-none-any.whl", hash = "sha256:285d6637726c3b002186aa4b8bcace1101364b32671fb605297c4c2636b8190e"}, + {file = "sentence-transformers-2.5.1.tar.gz", hash = "sha256:754bf2b2623eb46904fd9c72ff89a0f90200fe141a8d45b03e83bc6d51718153"}, + {file = "sentence_transformers-2.5.1-py3-none-any.whl", hash = "sha256:f12346f7fca06ed1198d24235cb9114a74665506f7c30044e0a6f12de7eeeb77"}, ] [package.dependencies] huggingface-hub = ">=0.15.1" -nltk = "*" numpy = "*" Pillow = "*" scikit-learn = "*" scipy = "*" -sentencepiece = "*" torch = ">=1.11.0" tqdm = "*" transformers = ">=4.32.0,<5.0.0" -[[package]] -name = "sentencepiece" -version = "0.1.99" -description = "SentencePiece python wrapper" -optional = false -python-versions = "*" -files = [ - {file = "sentencepiece-0.1.99-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0eb528e70571b7c02723e5804322469b82fe7ea418c96051d0286c0fa028db73"}, - {file = "sentencepiece-0.1.99-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:77d7fafb2c4e4659cbdf303929503f37a26eabc4ff31d3a79bf1c5a1b338caa7"}, - {file = "sentencepiece-0.1.99-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be9cf5b9e404c245aeb3d3723c737ba7a8f5d4ba262ef233a431fa6c45f732a0"}, - {file = "sentencepiece-0.1.99-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baed1a26464998f9710d20e52607c29ffd4293e7c71c6a1f83f51ad0911ec12c"}, - {file = "sentencepiece-0.1.99-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9832f08bb372d4c8b567612f8eab9e36e268dff645f1c28f9f8e851be705f6d1"}, - {file = "sentencepiece-0.1.99-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:019e7535108e309dae2b253a75834fc3128240aa87c00eb80732078cdc182588"}, - {file = "sentencepiece-0.1.99-cp310-cp310-win32.whl", hash = "sha256:fa16a830416bb823fa2a52cbdd474d1f7f3bba527fd2304fb4b140dad31bb9bc"}, - {file = "sentencepiece-0.1.99-cp310-cp310-win_amd64.whl", hash = "sha256:14b0eccb7b641d4591c3e12ae44cab537d68352e4d3b6424944f0c447d2348d5"}, - {file = "sentencepiece-0.1.99-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6d3c56f24183a1e8bd61043ff2c58dfecdc68a5dd8955dc13bab83afd5f76b81"}, - {file = "sentencepiece-0.1.99-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed6ea1819fd612c989999e44a51bf556d0ef6abfb553080b9be3d347e18bcfb7"}, - {file = "sentencepiece-0.1.99-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2a0260cd1fb7bd8b4d4f39dc2444a8d5fd4e0a0c4d5c899810ef1abf99b2d45"}, - {file = "sentencepiece-0.1.99-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a1abff4d1ff81c77cac3cc6fefa34fa4b8b371e5ee51cb7e8d1ebc996d05983"}, - {file = "sentencepiece-0.1.99-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:004e6a621d4bc88978eecb6ea7959264239a17b70f2cbc348033d8195c9808ec"}, - {file = "sentencepiece-0.1.99-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db361e03342c41680afae5807590bc88aa0e17cfd1a42696a160e4005fcda03b"}, - {file = "sentencepiece-0.1.99-cp311-cp311-win32.whl", hash = "sha256:2d95e19168875b70df62916eb55428a0cbcb834ac51d5a7e664eda74def9e1e0"}, - {file = "sentencepiece-0.1.99-cp311-cp311-win_amd64.whl", hash = "sha256:f90d73a6f81248a909f55d8e6ef56fec32d559e1e9af045f0b0322637cb8e5c7"}, - {file = "sentencepiece-0.1.99-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:62e24c81e74bd87a6e0d63c51beb6527e4c0add67e1a17bac18bcd2076afcfeb"}, - {file = "sentencepiece-0.1.99-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57efcc2d51caff20d9573567d9fd3f854d9efe613ed58a439c78c9f93101384a"}, - {file = "sentencepiece-0.1.99-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a904c46197993bd1e95b93a6e373dca2f170379d64441041e2e628ad4afb16f"}, - {file = "sentencepiece-0.1.99-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d89adf59854741c0d465f0e1525b388c0d174f611cc04af54153c5c4f36088c4"}, - {file = "sentencepiece-0.1.99-cp36-cp36m-win32.whl", hash = "sha256:47c378146928690d1bc106fdf0da768cebd03b65dd8405aa3dd88f9c81e35dba"}, - {file = "sentencepiece-0.1.99-cp36-cp36m-win_amd64.whl", hash = "sha256:9ba142e7a90dd6d823c44f9870abdad45e6c63958eb60fe44cca6828d3b69da2"}, - {file = "sentencepiece-0.1.99-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b7b1a9ae4d7c6f1f867e63370cca25cc17b6f4886729595b885ee07a58d3cec3"}, - {file = "sentencepiece-0.1.99-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0f644c9d4d35c096a538507b2163e6191512460035bf51358794a78515b74f7"}, - {file = "sentencepiece-0.1.99-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c8843d23a0f686d85e569bd6dcd0dd0e0cbc03731e63497ca6d5bacd18df8b85"}, - {file = "sentencepiece-0.1.99-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33e6f690a1caebb4867a2e367afa1918ad35be257ecdb3455d2bbd787936f155"}, - {file = "sentencepiece-0.1.99-cp37-cp37m-win32.whl", hash = "sha256:8a321866c2f85da7beac74a824b4ad6ddc2a4c9bccd9382529506d48f744a12c"}, - {file = "sentencepiece-0.1.99-cp37-cp37m-win_amd64.whl", hash = "sha256:c42f753bcfb7661c122a15b20be7f684b61fc8592c89c870adf52382ea72262d"}, - {file = "sentencepiece-0.1.99-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:85b476406da69c70586f0bb682fcca4c9b40e5059814f2db92303ea4585c650c"}, - {file = "sentencepiece-0.1.99-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cfbcfe13c69d3f87b7fcd5da168df7290a6d006329be71f90ba4f56bc77f8561"}, - {file = "sentencepiece-0.1.99-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:445b0ec381af1cd4eef95243e7180c63d9c384443c16c4c47a28196bd1cda937"}, - {file = "sentencepiece-0.1.99-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6890ea0f2b4703f62d0bf27932e35808b1f679bdb05c7eeb3812b935ba02001"}, - {file = "sentencepiece-0.1.99-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb71af492b0eefbf9f2501bec97bcd043b6812ab000d119eaf4bd33f9e283d03"}, - {file = "sentencepiece-0.1.99-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b866b5bd3ddd54166bbcbf5c8d7dd2e0b397fac8537991c7f544220b1f67bc"}, - {file = "sentencepiece-0.1.99-cp38-cp38-win32.whl", hash = "sha256:b133e8a499eac49c581c3c76e9bdd08c338cc1939e441fee6f92c0ccb5f1f8be"}, - {file = "sentencepiece-0.1.99-cp38-cp38-win_amd64.whl", hash = "sha256:0eaf3591dd0690a87f44f4df129cf8d05d8a4029b5b6709b489b8e27f9a9bcff"}, - {file = "sentencepiece-0.1.99-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38efeda9bbfb55052d482a009c6a37e52f42ebffcea9d3a98a61de7aee356a28"}, - {file = "sentencepiece-0.1.99-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6c030b081dc1e1bcc9fadc314b19b740715d3d566ad73a482da20d7d46fd444c"}, - {file = "sentencepiece-0.1.99-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:84dbe53e02e4f8a2e45d2ac3e430d5c83182142658e25edd76539b7648928727"}, - {file = "sentencepiece-0.1.99-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b0f55d0a0ee1719b4b04221fe0c9f0c3461dc3dabd77a035fa2f4788eb3ef9a"}, - {file = "sentencepiece-0.1.99-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18e800f206cd235dc27dc749299e05853a4e4332e8d3dfd81bf13d0e5b9007d9"}, - {file = "sentencepiece-0.1.99-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ae1c40cda8f9d5b0423cfa98542735c0235e7597d79caf318855cdf971b2280"}, - {file = "sentencepiece-0.1.99-cp39-cp39-win32.whl", hash = "sha256:c84ce33af12ca222d14a1cdd37bd76a69401e32bc68fe61c67ef6b59402f4ab8"}, - {file = "sentencepiece-0.1.99-cp39-cp39-win_amd64.whl", hash = "sha256:350e5c74d739973f1c9643edb80f7cc904dc948578bcb1d43c6f2b173e5d18dd"}, - {file = "sentencepiece-0.1.99.tar.gz", hash = "sha256:189c48f5cb2949288f97ccdb97f0473098d9c3dcf5a3d99d4eabe719ec27297f"}, -] - [[package]] name = "setuptools" -version = "69.1.0" +version = "69.1.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.1.0-py3-none-any.whl", hash = "sha256:c054629b81b946d63a9c6e732bc8b2513a7c3ea645f11d0139a2191d735c60c6"}, - {file = "setuptools-69.1.0.tar.gz", hash = "sha256:850894c4195f09c4ed30dba56213bf7c3f21d86ed6bdaafb5df5972593bfc401"}, + {file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"}, + {file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -4004,13 +3977,13 @@ files = [ [[package]] name = "sniffio" -version = "1.3.0" +version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" files = [ - {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, - {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, ] [[package]] @@ -4314,47 +4287,47 @@ files = [ [[package]] name = "tomlkit" -version = "0.12.3" +version = "0.12.4" description = "Style preserving TOML library" optional = false python-versions = ">=3.7" files = [ - {file = "tomlkit-0.12.3-py3-none-any.whl", hash = "sha256:b0a645a9156dc7cb5d3a1f0d4bab66db287fcb8e0430bdd4664a095ea16414ba"}, - {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"}, + {file = "tomlkit-0.12.4-py3-none-any.whl", hash = "sha256:5cd82d48a3dd89dee1f9d64420aa20ae65cfbd00668d6f094d7578a78efbb77b"}, + {file = "tomlkit-0.12.4.tar.gz", hash = "sha256:7ca1cfc12232806517a8515047ba66a19369e71edf2439d0f5824f91032b6cc3"}, ] [[package]] name = "torch" -version = "2.2.0" +version = "2.2.1" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" optional = false python-versions = ">=3.8.0" files = [ - {file = "torch-2.2.0-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:d366158d6503a3447e67f8c0ad1328d54e6c181d88572d688a625fac61b13a97"}, - {file = "torch-2.2.0-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:707f2f80402981e9f90d0038d7d481678586251e6642a7a6ef67fc93511cb446"}, - {file = "torch-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:15c8f0a105c66b28496092fca1520346082e734095f8eaf47b5786bac24b8a31"}, - {file = "torch-2.2.0-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:0ca4df4b728515ad009b79f5107b00bcb2c63dc202d991412b9eb3b6a4f24349"}, - {file = "torch-2.2.0-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:3d3eea2d5969b9a1c9401429ca79efc668120314d443d3463edc3289d7f003c7"}, - {file = "torch-2.2.0-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:0d1c580e379c0d48f0f0a08ea28d8e373295aa254de4f9ad0631f9ed8bc04c24"}, - {file = "torch-2.2.0-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:9328e3c1ce628a281d2707526b4d1080eae7c4afab4f81cea75bde1f9441dc78"}, - {file = "torch-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:03c8e660907ac1b8ee07f6d929c4e15cd95be2fb764368799cca02c725a212b8"}, - {file = "torch-2.2.0-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:da0cefe7f84ece3e3b56c11c773b59d1cb2c0fd83ddf6b5f7f1fd1a987b15c3e"}, - {file = "torch-2.2.0-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:f81d23227034221a4a4ff8ef24cc6cec7901edd98d9e64e32822778ff01be85e"}, - {file = "torch-2.2.0-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:dcbfb2192ac41ca93c756ebe9e2af29df0a4c14ee0e7a0dd78f82c67a63d91d4"}, - {file = "torch-2.2.0-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:9eeb42971619e24392c9088b5b6d387d896e267889d41d267b1fec334f5227c5"}, - {file = "torch-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:c718b2ca69a6cac28baa36d86d8c0ec708b102cebd1ceb1b6488e404cd9be1d1"}, - {file = "torch-2.2.0-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:f11d18fceb4f9ecb1ac680dde7c463c120ed29056225d75469c19637e9f98d12"}, - {file = "torch-2.2.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:ee1da852bfd4a7e674135a446d6074c2da7194c1b08549e31eae0b3138c6b4d2"}, - {file = "torch-2.2.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:0d819399819d0862268ac531cf12a501c253007df4f9e6709ede8a0148f1a7b8"}, - {file = "torch-2.2.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:08f53ccc38c49d839bc703ea1b20769cc8a429e0c4b20b56921a9f64949bf325"}, - {file = "torch-2.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:93bffe3779965a71dab25fc29787538c37c5d54298fd2f2369e372b6fb137d41"}, - {file = "torch-2.2.0-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:c17ec323da778efe8dad49d8fb534381479ca37af1bfc58efdbb8607a9d263a3"}, - {file = "torch-2.2.0-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:c02685118008834e878f676f81eab3a952b7936fa31f474ef8a5ff4b5c78b36d"}, - {file = "torch-2.2.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:d9f39d6f53cec240a0e3baa82cb697593340f9d4554cee6d3d6ca07925c2fac0"}, - {file = "torch-2.2.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:51770c065206250dc1222ea7c0eff3f88ab317d3e931cca2aee461b85fbc2472"}, - {file = "torch-2.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:008e4c6ad703de55af760c73bf937ecdd61a109f9b08f2bbb9c17e7c7017f194"}, - {file = "torch-2.2.0-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:de8680472dd14e316f42ceef2a18a301461a9058cd6e99a1f1b20f78f11412f1"}, - {file = "torch-2.2.0-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:99e1dcecb488e3fd25bcaac56e48cdb3539842904bdc8588b0b255fde03a254c"}, + {file = "torch-2.2.1-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:8d3bad336dd2c93c6bcb3268e8e9876185bda50ebde325ef211fb565c7d15273"}, + {file = "torch-2.2.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:5297f13370fdaca05959134b26a06a7f232ae254bf2e11a50eddec62525c9006"}, + {file = "torch-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:5f5dee8433798888ca1415055f5e3faf28a3bad660e4c29e1014acd3275ab11a"}, + {file = "torch-2.2.1-cp310-none-macosx_10_9_x86_64.whl", hash = "sha256:b6d78338acabf1fb2e88bf4559d837d30230cf9c3e4337261f4d83200df1fcbe"}, + {file = "torch-2.2.1-cp310-none-macosx_11_0_arm64.whl", hash = "sha256:6ab3ea2e29d1aac962e905142bbe50943758f55292f1b4fdfb6f4792aae3323e"}, + {file = "torch-2.2.1-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:d86664ec85902967d902e78272e97d1aff1d331f7619d398d3ffab1c9b8e9157"}, + {file = "torch-2.2.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:d6227060f268894f92c61af0a44c0d8212e19cb98d05c20141c73312d923bc0a"}, + {file = "torch-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:77e990af75fb1675490deb374d36e726f84732cd5677d16f19124934b2409ce9"}, + {file = "torch-2.2.1-cp311-none-macosx_10_9_x86_64.whl", hash = "sha256:46085e328d9b738c261f470231e987930f4cc9472d9ffb7087c7a1343826ac51"}, + {file = "torch-2.2.1-cp311-none-macosx_11_0_arm64.whl", hash = "sha256:2d9e7e5ecbb002257cf98fae13003abbd620196c35f85c9e34c2adfb961321ec"}, + {file = "torch-2.2.1-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:ada53aebede1c89570e56861b08d12ba4518a1f8b82d467c32665ec4d1f4b3c8"}, + {file = "torch-2.2.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:be21d4c41ecebed9e99430dac87de1439a8c7882faf23bba7fea3fea7b906ac1"}, + {file = "torch-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:79848f46196750367dcdf1d2132b722180b9d889571e14d579ae82d2f50596c5"}, + {file = "torch-2.2.1-cp312-none-macosx_10_9_x86_64.whl", hash = "sha256:7ee804847be6be0032fbd2d1e6742fea2814c92bebccb177f0d3b8e92b2d2b18"}, + {file = "torch-2.2.1-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:84b2fb322ab091039fdfe74e17442ff046b258eb5e513a28093152c5b07325a7"}, + {file = "torch-2.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5c0c83aa7d94569997f1f474595e808072d80b04d34912ce6f1a0e1c24b0c12a"}, + {file = "torch-2.2.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:91a1b598055ba06b2c386415d2e7f6ac818545e94c5def597a74754940188513"}, + {file = "torch-2.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:8f93ddf3001ecec16568390b507652644a3a103baa72de3ad3b9c530e3277098"}, + {file = "torch-2.2.1-cp38-none-macosx_10_9_x86_64.whl", hash = "sha256:0e8bdd4c77ac2584f33ee14c6cd3b12767b4da508ec4eed109520be7212d1069"}, + {file = "torch-2.2.1-cp38-none-macosx_11_0_arm64.whl", hash = "sha256:6a21bcd7076677c97ca7db7506d683e4e9db137e8420eb4a68fb67c3668232a7"}, + {file = "torch-2.2.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f1b90ac61f862634039265cd0f746cc9879feee03ff962c803486301b778714b"}, + {file = "torch-2.2.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:ed9e29eb94cd493b36bca9cb0b1fd7f06a0688215ad1e4b3ab4931726e0ec092"}, + {file = "torch-2.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:c47bc25744c743f3835831a20efdcfd60aeb7c3f9804a213f61e45803d16c2a5"}, + {file = "torch-2.2.1-cp39-none-macosx_10_9_x86_64.whl", hash = "sha256:0952549bcb43448c8d860d5e3e947dd18cbab491b14638e21750cb3090d5ad3e"}, + {file = "torch-2.2.1-cp39-none-macosx_11_0_arm64.whl", hash = "sha256:26bd2272ec46fc62dcf7d24b2fb284d44fcb7be9d529ebf336b9860350d674ed"}, ] [package.dependencies] @@ -4374,7 +4347,7 @@ nvidia-cusparse-cu12 = {version = "12.1.0.106", markers = "platform_system == \" nvidia-nccl-cu12 = {version = "2.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} nvidia-nvtx-cu12 = {version = "12.1.105", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} sympy = "*" -triton = {version = "2.2.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\""} +triton = {version = "2.2.0", markers = "platform_system == \"Linux\" and platform_machine == \"x86_64\" and python_version < \"3.12\""} typing-extensions = ">=4.8.0" [package.extras] @@ -4417,13 +4390,13 @@ tqdm = ">4.64" [[package]] name = "transformers" -version = "4.37.2" +version = "4.38.2" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = false python-versions = ">=3.8.0" files = [ - {file = "transformers-4.37.2-py3-none-any.whl", hash = "sha256:595a8b12a1fcc4ad0ced49ce206c58e17be68c85d7aee3d7546d04a32c910d2e"}, - {file = "transformers-4.37.2.tar.gz", hash = "sha256:f307082ae5d528b8480611a4879a4a11651012d0e9aaea3f6cf17219ffd95542"}, + {file = "transformers-4.38.2-py3-none-any.whl", hash = "sha256:c4029cb9f01b3dd335e52f364c52d2b37c65b4c78e02e6a08b1919c5c928573e"}, + {file = "transformers-4.38.2.tar.gz", hash = "sha256:c5fc7ad682b8a50a48b2a4c05d4ea2de5567adb1bdd00053619dbe5960857dd5"}, ] [package.dependencies] @@ -4440,16 +4413,16 @@ tqdm = ">=4.27" [package.extras] accelerate = ["accelerate (>=0.21.0)"] -agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch (>=1.11,!=1.12.0)"] -all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.11,!=1.12.0)", "torchaudio", "torchvision"] +agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"] +all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.14,<0.19)", "torch", "torchaudio", "torchvision"] audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] codecarbon = ["codecarbon (==1.2.0)"] deepspeed = ["accelerate (>=0.21.0)", "deepspeed (>=0.9.3)"] -deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic (<2)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] -dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic (<2)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.11,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic (<2)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.14,<0.19)", "urllib3 (<2.0.0)"] -dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic (<2)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.11,!=1.12.0)", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -docs = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "hf-doc-builder", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.14,<0.19)", "torch (>=1.11,!=1.12.0)", "torchaudio", "torchvision"] +deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.21.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] +dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "decord (==0.6.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm", "tokenizers (>=0.14,<0.19)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "nltk", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.14,<0.19)", "urllib3 (<2.0.0)"] +dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "hf-doc-builder", "hf-doc-builder (>=0.3.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "librosa", "nltk", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm", "tokenizers (>=0.14,<0.19)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +docs = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.21.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "decord (==0.6.0)", "flax (>=0.4.1,<=0.7.0)", "hf-doc-builder", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm", "tokenizers (>=0.14,<0.19)", "torch", "torchaudio", "torchvision"] docs-specific = ["hf-doc-builder"] flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)"] flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] @@ -4466,20 +4439,20 @@ ray = ["ray[tune] (>=2.7.0)"] retrieval = ["datasets (!=2.5.0)", "faiss-cpu"] sagemaker = ["sagemaker (>=2.31.0)"] sentencepiece = ["protobuf", "sentencepiece (>=0.1.91,!=0.1.92)"] -serving = ["fastapi", "pydantic (<2)", "starlette", "uvicorn"] +serving = ["fastapi", "pydantic", "starlette", "uvicorn"] sigopt = ["sigopt"] sklearn = ["scikit-learn"] speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] -testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "parameterized", "protobuf", "psutil", "pydantic (<2)", "pytest (>=7.2.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "tensorboard", "timeout-decorator"] +testing = ["GitPython (<3.1.19)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "hf-doc-builder (>=0.3.0)", "nltk", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.1.5)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "tensorboard", "timeout-decorator"] tf = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] tf-cpu = ["keras-nlp (>=0.3.1)", "onnxconverter-common", "tensorflow-cpu (>=2.6,<2.16)", "tensorflow-text (<2.16)", "tf2onnx"] tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] timm = ["timm"] tokenizers = ["tokenizers (>=0.14,<0.19)"] -torch = ["accelerate (>=0.21.0)", "torch (>=1.11,!=1.12.0)"] +torch = ["accelerate (>=0.21.0)", "torch"] torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] torch-vision = ["Pillow (>=10.0.1,<=15.0)", "torchvision"] -torchhub = ["filelock", "huggingface-hub (>=0.19.3,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.14,<0.19)", "torch (>=1.11,!=1.12.0)", "tqdm (>=4.27)"] +torchhub = ["filelock", "huggingface-hub (>=0.19.3,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.14,<0.19)", "torch", "tqdm (>=4.27)"] video = ["av (==9.2.0)", "decord (==0.6.0)"] vision = ["Pillow (>=10.0.1,<=15.0)"] @@ -4529,13 +4502,13 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6. [[package]] name = "typing-extensions" -version = "4.9.0" +version = "4.10.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, - {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, + {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, + {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, ] [[package]] @@ -5148,4 +5121,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = ">=3.10,<4.0" -content-hash = "db482d7b3917ef31d8e1b49e7fc860e2b40e10ab9e8f0a536e9fab27c7bd2261" +content-hash = "9708b9f9bf3739d1751049a181df69fb71c360505397bf63478878fe79aea88d" diff --git a/pyproject.toml b/pyproject.toml index 078dc552..25741d12 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "poetry.masonry.api" [tool.poetry] name = "talemate" -version = "0.20.0" +version = "0.21.0" description = "AI-backed roleplay and narrative tools" authors = ["FinalWombat"] license = "GNU Affero General Public License v3.0" @@ -39,6 +39,7 @@ thefuzz = ">=0.20.0" tiktoken = ">=0.5.1" nltk = ">=3.8.1" huggingface-hub = ">=0.20.2" +anthropic = ">=0.19.1" # ChromaDB chromadb = ">=0.4.17,<1" diff --git a/scenes/simulation-suite/templates/computer.jinja2 b/scenes/simulation-suite/templates/computer.jinja2 index 1925fc4c..81156786 100644 --- a/scenes/simulation-suite/templates/computer.jinja2 +++ b/scenes/simulation-suite/templates/computer.jinja2 @@ -20,6 +20,8 @@ You must at least call one of the following functions: - end_simulation - answer_question +`add_ai_character` and `change_ai_character` are exclusive if they are targeting the same character. + Set the player persona at the beginning of a new simulation or if the player requests a change. Only end the simulation if the player requests it explicitly. diff --git a/scenes/simulation-suite/templates/instructions.jinja2 b/scenes/simulation-suite/templates/instructions.jinja2 index 6a66548e..9d4e59b4 100644 --- a/scenes/simulation-suite/templates/instructions.jinja2 +++ b/scenes/simulation-suite/templates/instructions.jinja2 @@ -126,7 +126,7 @@ {% set _ = game_state.set_var("instr.has_issued_instructions", "yes", commit=False) %} {% set _ = emit_status("busy", "Simulation suite altering environment.", as_scene_message=True) %} {% set update_world_state = True %} - {% set _ = agent_action("narrator", "action_to_narration", action_name="progress_story", narrative_direction="The computer calls the following functions:\n"+processed.join("\n")+"\nand the simulation adjusts the environment according to the user's wishes. Write the narrative that describes the changes.", emit_message=True) %} + {% set _ = agent_action("narrator", "action_to_narration", action_name="progress_story", narrative_direction="The computer calls the following functions:\n"+processed.join("\n")+"\nand the simulation adjusts the environment according to the user's wishes.\n\nWrite the narrative that describes the changes to the player in the context of the simulation starting up.", emit_message=True) %} {% endif %} {% elif not game_state.has_var("instr.simulation_started") %} diff --git a/src/talemate/__init__.py b/src/talemate/__init__.py index 526ac5f9..4c8fa1d1 100644 --- a/src/talemate/__init__.py +++ b/src/talemate/__init__.py @@ -2,4 +2,4 @@ from .agents import Agent from .client import TextGeneratorWebuiClient from .tale_mate import * -VERSION = "0.20.0" +VERSION = "0.21.0" diff --git a/src/talemate/agents/conversation.py b/src/talemate/agents/conversation.py index 4ab6ec6f..aa222bd7 100644 --- a/src/talemate/agents/conversation.py +++ b/src/talemate/agents/conversation.py @@ -78,9 +78,18 @@ class ConversationAgent(Agent): self.actions = { "generation_override": AgentAction( enabled=True, - label="Generation Override", - description="Override generation parameters", + label="Generation Settings", config={ + "format": AgentActionConfig( + type="text", + label="Format", + description="The format of the dialogue, as seen by the AI.", + choices=[ + {"label": "Movie Script", "value": "movie_script"}, + {"label": "Chat (legacy)", "value": "chat"}, + ], + value="chat", + ), "length": AgentActionConfig( type="number", label="Generation Length (tokens)", @@ -166,6 +175,12 @@ class ConversationAgent(Agent): ), } + @property + def conversation_format(self): + if self.actions["generation_override"].enabled: + return self.actions["generation_override"].config["format"].value + return "movie_script" + def connect(self, scene): super().connect(scene) talemate.emit.async_signals.get("game_loop").connect(self.on_game_loop) @@ -605,14 +620,20 @@ class ConversationAgent(Agent): result = result.replace(" :", ":") - total_result = total_result.split("#")[0] + total_result = total_result.split("#")[0].strip() + + # movie script format + # {uppercase character name} + # {dialogue} + total_result = total_result.replace(f"{character.name.upper()}\n", f"") + + # chat format + # {character name}: {dialogue} + total_result = total_result.replace(f"{character.name}:", "") # Removes partial sentence at the end total_result = util.clean_dialogue(total_result, main_name=character.name) - # Remove "{character.name}:" - all occurences - total_result = total_result.replace(f"{character.name}:", "") - # Check if total_result starts with character name, if not, prepend it if not total_result.startswith(character.name): total_result = f"{character.name}: {total_result}" diff --git a/src/talemate/client/__init__.py b/src/talemate/client/__init__.py index e29c7ebd..e48aaaa8 100644 --- a/src/talemate/client/__init__.py +++ b/src/talemate/client/__init__.py @@ -3,6 +3,8 @@ import os import talemate.client.runpod from talemate.client.lmstudio import LMStudioClient from talemate.client.openai import OpenAIClient +from talemate.client.mistral import MistralAIClient +from talemate.client.anthropic import AnthropicClient from talemate.client.openai_compat import OpenAICompatibleClient from talemate.client.registry import CLIENT_CLASSES, get_client_class, register from talemate.client.textgenwebui import TextGeneratorWebuiClient diff --git a/src/talemate/client/anthropic.py b/src/talemate/client/anthropic.py new file mode 100644 index 00000000..8f658195 --- /dev/null +++ b/src/talemate/client/anthropic.py @@ -0,0 +1,224 @@ +import pydantic +import structlog +from anthropic import AsyncAnthropic, PermissionDeniedError + +from talemate.client.base import ClientBase, ErrorAction +from talemate.client.registry import register +from talemate.config import load_config +from talemate.emit import emit +from talemate.emit.signals import handlers + +__all__ = [ + "AnthropicClient", +] +log = structlog.get_logger("talemate") + +# Edit this to add new models / remove old models +SUPPORTED_MODELS = [ + "claude-3-sonnet-20240229", + "claude-3-opus-20240229", +] + + +class Defaults(pydantic.BaseModel): + max_token_length: int = 16384 + model: str = "claude-3-sonnet-20240229" + + +@register() +class AnthropicClient(ClientBase): + """ + Anthropic client for generating text. + """ + + client_type = "anthropic" + conversation_retries = 0 + auto_break_repetition_enabled = False + # TODO: make this configurable? + decensor_enabled = False + + class Meta(ClientBase.Meta): + name_prefix: str = "Anthropic" + title: str = "Anthropic" + manual_model: bool = True + manual_model_choices: list[str] = SUPPORTED_MODELS + requires_prompt_template: bool = False + defaults: Defaults = Defaults() + + def __init__(self, model="claude-3-sonnet-20240229", **kwargs): + self.model_name = model + self.api_key_status = None + self.config = load_config() + super().__init__(**kwargs) + + handlers["config_saved"].connect(self.on_config_saved) + + @property + def anthropic_api_key(self): + return self.config.get("anthropic", {}).get("api_key") + + def emit_status(self, processing: bool = None): + error_action = None + if processing is not None: + self.processing = processing + + if self.anthropic_api_key: + status = "busy" if self.processing else "idle" + model_name = self.model_name + else: + status = "error" + model_name = "No API key set" + error_action = ErrorAction( + title="Set API Key", + action_name="openAppConfig", + icon="mdi-key-variant", + arguments=[ + "application", + "anthropic_api", + ], + ) + + if not self.model_name: + status = "error" + model_name = "No model loaded" + + self.current_status = status + + emit( + "client_status", + message=self.client_type, + id=self.name, + details=model_name, + status=status, + data={ + "error_action": error_action.model_dump() if error_action else None, + "meta": self.Meta().model_dump(), + }, + ) + + def set_client(self, max_token_length: int = None): + if not self.anthropic_api_key: + self.client = AsyncAnthropic(api_key="sk-1111") + log.error("No anthropic API key set") + if self.api_key_status: + self.api_key_status = False + emit("request_client_status") + emit("request_agent_status") + return + + if not self.model_name: + self.model_name = "claude-3-opus-20240229" + + if max_token_length and not isinstance(max_token_length, int): + max_token_length = int(max_token_length) + + model = self.model_name + + self.client = AsyncAnthropic(api_key=self.anthropic_api_key) + self.max_token_length = max_token_length or 16384 + + if not self.api_key_status: + if self.api_key_status is False: + emit("request_client_status") + emit("request_agent_status") + self.api_key_status = True + + log.info( + "anthropic set client", + max_token_length=self.max_token_length, + provided_max_token_length=max_token_length, + model=model, + ) + + def reconfigure(self, **kwargs): + if kwargs.get("model"): + self.model_name = kwargs["model"] + self.set_client(kwargs.get("max_token_length")) + + def on_config_saved(self, event): + config = event.data + self.config = config + self.set_client(max_token_length=self.max_token_length) + + def response_tokens(self, response: str): + return response.usage.output_tokens + + def prompt_tokens(self, response: str): + return response.usage.input_tokens + + async def status(self): + self.emit_status() + + def prompt_template(self, system_message: str, prompt: str): + if "<|BOT|>" in prompt: + _, right = prompt.split("<|BOT|>", 1) + if right: + prompt = prompt.replace("<|BOT|>", "\nStart your response with: ") + else: + prompt = prompt.replace("<|BOT|>", "") + + return prompt + + def tune_prompt_parameters(self, parameters: dict, kind: str): + super().tune_prompt_parameters(parameters, kind) + keys = list(parameters.keys()) + valid_keys = ["temperature", "top_p", "max_tokens"] + for key in keys: + if key not in valid_keys: + del parameters[key] + + async def generate(self, prompt: str, parameters: dict, kind: str): + """ + Generates text from the given prompt and parameters. + """ + + if not self.anthropic_api_key: + raise Exception("No anthropic API key set") + + right = None + expected_response = None + try: + _, right = prompt.split("\nStart your response with: ") + expected_response = right.strip() + except (IndexError, ValueError): + pass + + human_message = {"role": "user", "content": prompt.strip()} + system_message = self.get_system_message(kind) + + self.log.debug( + "generate", + prompt=prompt[:128] + " ...", + parameters=parameters, + system_message=system_message, + ) + + try: + response = await self.client.messages.create( + model=self.model_name, + system=system_message, + messages=[human_message], + **parameters, + ) + + self._returned_prompt_tokens = self.prompt_tokens(response) + self._returned_response_tokens = self.response_tokens(response) + + log.debug("generated response", response=response.content) + + response = response.content[0].text + + if expected_response and expected_response.startswith("{"): + if response.startswith("```json") and response.endswith("```"): + response = response[7:-3].strip() + + if right and response.startswith(right): + response = response[len(right) :].strip() + + return response + except PermissionDeniedError as e: + self.log.error("generate error", e=e) + emit("status", message="anthropic API: Permission Denied", status="error") + return "" + except Exception as e: + raise diff --git a/src/talemate/client/base.py b/src/talemate/client/base.py index f17ce1ee..7d8aee25 100644 --- a/src/talemate/client/base.py +++ b/src/talemate/client/base.py @@ -363,6 +363,11 @@ class ClientBase: f"{character}:" for character in conversation_context["other_characters"] ] + dialog_stopping_strings += [ + f"{character.upper()}\n" + for character in conversation_context["other_characters"] + ] + if "extra_stopping_strings" in parameters: parameters["extra_stopping_strings"] += dialog_stopping_strings else: @@ -405,6 +410,9 @@ class ClientBase: """ try: + self._returned_prompt_tokens = None + self._returned_response_tokens = None + self.emit_status(processing=True) await self.status() @@ -452,8 +460,9 @@ class ClientBase: kind=kind, prompt=finalized_prompt, response=response, - prompt_tokens=token_length, - response_tokens=self.count_tokens(response), + prompt_tokens=self._returned_prompt_tokens or token_length, + response_tokens=self._returned_response_tokens + or self.count_tokens(response), agent_stack=agent_context.agent_stack if agent_context else [], client_name=self.name, client_type=self.client_type, @@ -465,6 +474,8 @@ class ClientBase: return response finally: self.emit_status(processing=False) + self._returned_prompt_tokens = None + self._returned_response_tokens = None async def auto_break_repetition( self, diff --git a/src/talemate/client/mistral.py b/src/talemate/client/mistral.py new file mode 100644 index 00000000..fd85c99e --- /dev/null +++ b/src/talemate/client/mistral.py @@ -0,0 +1,232 @@ +import json + +import pydantic +import structlog +import tiktoken +from openai import AsyncOpenAI, PermissionDeniedError + +from talemate.client.base import ClientBase, ErrorAction +from talemate.client.registry import register +from talemate.config import load_config +from talemate.emit import emit +from talemate.emit.signals import handlers + +__all__ = [ + "MistralAIClient", +] +log = structlog.get_logger("talemate") + +# Edit this to add new models / remove old models +SUPPORTED_MODELS = [ + "open-mistral-7b", + "open-mixtral-8x7b", + "mistral-small-latest", + "mistral-medium-latest", + "mistral-large-latest", +] + + +class Defaults(pydantic.BaseModel): + max_token_length: int = 16384 + model: str = "open-mixtral-8x7b" + + +@register() +class MistralAIClient(ClientBase): + """ + OpenAI client for generating text. + """ + + client_type = "mistral" + conversation_retries = 0 + auto_break_repetition_enabled = False + # TODO: make this configurable? + decensor_enabled = False + + class Meta(ClientBase.Meta): + name_prefix: str = "MistralAI" + title: str = "MistralAI" + manual_model: bool = True + manual_model_choices: list[str] = SUPPORTED_MODELS + requires_prompt_template: bool = False + defaults: Defaults = Defaults() + + def __init__(self, model="open-mixtral-8x7b", **kwargs): + self.model_name = model + self.api_key_status = None + self.config = load_config() + super().__init__(**kwargs) + + handlers["config_saved"].connect(self.on_config_saved) + + @property + def mistralai_api_key(self): + return self.config.get("mistralai", {}).get("api_key") + + def emit_status(self, processing: bool = None): + error_action = None + if processing is not None: + self.processing = processing + + if self.mistralai_api_key: + status = "busy" if self.processing else "idle" + model_name = self.model_name + else: + status = "error" + model_name = "No API key set" + error_action = ErrorAction( + title="Set API Key", + action_name="openAppConfig", + icon="mdi-key-variant", + arguments=[ + "application", + "mistralai_api", + ], + ) + + if not self.model_name: + status = "error" + model_name = "No model loaded" + + self.current_status = status + + emit( + "client_status", + message=self.client_type, + id=self.name, + details=model_name, + status=status, + data={ + "error_action": error_action.model_dump() if error_action else None, + "meta": self.Meta().model_dump(), + }, + ) + + def set_client(self, max_token_length: int = None): + if not self.mistralai_api_key: + self.client = AsyncOpenAI(api_key="sk-1111") + log.error("No mistral.ai API key set") + if self.api_key_status: + self.api_key_status = False + emit("request_client_status") + emit("request_agent_status") + return + + if not self.model_name: + self.model_name = "open-mixtral-8x7b" + + if max_token_length and not isinstance(max_token_length, int): + max_token_length = int(max_token_length) + + model = self.model_name + + self.client = AsyncOpenAI( + api_key=self.mistralai_api_key, base_url="https://api.mistral.ai/v1/" + ) + self.max_token_length = max_token_length or 16384 + + if not self.api_key_status: + if self.api_key_status is False: + emit("request_client_status") + emit("request_agent_status") + self.api_key_status = True + + log.info( + "mistral.ai set client", + max_token_length=self.max_token_length, + provided_max_token_length=max_token_length, + model=model, + ) + + def reconfigure(self, **kwargs): + if kwargs.get("model"): + self.model_name = kwargs["model"] + self.set_client(kwargs.get("max_token_length")) + + def on_config_saved(self, event): + config = event.data + self.config = config + self.set_client(max_token_length=self.max_token_length) + + def response_tokens(self, response: str): + return response.usage.completion_tokens + + def prompt_tokens(self, response: str): + return response.usage.prompt_tokens + + async def status(self): + self.emit_status() + + def prompt_template(self, system_message: str, prompt: str): + if "<|BOT|>" in prompt: + _, right = prompt.split("<|BOT|>", 1) + if right: + prompt = prompt.replace("<|BOT|>", "\nStart your response with: ") + else: + prompt = prompt.replace("<|BOT|>", "") + + return prompt + + def tune_prompt_parameters(self, parameters: dict, kind: str): + super().tune_prompt_parameters(parameters, kind) + keys = list(parameters.keys()) + valid_keys = ["temperature", "top_p", "max_tokens"] + for key in keys: + if key not in valid_keys: + del parameters[key] + + async def generate(self, prompt: str, parameters: dict, kind: str): + """ + Generates text from the given prompt and parameters. + """ + + if not self.mistralai_api_key: + raise Exception("No mistral.ai API key set") + + right = None + expected_response = None + try: + _, right = prompt.split("\nStart your response with: ") + expected_response = right.strip() + except (IndexError, ValueError): + pass + + human_message = {"role": "user", "content": prompt.strip()} + system_message = {"role": "system", "content": self.get_system_message(kind)} + + self.log.debug( + "generate", + prompt=prompt[:128] + " ...", + parameters=parameters, + system_message=system_message, + ) + + try: + response = await self.client.chat.completions.create( + model=self.model_name, + messages=[system_message, human_message], + **parameters, + ) + + self._returned_prompt_tokens = self.prompt_tokens(response) + self._returned_response_tokens = self.response_tokens(response) + + response = response.choices[0].message.content + + # older models don't support json_object response coersion + # and often like to return the response wrapped in ```json + # so we strip that out if the expected response is a json object + if expected_response and expected_response.startswith("{"): + if response.startswith("```json") and response.endswith("```"): + response = response[7:-3].strip() + + if right and response.startswith(right): + response = response[len(right) :].strip() + + return response + except PermissionDeniedError as e: + self.log.error("generate error", e=e) + emit("status", message="mistral.ai API: Permission Denied", status="error") + return "" + except Exception as e: + raise diff --git a/src/talemate/client/openai_compat.py b/src/talemate/client/openai_compat.py index e82ad3e9..4a15e343 100644 --- a/src/talemate/client/openai_compat.py +++ b/src/talemate/client/openai_compat.py @@ -1,10 +1,12 @@ import pydantic import structlog +import urllib from openai import AsyncOpenAI, NotFoundError, PermissionDeniedError -from talemate.client.base import ClientBase +from talemate.client.base import ClientBase, ExtraField from talemate.client.registry import register from talemate.emit import emit +from talemate.config import Client as BaseClientConfig log = structlog.get_logger("talemate.client.openai_compat") @@ -16,12 +18,18 @@ class Defaults(pydantic.BaseModel): api_key: str = "" max_token_length: int = 4096 model: str = "" + api_handles_prompt_template: bool = False + + +class ClientConfig(BaseClientConfig): + api_handles_prompt_template: bool = False @register() class OpenAICompatibleClient(ClientBase): client_type = "openai_compat" conversation_retries = 5 + config_cls = ClientConfig class Meta(ClientBase.Meta): title: str = "OpenAI Compatible API" @@ -30,10 +38,22 @@ class OpenAICompatibleClient(ClientBase): enable_api_auth: bool = True manual_model: bool = True defaults: Defaults = Defaults() + extra_fields: dict[str, ExtraField] = { + "api_handles_prompt_template": ExtraField( + name="api_handles_prompt_template", + type="bool", + label="API Handles Prompt Template", + required=False, + description="The API handles the prompt template, meaning your choice in the UI for the prompt template below will be ignored.", + ) + } - def __init__(self, model=None, api_key=None, **kwargs): + def __init__( + self, model=None, api_key=None, api_handles_prompt_template=False, **kwargs + ): self.model_name = model self.api_key = api_key + self.api_handles_prompt_template = api_handles_prompt_template super().__init__(**kwargs) @property @@ -42,11 +62,10 @@ class OpenAICompatibleClient(ClientBase): def set_client(self, **kwargs): self.api_key = kwargs.get("api_key", self.api_key) - + self.api_handles_prompt_template = kwargs.get( + "api_handles_prompt_template", self.api_handles_prompt_template + ) url = self.api_url - if not url.endswith("/v1"): - url = url + "/v1" - self.client = AsyncOpenAI(base_url=url, api_key=self.api_key) self.model_name = ( kwargs.get("model") or kwargs.get("model_name") or self.model_name @@ -63,26 +82,27 @@ class OpenAICompatibleClient(ClientBase): if key not in valid_keys: del parameters[key] + def prompt_template(self, system_message: str, prompt: str): + + log.debug( + "IS API HANDLING PROMPT TEMPLATE", + api_handles_prompt_template=self.api_handles_prompt_template, + ) + + if not self.api_handles_prompt_template: + return super().prompt_template(system_message, prompt) + + if "<|BOT|>" in prompt: + _, right = prompt.split("<|BOT|>", 1) + if right: + prompt = prompt.replace("<|BOT|>", "\nStart your response with: ") + else: + prompt = prompt.replace("<|BOT|>", "") + + return prompt + async def get_model_name(self): - try: - model_name = await super().get_model_name() - except NotFoundError as e: - # api does not implement model listing - return self.model_name - except Exception as e: - self.log.error("get_model_name error", e=e) - return self.model_name - - # model name may be a file path, so we need to extract the model name - # the path could be windows or linux so it needs to handle both backslash and forward slash - - is_filepath = "/" in model_name - is_filepath_windows = "\\" in model_name - - if is_filepath or is_filepath_windows: - model_name = model_name.replace("\\", "/").split("/")[-1] - - return model_name + return self.model_name async def generate(self, prompt: str, parameters: dict, kind: str): """ @@ -120,6 +140,8 @@ class OpenAICompatibleClient(ClientBase): ) if "api_key" in kwargs: self.api_auth = kwargs["api_key"] + if "api_handles_prompt_template" in kwargs: + self.api_handles_prompt_template = kwargs["api_handles_prompt_template"] log.warning("reconfigure", kwargs=kwargs) diff --git a/src/talemate/config.py b/src/talemate/config.py index b8c47d97..da1bbd3b 100644 --- a/src/talemate/config.py +++ b/src/talemate/config.py @@ -1,6 +1,8 @@ import datetime import os -from typing import TYPE_CHECKING, ClassVar, Dict, Optional, TypeVar, Union +import copy +from typing import TYPE_CHECKING, ClassVar, Dict, Optional, TypeVar, Union, Any +from typing_extensions import Annotated import pydantic import structlog @@ -81,6 +83,7 @@ class GamePlayerCharacter(BaseModel): class General(BaseModel): auto_save: bool = True auto_progress: bool = True + max_backscroll: int = 512 class StateReinforcementTemplate(BaseModel): @@ -129,6 +132,14 @@ class OpenAIConfig(BaseModel): api_key: Union[str, None] = None +class MistralAIConfig(BaseModel): + api_key: Union[str, None] = None + + +class AnthropicConfig(BaseModel): + api_key: Union[str, None] = None + + class RunPodConfig(BaseModel): api_key: Union[str, None] = None @@ -261,8 +272,43 @@ class RecentScenes(BaseModel): self.scenes = [s for s in self.scenes if os.path.exists(s.path)] +def validate_client_type( + v: Any, + handler: pydantic.ValidatorFunctionWrapHandler, + info: pydantic.ValidationInfo, +): + # clients can specify a custom config model in + # client_cls.config_cls so we need to convert the + # client config to the correct model + + # v is dict + if isinstance(v, dict): + client_cls = get_client_class(v.get("type")) + if client_cls: + config_cls = getattr(client_cls, "config_cls", None) + if config_cls: + return config_cls(**v) + else: + return handler(v) + # v is Client instance + elif isinstance(v, Client): + client_cls = get_client_class(v.type) + if client_cls: + config_cls = getattr(client_cls, "config_cls", None) + if config_cls: + return config_cls(**v.model_dump()) + else: + return handler(v) + + +AnnotatedClient = Annotated[ + ClientType, + pydantic.WrapValidator(validate_client_type), +] + + class Config(BaseModel): - clients: Dict[str, ClientType] = {} + clients: Dict[str, AnnotatedClient] = {} game: Game @@ -272,6 +318,10 @@ class Config(BaseModel): openai: OpenAIConfig = OpenAIConfig() + mistralai: MistralAIConfig = MistralAIConfig() + + anthropic: AnthropicConfig = AnthropicConfig() + runpod: RunPodConfig = RunPodConfig() chromadb: ChromaDB = ChromaDB() @@ -301,19 +351,6 @@ class SceneAssetUpload(BaseModel): content: str = None -def prepare_client_config(clients: dict) -> dict: - # client's can specify a custom config model in - # client_cls.config_cls so we need to convert the - # client config to the correct model - - for client_name, client_config in clients.items(): - client_cls = get_client_class(client_config.get("type")) - if client_cls: - config_cls = getattr(client_cls, "config_cls", None) - if config_cls: - clients[client_name] = config_cls(**client_config) - - def load_config( file_path: str = "./config.yaml", as_model: bool = False ) -> Union[dict, Config]: @@ -323,12 +360,10 @@ def load_config( Should cache the config and only reload if the file modification time has changed since the last load """ - with open(file_path, "r") as file: config_data = yaml.safe_load(file) try: - prepare_client_config(config_data.get("clients", {})) config = Config(**config_data) config.recent_scenes.clean() except pydantic.ValidationError as e: @@ -354,7 +389,6 @@ def save_config(config, file_path: str = "./config.yaml"): elif isinstance(config, dict): # validate try: - prepare_client_config(config.get("clients", {})) config = Config(**config).model_dump(exclude_none=True) except pydantic.ValidationError as e: log.error("config validation", error=e) diff --git a/src/talemate/prompts/templates/conversation/dialogue.jinja2 b/src/talemate/prompts/templates/conversation/dialogue.jinja2 index 90ba951d..9ef0d777 100644 --- a/src/talemate/prompts/templates/conversation/dialogue.jinja2 +++ b/src/talemate/prompts/templates/conversation/dialogue.jinja2 @@ -37,9 +37,20 @@ Based on {{ talking_character.name}}'s example dialogue style, create a continua You may chose to have {{ talking_character.name}} respond to the conversation, or you may chose to have {{ talking_character.name}} perform a new action that is in line with {{ talking_character.name}}'s character. +{% if scene.conversation_format == "movie_script" -%} +The format is a movie script, so you should write the character's name in all caps followed by a line break and then the character's dialogue. For example: + + CHARACTER NAME + I'm so glad you're here. + +Emotions and actions should be written in italics. For example: + + CHARACTER NAME + *smiles* I'm so glad you're here. +{% else -%} Always contain actions in asterisks. For example, *{{ talking_character.name}} smiles*. Always contain dialogue in quotation marks. For example, {{ talking_character.name}}: "Hello!" - +{% endif -%} {{ extra_instructions }} {% if scene.count_character_messages(talking_character) >= 5 %}Use an informal and colloquial register with a conversational tone. Overall, {{ talking_character.name }}'s dialog is Informal, conversational, natural, and spontaneous, with a sense of immediacy. @@ -93,7 +104,7 @@ Always contain dialogue in quotation marks. For example, {{ talking_character.na {% endfor %} {% endblock -%} <|CLOSE_SECTION|> -{% if scene.count_character_messages(talking_character) < 5 %}Use an informal and colloquial register with a conversational tone. Overall, {{ talking_character.name }}'s dialog is Informal, conversational, natural, and spontaneous, with a sense of immediacy. Flesh out additional details by describing {{ talking_character.name }}'s actions and mannerisms within asterisks, e.g. *{{ talking_character.name }} smiles*. +{% if scene.count_character_messages(talking_character) < 5 %}(Use an informal and colloquial register with a conversational tone. Overall, {{ talking_character.name }}'s dialog is Informal, conversational, natural, and spontaneous, with a sense of immediacy.) {% endif -%} {% if rerun_context and rerun_context.direction -%} {% if rerun_context.method == 'replace' -%} @@ -104,4 +115,10 @@ Always contain dialogue in quotation marks. For example, {{ talking_character.na # Requested changes: {{ rerun_context.direction }} {% endif -%} {% endif -%} -{{ bot_token}}{{ talking_character.name }}:{{ partial_message }} \ No newline at end of file +{% if scene.conversation_format == 'movie_script' -%} +{{ bot_token }}{{ talking_character.name.upper() }}{% if partial_message %} +{{ partial_message }} +{% endif %} +{% else -%} +{{ bot_token }}{{ talking_character.name }}:{{ partial_message }} +{% endif -%} \ No newline at end of file diff --git a/src/talemate/prompts/templates/visual/generate-character-prompt.jinja2 b/src/talemate/prompts/templates/visual/generate-character-prompt.jinja2 index 40650179..8d3cbcfa 100644 --- a/src/talemate/prompts/templates/visual/generate-character-prompt.jinja2 +++ b/src/talemate/prompts/templates/visual/generate-character-prompt.jinja2 @@ -24,5 +24,6 @@ You must provide your answer as a comma delimited list of keywords. Keywords should be ordered: physical appearance, emotion, action, environment, color scheme. You must provide many keywords to describe the character and the environment in great detail. Your answer must be suitable as a stable-diffusion image generation prompt. +You must avoid negating of keywords, omit things entirely that aren't there. For example instead of saying "no scars", just dont include the keyword scars at all. <|CLOSE_SECTION|> {{ set_prepared_response(character.name+",")}} \ No newline at end of file diff --git a/src/talemate/scene_message.py b/src/talemate/scene_message.py index d84489a3..ac1b78ad 100644 --- a/src/talemate/scene_message.py +++ b/src/talemate/scene_message.py @@ -84,6 +84,9 @@ class SceneMessage: def unhide(self): self.hidden = False + def as_format(self, format: str) -> str: + return self.message + @dataclass class CharacterMessage(SceneMessage): @@ -105,6 +108,25 @@ class CharacterMessage(SceneMessage): def raw(self): return self.message.split(":", 1)[1].replace('"', "").replace("*", "").strip() + @property + def as_movie_script(self): + """ + Returns the dialogue line as a script dialogue line. + + Example: + {CHARACTER_NAME} + {dialogue} + """ + + message = self.message.split(":", 1)[1].replace('"', "").strip() + + return f"\n{self.character_name.upper()}\n{message}\n" + + def as_format(self, format: str) -> str: + if format == "movie_script": + return self.as_movie_script + return self.message + @dataclass class NarratorMessage(SceneMessage): @@ -127,6 +149,12 @@ class DirectorMessage(SceneMessage): return f"# Story progression instructions for {char_name}: {message}" + def as_format(self, format: str) -> str: + if format == "movie_script": + message = str(self)[2:] + return f"\n({message})\n" + return self.message + @dataclass class TimePassageMessage(SceneMessage): @@ -152,6 +180,12 @@ class ReinforcementMessage(SceneMessage): question, _ = self.source.split(":", 1) return f"# Internal notes: {question}: {self.message}" + def as_format(self, format: str) -> str: + if format == "movie_script": + message = str(self)[2:] + return f"\n({message})\n" + return self.message + MESSAGES = { "scene": SceneMessage, diff --git a/src/talemate/server/websocket_server.py b/src/talemate/server/websocket_server.py index 5de43123..44bcf367 100644 --- a/src/talemate/server/websocket_server.py +++ b/src/talemate/server/websocket_server.py @@ -219,6 +219,9 @@ class WebsocketHandler(Receiver): client.pop("status", None) client_cls = CLIENT_CLASSES.get(client["type"]) + if client.get("model") == "No API key set": + client.pop("model", None) + if not client_cls: log.error("Client type not found", client=client) continue @@ -301,7 +304,13 @@ class WebsocketHandler(Receiver): } agent_instance = instance.get_agent(name, **self.agents[name]) - agent_instance.client = self.llm_clients[client_name]["client"] + + try: + agent_instance.client = self.llm_clients[client_name]["client"] + except KeyError: + self.llm_clients[client_name]["client"] = agent_instance.client = ( + instance.get_client(client_name) + ) if agent_instance.has_toggle: self.agents[name]["enabled"] = agent["enabled"] @@ -618,9 +627,7 @@ class WebsocketHandler(Receiver): ) def request_scene_history(self): - history = [ - archived_history["text"] for archived_history in self.scene.archived_history - ] + history = [archived_history for archived_history in self.scene.archived_history] self.queue_put( { diff --git a/src/talemate/tale_mate.py b/src/talemate/tale_mate.py index a62978da..d86b13f3 100644 --- a/src/talemate/tale_mate.py +++ b/src/talemate/tale_mate.py @@ -883,6 +883,10 @@ class Scene(Emitter): def world_state_manager(self): return WorldStateManager(self) + @property + def conversation_format(self): + return self.get_helper("conversation").agent.conversation_format + def set_description(self, description: str): self.description = description @@ -1111,8 +1115,7 @@ class Scene(Emitter): "archived_history", data={ "history": [ - archived_history["text"] - for archived_history in self.archived_history + archived_history for archived_history in self.archived_history ] }, ) @@ -1337,6 +1340,8 @@ class Scene(Emitter): budget_context = int(0.5 * budget) budget_dialogue = int(0.5 * budget) + conversation_format = self.conversation_format + # collect dialogue count = 0 @@ -1358,7 +1363,7 @@ class Scene(Emitter): if count_tokens(parts_dialogue) + count_tokens(message) > budget_dialogue: break - parts_dialogue.insert(0, message) + parts_dialogue.insert(0, message.as_format(conversation_format)) # collect context, ignore where end > len(history) - count @@ -1767,10 +1772,14 @@ class Scene(Emitter): continue_scene = True self.commands = command = commands.Manager(self) + max_backscroll = ( + self.config.get("game", {}).get("general", {}).get("max_backscroll", 512) + ) + if init and self.history: # history is not empty, so we are continuing a scene # need to emit current messages - for item in self.history: + for item in self.history[-max_backscroll:]: char_name = item.split(":")[0] try: actor = self.get_character(char_name).actor diff --git a/src/talemate/util.py b/src/talemate/util.py index e89fe437..5329d5f7 100644 --- a/src/talemate/util.py +++ b/src/talemate/util.py @@ -356,13 +356,13 @@ def clean_paragraph(paragraph: str) -> str: def clean_message(message: str) -> str: message = message.strip() - message = re.sub(r"\s+", " ", message) + message = re.sub(r" +", " ", message) message = message.replace("(", "*").replace(")", "*") message = message.replace("[", "*").replace("]", "*") return message -def clean_dialogue(dialogue: str, main_name: str) -> str: +def clean_dialogue_old(dialogue: str, main_name: str) -> str: # re split by \n{not main_name}: with a max count of 1 pattern = r"\n(?!{}:).*".format(re.escape(main_name)) @@ -374,6 +374,36 @@ def clean_dialogue(dialogue: str, main_name: str) -> str: return clean_message(strip_partial_sentences(dialogue)) +def clean_dialogue(dialogue: str, main_name: str) -> str: + + cleaned = [] + + if not dialogue.startswith(main_name): + dialogue = f"{main_name}: {dialogue}" + + for line in dialogue.split("\n"): + + if not cleaned: + cleaned.append(line) + continue + + if line.startswith(f"{main_name}: "): + cleaned.append(line[len(main_name) + 2 :]) + continue + + # if line is all capitalized + # this is likely a new speaker in movie script format, and we + # bail + if line.strip().isupper(): + break + + if ":" not in line: + cleaned.append(line) + continue + + return clean_message(strip_partial_sentences("\n".join(cleaned))) + + def clean_id(name: str) -> str: """ Cleans up a id name by removing all characters that aren't a-zA-Z0-9_- diff --git a/talemate_frontend/package-lock.json b/talemate_frontend/package-lock.json index fb259e58..f90a6072 100644 --- a/talemate_frontend/package-lock.json +++ b/talemate_frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "talemate_frontend", - "version": "0.19.0", + "version": "0.21.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "talemate_frontend", - "version": "0.19.0", + "version": "0.21.0", "dependencies": { "@mdi/font": "7.4.47", "core-js": "^3.8.3", diff --git a/talemate_frontend/package.json b/talemate_frontend/package.json index 072a41dc..e57df6f1 100644 --- a/talemate_frontend/package.json +++ b/talemate_frontend/package.json @@ -1,6 +1,6 @@ { "name": "talemate_frontend", - "version": "0.20.0", + "version": "0.21.0", "private": true, "scripts": { "serve": "vue-cli-service serve", diff --git a/talemate_frontend/src/components/AppConfig.vue b/talemate_frontend/src/components/AppConfig.vue index 4d76df28..2a9823da 100644 --- a/talemate_frontend/src/components/AppConfig.vue +++ b/talemate_frontend/src/components/AppConfig.vue @@ -16,6 +16,7 @@ Creator + @@ -25,11 +26,12 @@ - - - {{ item.title }} - - + + + {{ item.icon }} + {{ item.title }} + +

@@ -88,9 +95,13 @@ Third Party APIs - - {{ item.title }} - + + + + {{ item.icon }} + {{ item.title }} + + @@ -112,6 +123,40 @@
+ +
+ + +
+ + Anthropic +
+ Configure your Anthropic API key here. You can get one from https://console.anthropic.com/settings/keys +
+
+ + + + + + +
+
@@ -130,23 +175,6 @@
- -
- - Coqui Studio -
-

Realistic, emotive text-to-speech through generative AI.

- Configure your Coqui API key here. You can get one from https://app.coqui.ai/account -
-
- - - - - - -
@@ -179,11 +207,12 @@ - - - {{ item.title }} - - + + + {{ item.icon }} + {{ item.title }} + +
@@ -248,8 +277,9 @@ export default { ], application: [ {title: 'OpenAI', icon: 'mdi-api', value: 'openai_api'}, + {title: 'mistral.ai', icon: 'mdi-api', value: 'mistralai_api'}, + {title: 'Anthropic', icon: 'mdi-api', value: 'anthropic_api'}, {title: 'ElevenLabs', icon: 'mdi-api', value: 'elevenlabs_api'}, - {title: 'Coqui Studio', icon: 'mdi-api', value: 'coqui_api'}, {title: 'RunPod', icon: 'mdi-api', value: 'runpod_api'}, ], creator: [ diff --git a/talemate_frontend/src/components/ClientModal.vue b/talemate_frontend/src/components/ClientModal.vue index 104ddb35..173a4e8d 100644 --- a/talemate_frontend/src/components/ClientModal.vue +++ b/talemate_frontend/src/components/ClientModal.vue @@ -38,14 +38,15 @@ + - - + + diff --git a/talemate_frontend/src/components/SceneHistory.vue b/talemate_frontend/src/components/SceneHistory.vue index cb23b2bf..40f88ac3 100644 --- a/talemate_frontend/src/components/SceneHistory.vue +++ b/talemate_frontend/src/components/SceneHistory.vue @@ -5,8 +5,8 @@ History - - {{ text }} + + {{ entry.ts }} {{ entry.text }} diff --git a/templates/comfyui-workflows/default-sd15.json b/templates/comfyui-workflows/default-sd15.json index 7d3195e3..74d8a23b 100644 --- a/templates/comfyui-workflows/default-sd15.json +++ b/templates/comfyui-workflows/default-sd15.json @@ -21,7 +21,7 @@ }, "4": { "inputs": { - "text": "a puppy", + "text": "", "clip": [ "1", 1 diff --git a/templates/comfyui-workflows/default-sdxl.json b/templates/comfyui-workflows/default-sdxl.json index 65d4ba94..29dad90f 100644 --- a/templates/comfyui-workflows/default-sdxl.json +++ b/templates/comfyui-workflows/default-sdxl.json @@ -21,7 +21,7 @@ }, "4": { "inputs": { - "text": "a puppy", + "text": "", "clip": [ "1", 1 diff --git a/tests/test_dialogue_cleanup.py b/tests/test_dialogue_cleanup.py index 07a82d07..ff36619d 100644 --- a/tests/test_dialogue_cleanup.py +++ b/tests/test_dialogue_cleanup.py @@ -26,11 +26,14 @@ def test_dialogue_cleanup(input, expected): @pytest.mark.parametrize("input, expected, main_name", [ ("bob: says a sentence", "bob: says a sentence", "bob"), - ("bob: says a sentence\nbob: says another sentence", "bob: says a sentence says another sentence", "bob"), + ("bob: says a sentence\nbob: says another sentence", "bob: says a sentence\nsays another sentence", "bob"), ("bob: says a sentence with a colon: to explain something", "bob: says a sentence with a colon: to explain something", "bob"), ("bob: i have a riddle for you, alice: the riddle", "bob: i have a riddle for you, alice: the riddle", "bob"), ("bob: says something\nalice: says something else", "bob: says something", "bob"), ("bob: says a sentence. then a", "bob: says a sentence.", "bob"), + ("bob: first paragraph\n\nsecond paragraph", "bob: first paragraph\n\nsecond paragraph", "bob"), + # movie script new speaker cutoff + ("bob: says a sentence\n\nALICE\nsays something else", "bob: says a sentence", "bob"), ]) def test_clean_dialogue(input, expected, main_name): others = ["alice", "charlie"]