Merge remote-tracking branch 'origin/dev' into add_cli_options_superuser
This commit is contained in:
commit
7733904378
52 changed files with 1055 additions and 526 deletions
|
|
@ -33,6 +33,7 @@ The CustomComponent class serves as the foundation for creating custom component
|
||||||
| Supported Types |
|
| Supported Types |
|
||||||
| --------------------------------------------------------- |
|
| --------------------------------------------------------- |
|
||||||
| _`str`_, _`int`_, _`float`_, _`bool`_, _`list`_, _`dict`_ |
|
| _`str`_, _`int`_, _`float`_, _`bool`_, _`list`_, _`dict`_ |
|
||||||
|
| _`langflow.field_typing.NestedDict`_ |
|
||||||
| _`langchain.chains.base.Chain`_ |
|
| _`langchain.chains.base.Chain`_ |
|
||||||
| _`langchain.PromptTemplate`_ |
|
| _`langchain.PromptTemplate`_ |
|
||||||
| _`langchain.llms.base.BaseLLM`_ |
|
| _`langchain.llms.base.BaseLLM`_ |
|
||||||
|
|
@ -44,6 +45,8 @@ The CustomComponent class serves as the foundation for creating custom component
|
||||||
| _`langchain.embeddings.base.Embeddings`_ |
|
| _`langchain.embeddings.base.Embeddings`_ |
|
||||||
| _`langchain.schema.BaseRetriever`_ |
|
| _`langchain.schema.BaseRetriever`_ |
|
||||||
|
|
||||||
|
The difference between _`dict`_ and _`langflow.field_typing.NestedDict`_ is that one adds a simple key-value pair field, while the other opens a more robust dictionary editor.
|
||||||
|
|
||||||
<Admonition type="info">
|
<Admonition type="info">
|
||||||
Unlike Langchain types, base Python types do not add a
|
Unlike Langchain types, base Python types do not add a
|
||||||
[handle](../guidelines/components) to the field by default. To add handles,
|
[handle](../guidelines/components) to the field by default. To add handles,
|
||||||
|
|
|
||||||
318
poetry.lock
generated
318
poetry.lock
generated
|
|
@ -674,76 +674,76 @@ click = "*"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "clickhouse-connect"
|
name = "clickhouse-connect"
|
||||||
version = "0.6.12"
|
version = "0.6.13"
|
||||||
description = "ClickHouse Database Core Driver for Python, Pandas, and Superset"
|
description = "ClickHouse Database Core Driver for Python, Pandas, and Superset"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "~=3.7"
|
python-versions = "~=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "clickhouse-connect-0.6.12.tar.gz", hash = "sha256:32078b9f48a57d58f12de5bc825413c84b862ee8aa2b773c38d4c3c3c9d4c614"},
|
{file = "clickhouse-connect-0.6.13.tar.gz", hash = "sha256:affec3369f486db1d17fc5447fef541a9a70df09c03e0ed4af6b328b6e6a4827"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39993b493b764fb93021cb7b93ba721872d4eaaf2e6252a52a558172b4c6e8b0"},
|
{file = "clickhouse_connect-0.6.13-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3538dd61054af1d7af712f0203265969e351ca6e21a138c5cc967a4d63bc684"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b900c09900b3ca64d77c8eeceb4eeea604c5ccb2455000cf31fd92ac28825d7d"},
|
{file = "clickhouse_connect-0.6.13-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:08eac69a47c5d5bba727a475593662d5583a44a2168cb34c7e9727b0949edf05"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da9f967ae9c7df0f5950e5f8f5433118f40bd50b9db21a7db1b1e51c4c38de64"},
|
{file = "clickhouse_connect-0.6.13-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34cad54d3af842f98db7eda9a0fd4c0201383c6e6316b3db364a5e62957d3f92"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fbb527accdc5845eab76268be15e928a8b4e931e967adf7886bdab37f5b1822"},
|
{file = "clickhouse_connect-0.6.13-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9ecd833018ae61b1b5c23f1856e63112eb5a9240e30ae79e7cd63032bcc7683"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8c2f1f0d83e59480af4f5af62e69a69152c2de5c32abcf192e4b1bac6d6546b8"},
|
{file = "clickhouse_connect-0.6.13-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52cf7b75f4c9a215d1cde4bdab079b463f75edecf311a9f34248340de8c58ab8"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f4b46a8605aebd676153f79fe8d049a0241e312bb987190fef9dee01dbefdab4"},
|
{file = "clickhouse_connect-0.6.13-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a5febb40a3220c2a3aaddaffe3cbc0c2c668dbf58d68875c5236551a43fb54f2"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a58bab7c217254c4ec0940659ab998d2d399e0ea62151e99745eba0586741d30"},
|
{file = "clickhouse_connect-0.6.13-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:71072c28ef2d1d5c41f23b898014c8c491c54a745a13a545cd18e60d44d7276e"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:25fdf56cb6ea3ab0d52688bd28eb80e72045db7584dbf272178f980aa81d63b4"},
|
{file = "clickhouse_connect-0.6.13-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:47135049bacfdb67272df3e988458fc8cb3ca31df7fd020d7c28801272f319ae"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp310-cp310-win32.whl", hash = "sha256:5fac0b3a3549cdb800d0e96901990723dc0b1e6e3dd937922ce40d64bc6c2d87"},
|
{file = "clickhouse_connect-0.6.13-cp310-cp310-win32.whl", hash = "sha256:3ad88ca2b34d330513ac8e76f74dca4c1879a6ad81f6ef331e626400c3b9ff62"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp310-cp310-win_amd64.whl", hash = "sha256:9e30634f3636249f3bed2d8e4e86bced3e0fdf3aa8dd6c7c239907b21f4ba0fd"},
|
{file = "clickhouse_connect-0.6.13-cp310-cp310-win_amd64.whl", hash = "sha256:092ddacb003a193f17ee3dbb6ac5df8397730154df95c668342e419e35dc42df"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:55bda2f883dbb5ef6967a29c47ed1c1cc7333f3d546a1722094ebf508ad378eb"},
|
{file = "clickhouse_connect-0.6.13-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e77efffc06dede8ac479678420cc5e15b2be28b73119a458766047b964d31a36"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5d739cfd3ea279634eb29242da38017e464e9186aeb8eb79ba6037408adc6bde"},
|
{file = "clickhouse_connect-0.6.13-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:39669fc21d1ab76fe6042511e424a00c7b5b731db2ff59c7a6222f15a65a77b0"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6fb5a5271a487aad3607db42f650efbaaf28c9be53ded7936c3c163855ad148"},
|
{file = "clickhouse_connect-0.6.13-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25005cf2c44bc46fa11b3e95de53830c172bf6f1cc512a2628bd62861b60777a"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdde6e9b7b5266af3f1aa0e64e2bf2d1c9a0e9f1e013a5722267160a418f14b6"},
|
{file = "clickhouse_connect-0.6.13-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0d049b3c88466db6806d9b301436ddb69024df8cb1c14e5b21fab4517b67094"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7b9a77f2e203d4ba000bfdc335548f53501334d7ecaf53b769f768cb3acef77"},
|
{file = "clickhouse_connect-0.6.13-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c329296469651124fb9787b6c060c22c05dfad1129f8e3683721cfe98b2b6574"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c6b9d637d7177ece6dfd29ba75f34209f793493b6449cfcb1ae577b98e217d24"},
|
{file = "clickhouse_connect-0.6.13-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9bb3a8f985626a8c5fc8d12e7e16e1f1774ef5c574faf10432e41a2e97ec2684"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:dd70bf0e00bbfaa85cce37716703e874b2d1fdd712960aa3cd788f6925864d5b"},
|
{file = "clickhouse_connect-0.6.13-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ed964a08ebd8ce4ddf44686efcf706fe6089a0b439813a4796c6cf3fc4f5ab11"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3aa3925468c31cfb83466f21efcf1c10b14afc0c4d746b10198da6578afee977"},
|
{file = "clickhouse_connect-0.6.13-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9f4d3e17fa7c0b35e420450b18ad9fdde70f92635c12a69e5a18c699720c0442"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp311-cp311-win32.whl", hash = "sha256:39a14f315674df5a9ba83d17f95d34af49935c5ba991ee5d397abdc4ce48c458"},
|
{file = "clickhouse_connect-0.6.13-cp311-cp311-win32.whl", hash = "sha256:fcab92aadd62ecc4dbe9f841c72e714f519f5251f45bf04f761504cd419abff3"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp311-cp311-win_amd64.whl", hash = "sha256:9725715b2d464b47f71c26a9211716b6186a0c3714252ef21cde50ca43c34a3e"},
|
{file = "clickhouse_connect-0.6.13-cp311-cp311-win_amd64.whl", hash = "sha256:a312939b94ec2dd49556cbef880804898fc14d5ca52aeb3d00b9905047ca64e0"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8a33d424b0de55e3d854af83c12ebf8b8c22401ec24b877f8775d3c38ed4be36"},
|
{file = "clickhouse_connect-0.6.13-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e3fef39ce56c5550ebc701fc439ca517eca10c57166216ebd37b664a5352be7"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbac4e2f8d4dbe94cf1827ea50be82361826729099321c4a216bfbdc85f7d770"},
|
{file = "clickhouse_connect-0.6.13-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1841a5f1c1298907c42e23fef1f4bdcdb6c7c40b2844469ccd4780e8f7cc16f"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cfaf7428d75e079223142c6db643a6a1aeb1dba10b24489f061765e986da240"},
|
{file = "clickhouse_connect-0.6.13-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:120618bf66df0908c0b8b5e8ea07c068d98032a9f498c832b1b02aa2cef91474"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a49a5ff24cc4f47faab7b623740aafd31fc5146d7a74a564a7f1c92f6463c8"},
|
{file = "clickhouse_connect-0.6.13-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3a7c34efd02e68445cc6bf13f6de9c4b294112351e79a386cbd65c13fa08965"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99966aa95cd03007043d42c87f1caef70a9b8f289a155cb47adbdba2b9b09375"},
|
{file = "clickhouse_connect-0.6.13-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1a3f6a6975759b0b3aa8a4a6e05533bdce234a16804e69282bb0c01a5a37851a"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e3f43ab9bab1a192fa4030fc38d791d6d9c77cfefc1ff9794fb6e643c0d03fea"},
|
{file = "clickhouse_connect-0.6.13-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6317a3ee357ce7129de18ce344792c545f4b28a190a47bf4047414c9b12dfaf2"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:321fab42eff5af20eae10c3a4df440ad4974e3ca80f3f944cf4f7fd09c537185"},
|
{file = "clickhouse_connect-0.6.13-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:b0d07ae7b0d7ede51a336dfee5bbfdbf123957a50e9452d57f58b0c803517f21"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp37-cp37m-win32.whl", hash = "sha256:709cd1a6a4a7b138be0a531bc1ccdbb0a4878810074cd1d2b92ba8a3e76f2cfa"},
|
{file = "clickhouse_connect-0.6.13-cp37-cp37m-win32.whl", hash = "sha256:ef0ca69741762e512a6f1882d53bb1e607e2e04d24db995c8c0b3409943891b4"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp37-cp37m-win_amd64.whl", hash = "sha256:cd1cc12fea9d2522c845884860a4e643e706e29e3184c749c25d5778314f4775"},
|
{file = "clickhouse_connect-0.6.13-cp37-cp37m-win_amd64.whl", hash = "sha256:a5ba1ed57f4d8a47a87e353756746d4199527568b962931f5d6b9388ba72d8f3"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:78b1ee7fc084808df595c2ecb5ca03f6b964fdf9a9b3ebf6b5724aa3f3381067"},
|
{file = "clickhouse_connect-0.6.13-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03f6738e9c737531d7ec67611cb476ca8b817b583e5f46349fc63b7357cdda4e"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:70158813a355aa5715219439095e459743a15da4166359c8e944a2a878e16154"},
|
{file = "clickhouse_connect-0.6.13-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:484b528d3c79f07f9c8a6586fb254578b8f8140a5a309820737f5017e9edd02e"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e14c3cff4dfbc2efb0463eb455553f80a95d5cd932d5880fdec0f833066c34"},
|
{file = "clickhouse_connect-0.6.13-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0c5589016da8a0a1c21d2461a98a6cab7c22633423735647632f5b5c0de7109"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d40e0433d06009ed98a0629dae909f5d8ab910e9353c4b9eb6ddf538ef12f6e"},
|
{file = "clickhouse_connect-0.6.13-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81495c2d12a6420c1f3ee5d0cf3996329dbfd60e12e53905fd9da577b992c0c8"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c4f0a0aa32d66244996bf3d882b3d48c1fa0dc67757dddeaf5e0e62689e59be"},
|
{file = "clickhouse_connect-0.6.13-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2239972b84dd33baf7cd552b53dec024716b87fbebb3a2ff741398a96fa15777"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2556346e7210fc9d38101ebe2e4f642f1dcc871c67d1f3aa121b70321f9b915e"},
|
{file = "clickhouse_connect-0.6.13-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9737310a7466f5ac10077ecbe10237e816a12a8cc4c651c2be82eaf25895042b"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:27bcedf49e9c3388a5ae74c9d99191d969371d17adaee3e52da38f1d34777164"},
|
{file = "clickhouse_connect-0.6.13-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a229d67f1dec0351faf7634f523c8fcf78b602ee02b0e25c93f4d5018147d4f4"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:acacf57500802d7fd3f74be9dfabbcbece2ea63f86dc91a34328d6ea118c1355"},
|
{file = "clickhouse_connect-0.6.13-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a996fdf7d8e6bc18c9365fc06bd429418510cf63476a056e36afee505f570dad"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp38-cp38-win32.whl", hash = "sha256:16a7b88d1021dd1855ede700d10faafe234dd7f64b371bb201770c01cbdf2165"},
|
{file = "clickhouse_connect-0.6.13-cp38-cp38-win32.whl", hash = "sha256:56e51196caeb6b7f7b62af8e58ce1a653e29c694e4cf0964907ca7b42b32e7f0"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp38-cp38-win_amd64.whl", hash = "sha256:5398a91f6b90efc91eee2d0947544ced56b322a77f33ee73c6d3aa5c5751d3ec"},
|
{file = "clickhouse_connect-0.6.13-cp38-cp38-win_amd64.whl", hash = "sha256:a7b0cfec5eff21ec81f713de77a136d74f9336a20da5096b7a046b27ca1014b7"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6d81668c1dd98177fe8dd256235ef496570fa4ab6381325c133518c5503474d9"},
|
{file = "clickhouse_connect-0.6.13-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:909a6d4406a9320d85d7b71a131e68f9289ec66453ba7bf14e9a110db5f18e3d"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2ee0ae56ec5673c8442efa9b0505d073cd950f0d2034e09c9f95a92472170b9b"},
|
{file = "clickhouse_connect-0.6.13-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7845ad20a8fba276dff1670c1bbedc3dc2c4d560fa486d8960fdd217b188099"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76c5d7e0b92ef45554f17169f51b548a53f7186af0ec3553bf42227e3fc2e7de"},
|
{file = "clickhouse_connect-0.6.13-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9d5eb2036b740496a8d9f871cf928493fbc7d9edfc543e16f5db56ef359d468"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62bb5baf27d7a6acee79f9314d41b9278e089a696fc3794954a4c186e0f91e48"},
|
{file = "clickhouse_connect-0.6.13-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe0b889587bfe2962cbfe1b0a908f8bafee332a8f955f38fa307561dd73a962c"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f17864ec2e9bd602930ff2c42c6d8c1c4d7e2d23b77478148c3d2614e54a7158"},
|
{file = "clickhouse_connect-0.6.13-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0414e6a2b2e19ad4165cb01503086d229473465217be86a7824cf9f4a2d3964"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c6efb3f1b6a98e4fde02be55a33cc34572f9db4bd9d9362c8075cc4163431e86"},
|
{file = "clickhouse_connect-0.6.13-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9065b9a7def6e1f7bf74e9c81825927f0b9147fcf1f0d172533552d931311279"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:40ac6f576e36813ecb412fb5f4e786a235d048e29a47b97f378ff39e7fcbbf58"},
|
{file = "clickhouse_connect-0.6.13-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2b7b4e29c781d8feb87cac6133ef8a20b59cd70e600d9f37875dd74384c8b792"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bdf52a8bf51ec7674aa90b96fdbea51dad61ac1b673a1ef3e69cea88ea8f1815"},
|
{file = "clickhouse_connect-0.6.13-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:66778f60bc66891ff375aa28447846a7f176743800f8fbec23001b05b8912020"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp39-cp39-win32.whl", hash = "sha256:290e59694739fdcaacec5f62cae4a8ce7e5768e1a04c70b013c6bcf4e40448f6"},
|
{file = "clickhouse_connect-0.6.13-cp39-cp39-win32.whl", hash = "sha256:fa1f34d5b56f86417be2490e9cb22b1b27ff788e569636fdae1027d66816c2b3"},
|
||||||
{file = "clickhouse_connect-0.6.12-cp39-cp39-win_amd64.whl", hash = "sha256:f43dbdb491be7921e246fa4fa43eb8de7377c2924a89c9dba11ab1d66bcb3f49"},
|
{file = "clickhouse_connect-0.6.13-cp39-cp39-win_amd64.whl", hash = "sha256:b66574c7dc2a805071b582a66a0a46c92d3b3e1e897336cc32c5e0054204b401"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a69dc6dab75ad53c2690f74671440be68b329eadf95876f2fcbbdd731b2be742"},
|
{file = "clickhouse_connect-0.6.13-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c87224b4ecec054395759cfbe5aab56f1728a14fb382178b0ae29c06068a1487"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be8bf29d7f80ed8a78c6453b13ae16f7b1244ad3177994c5e3e1d2c767b097b4"},
|
{file = "clickhouse_connect-0.6.13-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2f416e38cc935f982443a21642eac3d09e56f32fffa7a2ec90f36175bcd92ee"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:083d2bcb35a6fe0068b2c58533d4c008176e0a450f737c9bd508083324bb3105"},
|
{file = "clickhouse_connect-0.6.13-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:caffe66da4d9f8777b72ac93884ce7726a08a154527a444aa3e9913f4f44523f"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3483c0c4d53a540a32e6da97e2305df4303986e8f0ddbf31d4d811beeb229a5"},
|
{file = "clickhouse_connect-0.6.13-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fdcb082acf5a1b754ea360e5df0f8805c17df1db9cdc47dcf10c7cfc2f0ea4d0"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7dfeae1060e4988e2bf5b146fe523cfe5cfece63805a57b8aad9e4f4d521f67b"},
|
{file = "clickhouse_connect-0.6.13-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:bebfd2d9fbaf67a84c78cce0f48cac3224c9eef62de7334e57dd32d38399bec9"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:78b7ad5536edd07958dc645023e7eca779051d6c0c5a251f9459e050b54eaaac"},
|
{file = "clickhouse_connect-0.6.13-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:98ef70b8e63f3145603a570bd479bc66f1269be18baec5df71c2f58959c345c1"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:166af2f4b9b1443a55cd8e56d13a67d7f2c3131ff2fbb60e82307bec74c8bfc0"},
|
{file = "clickhouse_connect-0.6.13-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd1ea8c2b694bb441371c7c964a9ff9b92489863087a306419fa8680ff189056"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d0ed56d6c7aaabedae107c82d3a941dd76c1048400a0a57dac9c798ca297f1c"},
|
{file = "clickhouse_connect-0.6.13-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba59dead59a7f32522f502d3061fa70f0978b0a03ebe7992dcea53be4a5f587e"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a7ec15c5fb2aea8e7fcd0a51e8ab559d24a8e0e77b837e2377863d26a036a1a"},
|
{file = "clickhouse_connect-0.6.13-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c40ac936bb35bbf32aca6881755e392ba2ef3eece028e7b24c40498a662e9bfe"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:ad918a6c67cf8dc68e1b301f80eb58157eabfca569cc40d2dadea54331cf6ef0"},
|
{file = "clickhouse_connect-0.6.13-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70397690dc7574d2ff546f311bd2243177925cc74f0df2613d2985a0da8c7516"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:593f60be742b61e6433fa123da6ac055bb074b16c6a8162f7d40c5c52441cccb"},
|
{file = "clickhouse_connect-0.6.13-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d3ec25049fff943844e24a65112d15ed4d006f7c528362dd997844e4bcfce7cd"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:004b4ce12f22366a027ce6f25106940eda7fecfe02131bf882e2af07ec7708cf"},
|
{file = "clickhouse_connect-0.6.13-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82b8614233a0ff7a3b469876b95dcf4557ed8fbc15c6997d49ddbde323537161"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75cb077c748389bd197ba93b10efd482a5e3482dcebd81ed74dda825f5e942b2"},
|
{file = "clickhouse_connect-0.6.13-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d1bf02bc20bf308853d6d382dac0d3347e4db2e76987610a098c7b1b207f355"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d05e9e156d24d9ede663a99a1b54ae5e5b2424f4809f7f0f05d3fb33c2b23e02"},
|
{file = "clickhouse_connect-0.6.13-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ebd96561056f316ce129e9f7bdaa8043ee4c2f872903f36eff0920022487cba"},
|
||||||
{file = "clickhouse_connect-0.6.12-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3043aa3d475c66a4583208ac8511ca97d986b76b5dc072ef2961645796dec0cc"},
|
{file = "clickhouse_connect-0.6.13-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7de7099025a00954940dfe76f29ab529c5bece4ad8a2bc4131b7b8ff35ad60c8"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
|
@ -762,13 +762,13 @@ sqlalchemy = ["sqlalchemy (>1.3.21,<2.0)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cohere"
|
name = "cohere"
|
||||||
version = "4.26.1"
|
version = "4.27"
|
||||||
description = ""
|
description = ""
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7,<4.0"
|
python-versions = ">=3.7,<4.0"
|
||||||
files = [
|
files = [
|
||||||
{file = "cohere-4.26.1-py3-none-any.whl", hash = "sha256:d9bf455ca44ee746a84e662cb37cc4a581263c13c236906d09f18066ed783c13"},
|
{file = "cohere-4.27-py3-none-any.whl", hash = "sha256:a2b977867a247bf44b2eba1b947acfe44e5881b15cacc40469fbdb117a7f1f55"},
|
||||||
{file = "cohere-4.26.1.tar.gz", hash = "sha256:922539568a0e5a1aa78dd8521c020657e0f8a66f50ba9cf6a28d13673f40498f"},
|
{file = "cohere-4.27.tar.gz", hash = "sha256:5d61eaca698dcf7f5b0b7cccca269d448e341314fedd921a0cc7c7bbf05f8181"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
|
@ -895,34 +895,34 @@ toml = ["tomli"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cryptography"
|
name = "cryptography"
|
||||||
version = "41.0.3"
|
version = "41.0.4"
|
||||||
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
|
description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:652627a055cb52a84f8c448185922241dd5217443ca194d5739b44612c5e6507"},
|
{file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:80907d3faa55dc5434a16579952ac6da800935cd98d14dbd62f6f042c7f5e839"},
|
||||||
{file = "cryptography-41.0.3-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8f09daa483aedea50d249ef98ed500569841d6498aa9c9f4b0531b9964658922"},
|
{file = "cryptography-41.0.4-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:35c00f637cd0b9d5b6c6bd11b6c3359194a8eba9c46d4e875a3660e3b400005f"},
|
||||||
{file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fd871184321100fb400d759ad0cddddf284c4b696568204d281c902fc7b0d81"},
|
{file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cecfefa17042941f94ab54f769c8ce0fe14beff2694e9ac684176a2535bf9714"},
|
||||||
{file = "cryptography-41.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84537453d57f55a50a5b6835622ee405816999a7113267739a1b4581f83535bd"},
|
{file = "cryptography-41.0.4-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e40211b4923ba5a6dc9769eab704bdb3fbb58d56c5b336d30996c24fcf12aadb"},
|
||||||
{file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3fb248989b6363906827284cd20cca63bb1a757e0a2864d4c1682a985e3dca47"},
|
{file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:23a25c09dfd0d9f28da2352503b23e086f8e78096b9fd585d1d14eca01613e13"},
|
||||||
{file = "cryptography-41.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:42cb413e01a5d36da9929baa9d70ca90d90b969269e5a12d39c1e0d475010116"},
|
{file = "cryptography-41.0.4-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2ed09183922d66c4ec5fdaa59b4d14e105c084dd0febd27452de8f6f74704143"},
|
||||||
{file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:aeb57c421b34af8f9fe830e1955bf493a86a7996cc1338fe41b30047d16e962c"},
|
{file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5a0f09cefded00e648a127048119f77bc2b2ec61e736660b5789e638f43cc397"},
|
||||||
{file = "cryptography-41.0.3-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6af1c6387c531cd364b72c28daa29232162010d952ceb7e5ca8e2827526aceae"},
|
{file = "cryptography-41.0.4-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9eeb77214afae972a00dee47382d2591abe77bdae166bda672fb1e24702a3860"},
|
||||||
{file = "cryptography-41.0.3-cp37-abi3-win32.whl", hash = "sha256:0d09fb5356f975974dbcb595ad2d178305e5050656affb7890a1583f5e02a306"},
|
{file = "cryptography-41.0.4-cp37-abi3-win32.whl", hash = "sha256:3b224890962a2d7b57cf5eeb16ccaafba6083f7b811829f00476309bce2fe0fd"},
|
||||||
{file = "cryptography-41.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:a983e441a00a9d57a4d7c91b3116a37ae602907a7618b882c8013b5762e80574"},
|
{file = "cryptography-41.0.4-cp37-abi3-win_amd64.whl", hash = "sha256:c880eba5175f4307129784eca96f4e70b88e57aa3f680aeba3bab0e980b0f37d"},
|
||||||
{file = "cryptography-41.0.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5259cb659aa43005eb55a0e4ff2c825ca111a0da1814202c64d28a985d33b087"},
|
{file = "cryptography-41.0.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:004b6ccc95943f6a9ad3142cfabcc769d7ee38a3f60fb0dddbfb431f818c3a67"},
|
||||||
{file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:67e120e9a577c64fe1f611e53b30b3e69744e5910ff3b6e97e935aeb96005858"},
|
{file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:86defa8d248c3fa029da68ce61fe735432b047e32179883bdb1e79ed9bb8195e"},
|
||||||
{file = "cryptography-41.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:7efe8041897fe7a50863e51b77789b657a133c75c3b094e51b5e4b5cec7bf906"},
|
{file = "cryptography-41.0.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:37480760ae08065437e6573d14be973112c9e6dcaf5f11d00147ee74f37a3829"},
|
||||||
{file = "cryptography-41.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ce785cf81a7bdade534297ef9e490ddff800d956625020ab2ec2780a556c313e"},
|
{file = "cryptography-41.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b5f4dfe950ff0479f1f00eda09c18798d4f49b98f4e2006d644b3301682ebdca"},
|
||||||
{file = "cryptography-41.0.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:57a51b89f954f216a81c9d057bf1a24e2f36e764a1ca9a501a6964eb4a6800dd"},
|
{file = "cryptography-41.0.4-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7e53db173370dea832190870e975a1e09c86a879b613948f09eb49324218c14d"},
|
||||||
{file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c2f0d35703d61002a2bbdcf15548ebb701cfdd83cdc12471d2bae80878a4207"},
|
{file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5b72205a360f3b6176485a333256b9bcd48700fc755fef51c8e7e67c4b63e3ac"},
|
||||||
{file = "cryptography-41.0.3-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:23c2d778cf829f7d0ae180600b17e9fceea3c2ef8b31a99e3c694cbbf3a24b84"},
|
{file = "cryptography-41.0.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:93530900d14c37a46ce3d6c9e6fd35dbe5f5601bf6b3a5c325c7bffc030344d9"},
|
||||||
{file = "cryptography-41.0.3-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95dd7f261bb76948b52a5330ba5202b91a26fbac13ad0e9fc8a3ac04752058c7"},
|
{file = "cryptography-41.0.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:efc8ad4e6fc4f1752ebfb58aefece8b4e3c4cae940b0994d43649bdfce8d0d4f"},
|
||||||
{file = "cryptography-41.0.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:41d7aa7cdfded09b3d73a47f429c298e80796c8e825ddfadc84c8a7f12df212d"},
|
{file = "cryptography-41.0.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c3391bd8e6de35f6f1140e50aaeb3e2b3d6a9012536ca23ab0d9c35ec18c8a91"},
|
||||||
{file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d0d651aa754ef58d75cec6edfbd21259d93810b73f6ec246436a21b7841908de"},
|
{file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:0d9409894f495d465fe6fda92cb70e8323e9648af912d5b9141d616df40a87b8"},
|
||||||
{file = "cryptography-41.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ab8de0d091acbf778f74286f4989cf3d1528336af1b59f3e5d2ebca8b5fe49e1"},
|
{file = "cryptography-41.0.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:8ac4f9ead4bbd0bc8ab2d318f97d85147167a488be0e08814a37eb2f439d5cf6"},
|
||||||
{file = "cryptography-41.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a74fbcdb2a0d46fe00504f571a2a540532f4c188e6ccf26f1f178480117b33c4"},
|
{file = "cryptography-41.0.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:047c4603aeb4bbd8db2756e38f5b8bd7e94318c047cfe4efeb5d715e08b49311"},
|
||||||
{file = "cryptography-41.0.3.tar.gz", hash = "sha256:6d192741113ef5e30d89dcb5b956ef4e1578f304708701b8b73d38e3e1461f34"},
|
{file = "cryptography-41.0.4.tar.gz", hash = "sha256:7febc3094125fc126a7f6fb1f420d0da639f3f32cb15c8ff0dc3997c4549f51a"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
|
@ -1621,13 +1621,13 @@ grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "google-api-python-client"
|
name = "google-api-python-client"
|
||||||
version = "2.99.0"
|
version = "2.100.0"
|
||||||
description = "Google API Client Library for Python"
|
description = "Google API Client Library for Python"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "google-api-python-client-2.99.0.tar.gz", hash = "sha256:e733fd0f2c8793b1a000d5e69ac81b1b9ec0665b445b7ed83bdbbb0038973306"},
|
{file = "google-api-python-client-2.100.0.tar.gz", hash = "sha256:eaed50efc2f8a4027dcca8fd0037f4b1b03b8093efc84ce3cb6c75bfc79a7e31"},
|
||||||
{file = "google_api_python_client-2.99.0-py2.py3-none-any.whl", hash = "sha256:40272131d3a4a7aecab840ebcf3df51c54d49560156f3b9d54a4ef82c795985d"},
|
{file = "google_api_python_client-2.100.0-py2.py3-none-any.whl", hash = "sha256:226ca35355993d6182506c51745ab5149405cdf6a92975b2725ab3e0d757dbe9"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
|
@ -1678,13 +1678,13 @@ httplib2 = ">=0.19.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "google-cloud-aiplatform"
|
name = "google-cloud-aiplatform"
|
||||||
version = "1.32.0"
|
version = "1.33.1"
|
||||||
description = "Vertex AI API client library"
|
description = "Vertex AI API client library"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "google-cloud-aiplatform-1.32.0.tar.gz", hash = "sha256:18558f2a908a86a9b78b744486c71dcf0c836b232466422277b2da572d30b8f4"},
|
{file = "google-cloud-aiplatform-1.33.1.tar.gz", hash = "sha256:f73b564232cc0c7c6e8c60352b55b7b6c47f6a8a2d97b7c821c45cfe77f24208"},
|
||||||
{file = "google_cloud_aiplatform-1.32.0-py2.py3-none-any.whl", hash = "sha256:18cf609aadb1070cb3831370cdd7bcecc87ec07b84a5fa26b5df22a592d4b002"},
|
{file = "google_cloud_aiplatform-1.33.1-py2.py3-none-any.whl", hash = "sha256:609224406596ef67cc376042aeca51b792c23c16f9997a42e9da5b9be04c3ada"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
|
@ -1702,15 +1702,16 @@ autologging = ["mlflow (>=1.27.0,<=2.1.1)"]
|
||||||
cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"]
|
cloud-profiler = ["tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "werkzeug (>=2.0.0,<2.1.0dev)"]
|
||||||
datasets = ["pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)"]
|
datasets = ["pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)"]
|
||||||
endpoint = ["requests (>=2.28.1)"]
|
endpoint = ["requests (>=2.28.1)"]
|
||||||
full = ["cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.76.0)", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (==0.0.4)", "google-vizier (>=0.1.6)", "importlib-metadata (<7.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pyyaml (==5.3.1)", "requests (>=2.28.1)", "starlette (>=0.17.1)", "tensorflow (>=2.3.0,<3.0.0dev)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)"]
|
full = ["cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.103.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (==0.0.4)", "google-vizier (>=0.1.6)", "httpx (>=0.23.0,<0.25.0)", "importlib-metadata (<7.0)", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyyaml (==5.3.1)", "ray[default] (>=2.4,<2.5)", "ray[default] (>=2.5,<2.5.1)", "requests (>=2.28.1)", "starlette (>=0.17.1)", "tensorflow (>=2.3.0,<3.0.0dev)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)"]
|
||||||
lit = ["explainable-ai-sdk (>=1.0.0)", "lit-nlp (==0.4.0)", "pandas (>=1.0.0)", "tensorflow (>=2.3.0,<3.0.0dev)"]
|
lit = ["explainable-ai-sdk (>=1.0.0)", "lit-nlp (==0.4.0)", "pandas (>=1.0.0)", "tensorflow (>=2.3.0,<3.0.0dev)"]
|
||||||
metadata = ["numpy (>=1.15.0)", "pandas (>=1.0.0)"]
|
metadata = ["numpy (>=1.15.0)", "pandas (>=1.0.0)"]
|
||||||
pipelines = ["pyyaml (==5.3.1)"]
|
pipelines = ["pyyaml (==5.3.1)"]
|
||||||
prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<0.76.0)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"]
|
prediction = ["docker (>=5.0.3)", "fastapi (>=0.71.0,<0.103.1)", "httpx (>=0.23.0,<0.25.0)", "starlette (>=0.17.1)", "uvicorn[standard] (>=0.16.0)"]
|
||||||
preview = ["cloudpickle (<3.0)", "google-cloud-logging (<4.0)", "importlib-metadata (<7.0)"]
|
preview = ["cloudpickle (<3.0)", "google-cloud-logging (<4.0)", "importlib-metadata (<7.0)"]
|
||||||
private-endpoints = ["requests (>=2.28.1)", "urllib3 (>=1.21.1,<1.27)"]
|
private-endpoints = ["requests (>=2.28.1)", "urllib3 (>=1.21.1,<1.27)"]
|
||||||
|
ray = ["google-cloud-bigquery", "google-cloud-bigquery-storage", "pandas (>=1.0.0)", "pyarrow (>=6.0.1)", "pydantic (<2)", "ray[default] (>=2.4,<2.5)", "ray[default] (>=2.5,<2.5.1)"]
|
||||||
tensorboard = ["tensorflow (>=2.3.0,<3.0.0dev)"]
|
tensorboard = ["tensorflow (>=2.3.0,<3.0.0dev)"]
|
||||||
testing = ["cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.76.0)", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (==0.0.4)", "google-vizier (>=0.1.6)", "grpcio-testing", "importlib-metadata (<7.0)", "ipython", "kfp", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pyfakefs", "pytest-asyncio", "pytest-xdist", "pyyaml (==5.3.1)", "requests (>=2.28.1)", "scikit-learn", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.3.0,<2.13.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch", "torch (>=2.0.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost"]
|
testing = ["cloudpickle (<3.0)", "docker (>=5.0.3)", "explainable-ai-sdk (>=1.0.0)", "fastapi (>=0.71.0,<0.103.1)", "google-cloud-bigquery", "google-cloud-bigquery-storage", "google-cloud-logging (<4.0)", "google-vizier (==0.0.4)", "google-vizier (>=0.1.6)", "grpcio-testing", "httpx (>=0.23.0,<0.25.0)", "importlib-metadata (<7.0)", "ipython", "kfp", "lit-nlp (==0.4.0)", "mlflow (>=1.27.0,<=2.1.1)", "numpy (>=1.15.0)", "pandas (>=1.0.0)", "pyarrow (>=10.0.1)", "pyarrow (>=3.0.0,<8.0dev)", "pyarrow (>=6.0.1)", "pydantic (<2)", "pyfakefs", "pytest-asyncio", "pytest-xdist", "pyyaml (==5.3.1)", "ray[default] (>=2.4,<2.5)", "ray[default] (>=2.5,<2.5.1)", "requests (>=2.28.1)", "scikit-learn", "starlette (>=0.17.1)", "tensorboard-plugin-profile (>=2.4.0,<3.0.0dev)", "tensorflow (>=2.3.0,<2.13.0)", "tensorflow (>=2.3.0,<3.0.0dev)", "tensorflow (>=2.4.0,<3.0.0dev)", "torch", "torch (>=2.0.0)", "urllib3 (>=1.21.1,<1.27)", "uvicorn[standard] (>=0.16.0)", "werkzeug (>=2.0.0,<2.1.0dev)", "xgboost", "xgboost-ray"]
|
||||||
vizier = ["google-vizier (==0.0.4)", "google-vizier (>=0.1.6)"]
|
vizier = ["google-vizier (==0.0.4)", "google-vizier (>=0.1.6)"]
|
||||||
xai = ["tensorflow (>=2.3.0,<3.0.0dev)"]
|
xai = ["tensorflow (>=2.3.0,<3.0.0dev)"]
|
||||||
|
|
||||||
|
|
@ -1766,13 +1767,13 @@ grpc = ["grpcio (>=1.38.0,<2.0dev)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "google-cloud-resource-manager"
|
name = "google-cloud-resource-manager"
|
||||||
version = "1.10.3"
|
version = "1.10.4"
|
||||||
description = "Google Cloud Resource Manager API client library"
|
description = "Google Cloud Resource Manager API client library"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "google-cloud-resource-manager-1.10.3.tar.gz", hash = "sha256:f80efcea36f10c5a81889afe93910926e3978b4b1ceeb82f563a2fc863072d14"},
|
{file = "google-cloud-resource-manager-1.10.4.tar.gz", hash = "sha256:456b25ddda3d4cd27488a72736bbc3af04d713ae2fe3655c01b66a339d28d679"},
|
||||||
{file = "google_cloud_resource_manager-1.10.3-py2.py3-none-any.whl", hash = "sha256:1381a4b0f522248ebe0ebd1289d8822b99c54f4e1fe03924a6e723b2ed93dd7f"},
|
{file = "google_cloud_resource_manager-1.10.4-py2.py3-none-any.whl", hash = "sha256:2ba56ba8e5280cd425bd63620da48b78da2cd299ece58a71f0f2ce3a32d56f99"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
|
@ -1783,20 +1784,20 @@ protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "google-cloud-storage"
|
name = "google-cloud-storage"
|
||||||
version = "2.10.0"
|
version = "2.11.0"
|
||||||
description = "Google Cloud Storage API client library"
|
description = "Google Cloud Storage API client library"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "google-cloud-storage-2.10.0.tar.gz", hash = "sha256:934b31ead5f3994e5360f9ff5750982c5b6b11604dc072bc452c25965e076dc7"},
|
{file = "google-cloud-storage-2.11.0.tar.gz", hash = "sha256:6fbf62659b83c8f3a0a743af0d661d2046c97c3a5bfb587c4662c4bc68de3e31"},
|
||||||
{file = "google_cloud_storage-2.10.0-py2.py3-none-any.whl", hash = "sha256:9433cf28801671de1c80434238fb1e7e4a1ba3087470e90f70c928ea77c2b9d7"},
|
{file = "google_cloud_storage-2.11.0-py2.py3-none-any.whl", hash = "sha256:88cbd7fb3d701c780c4272bc26952db99f25eb283fb4c2208423249f00b5fe53"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0dev"
|
google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0dev"
|
||||||
google-auth = ">=1.25.0,<3.0dev"
|
google-auth = ">=1.25.0,<3.0dev"
|
||||||
google-cloud-core = ">=2.3.0,<3.0dev"
|
google-cloud-core = ">=2.3.0,<3.0dev"
|
||||||
google-resumable-media = ">=2.3.2"
|
google-resumable-media = ">=2.6.0"
|
||||||
requests = ">=2.18.0,<3.0.0dev"
|
requests = ">=2.18.0,<3.0.0dev"
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
|
|
@ -2469,21 +2470,21 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "importlib-resources"
|
name = "importlib-resources"
|
||||||
version = "6.0.1"
|
version = "6.1.0"
|
||||||
description = "Read resources from Python packages"
|
description = "Read resources from Python packages"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.8"
|
python-versions = ">=3.8"
|
||||||
files = [
|
files = [
|
||||||
{file = "importlib_resources-6.0.1-py3-none-any.whl", hash = "sha256:134832a506243891221b88b4ae1213327eea96ceb4e407a00d790bb0626f45cf"},
|
{file = "importlib_resources-6.1.0-py3-none-any.whl", hash = "sha256:aa50258bbfa56d4e33fbd8aa3ef48ded10d1735f11532b8df95388cc6bdb7e83"},
|
||||||
{file = "importlib_resources-6.0.1.tar.gz", hash = "sha256:4359457e42708462b9626a04657c6208ad799ceb41e5c58c57ffa0e6a098a5d4"},
|
{file = "importlib_resources-6.1.0.tar.gz", hash = "sha256:9d48dcccc213325e810fd723e7fbb45ccb39f6cf5c31f00cf2b965f5f10f3cb9"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
|
zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""}
|
||||||
|
|
||||||
[package.extras]
|
[package.extras]
|
||||||
docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"]
|
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"]
|
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)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "iniconfig"
|
name = "iniconfig"
|
||||||
|
|
@ -3373,13 +3374,13 @@ files = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "metal-sdk"
|
name = "metal-sdk"
|
||||||
version = "2.1.0"
|
version = "2.1.2"
|
||||||
description = "SDK for getmetal.io"
|
description = "SDK for getmetal.io"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7"
|
python-versions = ">=3.7"
|
||||||
files = [
|
files = [
|
||||||
{file = "metal_sdk-2.1.0-py3-none-any.whl", hash = "sha256:e523b21058d155d485171e8b27aed460d60518f8d8e99d82d2818217055fc8d3"},
|
{file = "metal_sdk-2.1.2-py3-none-any.whl", hash = "sha256:542ee620173994b43344779d8d9fc5540b06d4ac30941d824769f1e8bf767c0c"},
|
||||||
{file = "metal_sdk-2.1.0.tar.gz", hash = "sha256:11ec44a3c00f9e329de7191578e6d94d064062c5ac5bb1eea6b295853614a835"},
|
{file = "metal_sdk-2.1.2.tar.gz", hash = "sha256:a22895a5babd9c6bdd651ca4289f593ba5eee9742b97d12e6c5a859a3befef96"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
|
@ -3771,35 +3772,35 @@ files = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "onnxruntime"
|
name = "onnxruntime"
|
||||||
version = "1.15.1"
|
version = "1.16.0"
|
||||||
description = "ONNX Runtime is a runtime accelerator for Machine Learning models"
|
description = "ONNX Runtime is a runtime accelerator for Machine Learning models"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
{file = "onnxruntime-1.15.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:baad59e6a763237fa39545325d29c16f98b8a45d2dfc524c67631e2e3ba44d16"},
|
{file = "onnxruntime-1.16.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:69c86ba3d90c166944c4a3c8a5b2a24a7bc45e68ae5997d83279af21ffd0f5f3"},
|
||||||
{file = "onnxruntime-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:568c2db848f619a0a93e843c028e9fb4879929d40b04bd60f9ba6eb8d2e93421"},
|
{file = "onnxruntime-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:604a46aa2ad6a51f2fc4df1a984ea571a43aa02424aea93464c32ce02d23b3bb"},
|
||||||
{file = "onnxruntime-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69088d7784bb04dedfd9e883e2c96e4adf8ae0451acdd0abb78d68f59ecc6d9d"},
|
{file = "onnxruntime-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a40660516b382031279fb690fc3d068ad004173c2bd12bbdc0bd0fe01ef8b7c3"},
|
||||||
{file = "onnxruntime-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cef43737b2cd886d5d718d100f56ec78c9c476c5db5f8f946e95024978fe754"},
|
{file = "onnxruntime-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:349fd9c7875c1a76609d45b079484f8059adfb1fb87a30506934fb667ceab249"},
|
||||||
{file = "onnxruntime-1.15.1-cp310-cp310-win32.whl", hash = "sha256:79d7e65abb44a47c633ede8e53fe7b9756c272efaf169758c482c983cca98d7e"},
|
{file = "onnxruntime-1.16.0-cp310-cp310-win32.whl", hash = "sha256:22c9e2f1a1f15b41b01195cd2520c013c22228efc4795ae4118048ea4118aad2"},
|
||||||
{file = "onnxruntime-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:8bc4c47682933a7a2c79808688aad5f12581305e182be552de50783b5438e6bd"},
|
{file = "onnxruntime-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:b9667a131abfd226a728cc1c1ecf5cc5afa4fff37422f95a84bc22f7c175b57f"},
|
||||||
{file = "onnxruntime-1.15.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:652b2cb777f76446e3cc41072dd3d1585a6388aeff92b9de656724bc22e241e4"},
|
{file = "onnxruntime-1.16.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:f7b292726a1f3fa4a483d7e902da083a5889a86a860dbc3a6479988cad342578"},
|
||||||
{file = "onnxruntime-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:89b86dbed15740abc385055a29c9673a212600248d702737ce856515bdeddc88"},
|
{file = "onnxruntime-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61eaf288a2482c5561f620fb686c80c32709e92724bbb59a5e4a0d349429e205"},
|
||||||
{file = "onnxruntime-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed5cdd9ee748149a57f4cdfa67187a0d68f75240645a3c688299dcd08742cc98"},
|
{file = "onnxruntime-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fe2239d5821d5501eecccfe5c408485591b5d73eb76a61491a8f78179c2e65a"},
|
||||||
{file = "onnxruntime-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f748cce6a70ed38c19658615c55f4eedb9192765a4e9c4bd2682adfe980698d"},
|
{file = "onnxruntime-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a4924604fcdf1704b7f7e087b4c0b0e181c58367a687da55b1aec2705631943"},
|
||||||
{file = "onnxruntime-1.15.1-cp311-cp311-win32.whl", hash = "sha256:e0312046e814c40066e7823da58075992d51364cbe739eeeb2345ec440c3ac59"},
|
{file = "onnxruntime-1.16.0-cp311-cp311-win32.whl", hash = "sha256:55d8456f1ab28c32aec9c478b7638ed145102b03bb9b719b79e065ffc5de9c72"},
|
||||||
{file = "onnxruntime-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:f0980969689cb956c22bd1318b271e1be260060b37f3ddd82c7d63bd7f2d9a79"},
|
{file = "onnxruntime-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:c2a53ffd456187028c841ac7ed0d83b4c2b7e48bd2b1cf2a42d253ecf1e97cb3"},
|
||||||
{file = "onnxruntime-1.15.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:345986cfdbd6f4b20a89b6a6cd9abd3e2ced2926ae0b6e91fefa8149f95c0f09"},
|
{file = "onnxruntime-1.16.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:bf5769aa4095cfe2503307867fa95b5f73732909ee21b67fe24da443af445925"},
|
||||||
{file = "onnxruntime-1.15.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:a4d7b3ad75e040f1e95757f69826a11051737b31584938a26d466a0234c6de98"},
|
{file = "onnxruntime-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0974deadf11ddab201d915a10517be00fa9d6816def56fa374e4c1a0008985a"},
|
||||||
{file = "onnxruntime-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3603d07b829bcc1c14963a76103e257aade8861eb208173b300cc26e118ec2f8"},
|
{file = "onnxruntime-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99dccf1d2eba5ecd7b6c0e8e80d92d0030291f3506726c156e018a4d7a187c6f"},
|
||||||
{file = "onnxruntime-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3df0625b9295daf1f7409ea55f72e1eeb38d54f5769add53372e79ddc3cf98d"},
|
{file = "onnxruntime-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0170ed05d3a8a7c24fe01fc262a6bc603837751f3bb273df7006a2da73f37fff"},
|
||||||
{file = "onnxruntime-1.15.1-cp38-cp38-win32.whl", hash = "sha256:f68b47fdf1a0406c0292f81ac993e2a2ae3e8b166b436d590eb221f64e8e187a"},
|
{file = "onnxruntime-1.16.0-cp38-cp38-win32.whl", hash = "sha256:5ecd38e98ccdcbbaa7e529e96852f4c1c136559802354b76378d9a19532018ee"},
|
||||||
{file = "onnxruntime-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:52d762d297cc3f731f54fa65a3e329b813164970671547bef6414d0ed52765c9"},
|
{file = "onnxruntime-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:1c585c60e9541a9bd4fb319ba9a3ef6122a28dcf4f3dbcdf014df44570cad6f8"},
|
||||||
{file = "onnxruntime-1.15.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:99228f9f03dc1fc8af89a28c9f942e8bd3e97e894e263abe1a32e4ddb1f6363b"},
|
{file = "onnxruntime-1.16.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:efe59c1e51ad647fb18860233f5971e309961d09ca10697170ef9b7d9fa728f4"},
|
||||||
{file = "onnxruntime-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:45db7f96febb0cf23e3af147f35c4f8de1a37dd252d1cef853c242c2780250cd"},
|
{file = "onnxruntime-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e3c9a9cccab8f6512a0c0207b2816dd8864f2f720f6e9df5cf01e30c4f80194f"},
|
||||||
{file = "onnxruntime-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bafc112a36db25c821b90ab747644041cb4218f6575889775a2c12dd958b8c3"},
|
{file = "onnxruntime-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcf16a252308ec6e0737db7028b63fed0ac28fbad134f86216c0dfb051a31f38"},
|
||||||
{file = "onnxruntime-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:985693d18f2d46aa34fd44d7f65ff620660b2c8fa4b8ec365c2ca353f0fbdb27"},
|
{file = "onnxruntime-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f533aa90ee7189e88b6b612d6adae7d290971090598cfd47ce034ab0d106fc9c"},
|
||||||
{file = "onnxruntime-1.15.1-cp39-cp39-win32.whl", hash = "sha256:708eb31b0c04724bf0f01c1309a9e69bbc09b85beb750e5662c8aed29f1ff9fd"},
|
{file = "onnxruntime-1.16.0-cp39-cp39-win32.whl", hash = "sha256:306c7f5d8a0c24c65afb34f7deb0bc526defde2249e53538f1dce083945a2d6e"},
|
||||||
{file = "onnxruntime-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:73d6de4c42dfde1e9dbea04773e6dc23346c8cda9c7e08c6554fafc97ac60138"},
|
{file = "onnxruntime-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:df8a00a7b057ba497e2822175cc68731d84b89a6d50a3a2a3ec51e98e9c91125"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
|
@ -5302,6 +5303,20 @@ requests-toolbelt = ">=0.10.1"
|
||||||
autocompletion = ["argcomplete (>=1.10.0,<3)"]
|
autocompletion = ["argcomplete (>=1.10.0,<3)"]
|
||||||
yaml = ["PyYaml (>=5.2)"]
|
yaml = ["PyYaml (>=5.2)"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "python-iso639"
|
||||||
|
version = "2023.6.15"
|
||||||
|
description = "Look-up utilities for ISO 639 language codes and names"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "python-iso639-2023.6.15.tar.gz", hash = "sha256:d456740d046d769a4263472ace1a9b790264210e0c199d61a520087c1fab7078"},
|
||||||
|
{file = "python_iso639-2023.6.15-py3-none-any.whl", hash = "sha256:6a4e197cb4a5f39338b9cc2c6356bdfd4cd4bdf6d2a69eb8f707bc8a76f6cf9e"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
dev = ["black (==23.1.0)", "build (==0.10.0)", "flake8 (==6.0.0)", "pytest (==7.2.1)", "twine (==4.0.2)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "python-jose"
|
name = "python-jose"
|
||||||
version = "3.3.0"
|
version = "3.3.0"
|
||||||
|
|
@ -7002,13 +7017,13 @@ types-pyasn1 = "*"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "types-pytz"
|
name = "types-pytz"
|
||||||
version = "2023.3.1.0"
|
version = "2023.3.1.1"
|
||||||
description = "Typing stubs for pytz"
|
description = "Typing stubs for pytz"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
{file = "types-pytz-2023.3.1.0.tar.gz", hash = "sha256:8e7d2198cba44a72df7628887c90f68a568e1445f14db64631af50c3cab8c090"},
|
{file = "types-pytz-2023.3.1.1.tar.gz", hash = "sha256:cc23d0192cd49c8f6bba44ee0c81e4586a8f30204970fc0894d209a6b08dab9a"},
|
||||||
{file = "types_pytz-2023.3.1.0-py3-none-any.whl", hash = "sha256:a660a38ed86d45970603e4f3b4877c7ba947668386a896fb5d9589c17e7b8407"},
|
{file = "types_pytz-2023.3.1.1-py3-none-any.whl", hash = "sha256:1999a123a3dc0e39a2ef6d19f3f8584211de9e6a77fe7a0259f04a524e90a5cf"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -7035,13 +7050,13 @@ files = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "types-requests"
|
name = "types-requests"
|
||||||
version = "2.31.0.2"
|
version = "2.31.0.3"
|
||||||
description = "Typing stubs for requests"
|
description = "Typing stubs for requests"
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = "*"
|
python-versions = "*"
|
||||||
files = [
|
files = [
|
||||||
{file = "types-requests-2.31.0.2.tar.gz", hash = "sha256:6aa3f7faf0ea52d728bb18c0a0d1522d9bfd8c72d26ff6f61bfc3d06a411cf40"},
|
{file = "types-requests-2.31.0.3.tar.gz", hash = "sha256:d5d7a08965fca12bedf716eaf5430c6e3d0da9f3164a1dba2a7f3885f9ebe3c0"},
|
||||||
{file = "types_requests-2.31.0.2-py3-none-any.whl", hash = "sha256:56d181c85b5925cbc59f4489a57e72a8b2166f18273fd8ba7b6fe0c0b986f12a"},
|
{file = "types_requests-2.31.0.3-py3-none-any.whl", hash = "sha256:938f51653c757716aeca5d72c405c5e2befad8b0d330e3b385ce7f148e1b10dc"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
|
@ -7111,13 +7126,13 @@ test = ["coverage", "pytest", "pytest-cov"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unstructured"
|
name = "unstructured"
|
||||||
version = "0.10.15"
|
version = "0.10.16"
|
||||||
description = "A library that prepares raw documents for downstream ML tasks."
|
description = "A library that prepares raw documents for downstream ML tasks."
|
||||||
optional = false
|
optional = false
|
||||||
python-versions = ">=3.7.0"
|
python-versions = ">=3.7.0"
|
||||||
files = [
|
files = [
|
||||||
{file = "unstructured-0.10.15-py3-none-any.whl", hash = "sha256:a572c35cc8cc6f1bc117754e642cb8543cf54c8c651ff8609659a3a3f9819994"},
|
{file = "unstructured-0.10.16-py3-none-any.whl", hash = "sha256:f654af8f22027797a570f2de74b61d136868e2c57cc87febbe8104434c461a3e"},
|
||||||
{file = "unstructured-0.10.15.tar.gz", hash = "sha256:67e57daee3f2ea8f6afd9fc830ade6702bfc50a1127d30ec82bff1d8aaeeef00"},
|
{file = "unstructured-0.10.16.tar.gz", hash = "sha256:d01fae8ff72f996b0448aab20fc616909d679fdfee38e33e0feb8ac5103eecc2"},
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
|
|
@ -7128,6 +7143,7 @@ emoji = "*"
|
||||||
filetype = "*"
|
filetype = "*"
|
||||||
lxml = "*"
|
lxml = "*"
|
||||||
nltk = "*"
|
nltk = "*"
|
||||||
|
python-iso639 = "*"
|
||||||
python-magic = "*"
|
python-magic = "*"
|
||||||
requests = "*"
|
requests = "*"
|
||||||
tabulate = "*"
|
tabulate = "*"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "langflow"
|
name = "langflow"
|
||||||
version = "0.5.0a0"
|
version = "0.5.0a1"
|
||||||
description = "A Python package with a built-in web application"
|
description = "A Python package with a built-in web application"
|
||||||
authors = ["Logspace <contact@logspace.ai>"]
|
authors = ["Logspace <contact@logspace.ai>"]
|
||||||
maintainers = [
|
maintainers = [
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ def display_results(results):
|
||||||
|
|
||||||
def update_settings(
|
def update_settings(
|
||||||
config: str,
|
config: str,
|
||||||
cache: str,
|
cache: Optional[str] = None,
|
||||||
dev: bool = False,
|
dev: bool = False,
|
||||||
remove_api_keys: bool = False,
|
remove_api_keys: bool = False,
|
||||||
components_path: Optional[Path] = None,
|
components_path: Optional[Path] = None,
|
||||||
|
|
@ -154,10 +154,10 @@ def run(
|
||||||
log_file: Path = typer.Option(
|
log_file: Path = typer.Option(
|
||||||
"logs/langflow.log", help="Path to the log file.", envvar="LANGFLOW_LOG_FILE"
|
"logs/langflow.log", help="Path to the log file.", envvar="LANGFLOW_LOG_FILE"
|
||||||
),
|
),
|
||||||
cache: str = typer.Option(
|
cache: Optional[str] = typer.Option(
|
||||||
envvar="LANGFLOW_LANGCHAIN_CACHE",
|
envvar="LANGFLOW_LANGCHAIN_CACHE",
|
||||||
help="Type of cache to use. (InMemoryCache, SQLiteCache)",
|
help="Type of cache to use. (InMemoryCache, SQLiteCache)",
|
||||||
default="SQLiteCache",
|
default=None,
|
||||||
),
|
),
|
||||||
jcloud: bool = typer.Option(False, help="Deploy on Jina AI Cloud"),
|
jcloud: bool = typer.Option(False, help="Deploy on Jina AI Cloud"),
|
||||||
dev: bool = typer.Option(False, help="Run in development mode (may contain bugs)"),
|
dev: bool = typer.Option(False, help="Run in development mode (may contain bugs)"),
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,16 @@ def post_validate_prompt(prompt_request: ValidatePromptRequest):
|
||||||
|
|
||||||
def get_old_custom_fields(prompt_request):
|
def get_old_custom_fields(prompt_request):
|
||||||
try:
|
try:
|
||||||
|
if (
|
||||||
|
len(prompt_request.frontend_node.custom_fields) == 1
|
||||||
|
and prompt_request.name == ""
|
||||||
|
):
|
||||||
|
# If there is only one custom field and the name is empty string
|
||||||
|
# then we are dealing with the first prompt request after the node was created
|
||||||
|
prompt_request.name = list(
|
||||||
|
prompt_request.frontend_node.custom_fields.keys()
|
||||||
|
)[0]
|
||||||
|
|
||||||
old_custom_fields = prompt_request.frontend_node.custom_fields[
|
old_custom_fields = prompt_request.frontend_node.custom_fields[
|
||||||
prompt_request.name
|
prompt_request.name
|
||||||
].copy()
|
].copy()
|
||||||
|
|
|
||||||
|
|
@ -16,17 +16,14 @@ class PromptRunner(CustomComponent):
|
||||||
"info": "Make sure the prompt has all variables filled.",
|
"info": "Make sure the prompt has all variables filled.",
|
||||||
},
|
},
|
||||||
"code": {"show": False},
|
"code": {"show": False},
|
||||||
"inputs": {"field_type": "code"},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def build(
|
def build(
|
||||||
self,
|
self, llm: BaseLLM, prompt: PromptTemplate, inputs: dict = {}
|
||||||
llm: BaseLLM,
|
|
||||||
prompt: PromptTemplate,
|
|
||||||
) -> Document:
|
) -> Document:
|
||||||
chain = prompt | llm
|
chain = prompt | llm
|
||||||
# The input is an empty dict because the prompt is already filled
|
# The input is an empty dict because the prompt is already filled
|
||||||
result = chain.invoke({})
|
result = chain.invoke(input=inputs)
|
||||||
if hasattr(result, "content"):
|
if hasattr(result, "content"):
|
||||||
result = result.content
|
result = result.content
|
||||||
self.repr_value = result
|
self.repr_value = result
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ class MetalRetrieverComponent(CustomComponent):
|
||||||
"api_key": {"display_name": "API Key", "password": True},
|
"api_key": {"display_name": "API Key", "password": True},
|
||||||
"client_id": {"display_name": "Client ID", "password": True},
|
"client_id": {"display_name": "Client ID", "password": True},
|
||||||
"index_id": {"display_name": "Index ID"},
|
"index_id": {"display_name": "Index ID"},
|
||||||
"params": {"display_name": "Parameters", "field_type": "code"},
|
"params": {"display_name": "Parameters"},
|
||||||
"code": {"show": False},
|
"code": {"show": False},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ class GetRequest(CustomComponent):
|
||||||
},
|
},
|
||||||
"headers": {
|
"headers": {
|
||||||
"display_name": "Headers",
|
"display_name": "Headers",
|
||||||
"field_type": "code",
|
|
||||||
"info": "The headers to send with the request.",
|
"info": "The headers to send with the request.",
|
||||||
},
|
},
|
||||||
"code": {"show": False},
|
"code": {"show": False},
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@ class PostRequest(CustomComponent):
|
||||||
"url": {"display_name": "URL", "info": "The URL to make the request to."},
|
"url": {"display_name": "URL", "info": "The URL to make the request to."},
|
||||||
"headers": {
|
"headers": {
|
||||||
"display_name": "Headers",
|
"display_name": "Headers",
|
||||||
"field_type": "code",
|
|
||||||
"info": "The headers to send with the request.",
|
"info": "The headers to send with the request.",
|
||||||
},
|
},
|
||||||
"code": {"show": False},
|
"code": {"show": False},
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ class UpdateRequest(CustomComponent):
|
||||||
"url": {"display_name": "URL", "info": "The URL to make the request to."},
|
"url": {"display_name": "URL", "info": "The URL to make the request to."},
|
||||||
"headers": {
|
"headers": {
|
||||||
"display_name": "Headers",
|
"display_name": "Headers",
|
||||||
"field_type": "code",
|
"field_type": "NestedDict",
|
||||||
"info": "The headers to send with the request.",
|
"info": "The headers to send with the request.",
|
||||||
},
|
},
|
||||||
"code": {"show": False},
|
"code": {"show": False},
|
||||||
|
|
|
||||||
3
src/backend/langflow/field_typing/__init__.py
Normal file
3
src/backend/langflow/field_typing/__init__.py
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
from .base import NestedDict
|
||||||
|
|
||||||
|
__all__ = ["NestedDict"]
|
||||||
4
src/backend/langflow/field_typing/base.py
Normal file
4
src/backend/langflow/field_typing/base.py
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
from typing import Union, Dict
|
||||||
|
|
||||||
|
# Type alias for more complex dicts
|
||||||
|
NestedDict = Dict[str, Union[str, Dict]]
|
||||||
|
|
@ -122,6 +122,19 @@ class Vertex:
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
logger.debug(f"Error parsing code: {exc}")
|
logger.debug(f"Error parsing code: {exc}")
|
||||||
params[key] = value.get("value")
|
params[key] = value.get("value")
|
||||||
|
elif value.get("type") in ["dict", "NestedDict"]:
|
||||||
|
# When dict comes from the frontend it comes as a
|
||||||
|
# list of dicts, so we need to convert it to a dict
|
||||||
|
# before passing it to the build method
|
||||||
|
_value = value.get("value")
|
||||||
|
if isinstance(_value, list):
|
||||||
|
params[key] = {
|
||||||
|
k: v
|
||||||
|
for item in value.get("value", [])
|
||||||
|
for k, v in item.items()
|
||||||
|
}
|
||||||
|
elif isinstance(_value, dict):
|
||||||
|
params[key] = _value
|
||||||
else:
|
else:
|
||||||
params[key] = value.get("value")
|
params[key] = value.get("value")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -58,8 +58,12 @@ def get_memory_key(langchain_object):
|
||||||
"chat_history": "history",
|
"chat_history": "history",
|
||||||
"history": "chat_history",
|
"history": "chat_history",
|
||||||
}
|
}
|
||||||
memory_key = langchain_object.memory.memory_key
|
# Check if memory_key attribute exists
|
||||||
return mem_key_dict.get(memory_key)
|
if hasattr(langchain_object.memory, "memory_key"):
|
||||||
|
memory_key = langchain_object.memory.memory_key
|
||||||
|
return mem_key_dict.get(memory_key)
|
||||||
|
else:
|
||||||
|
return None # or some other default value or action
|
||||||
|
|
||||||
|
|
||||||
def update_memory_keys(langchain_object, possible_new_mem_key):
|
def update_memory_keys(langchain_object, possible_new_mem_key):
|
||||||
|
|
|
||||||
|
|
@ -290,31 +290,42 @@ def add_base_classes(frontend_node, return_types: List[str]):
|
||||||
|
|
||||||
def build_langchain_template_custom_component(custom_component: CustomComponent):
|
def build_langchain_template_custom_component(custom_component: CustomComponent):
|
||||||
"""Build a custom component template for the langchain"""
|
"""Build a custom component template for the langchain"""
|
||||||
logger.debug("Building custom component template")
|
try:
|
||||||
frontend_node = build_frontend_node(custom_component)
|
logger.debug("Building custom component template")
|
||||||
|
frontend_node = build_frontend_node(custom_component)
|
||||||
|
|
||||||
if frontend_node is None:
|
if frontend_node is None:
|
||||||
return None
|
return None
|
||||||
logger.debug("Built base frontend node")
|
logger.debug("Built base frontend node")
|
||||||
template_config = custom_component.build_template_config
|
template_config = custom_component.build_template_config
|
||||||
|
|
||||||
update_attributes(frontend_node, template_config)
|
update_attributes(frontend_node, template_config)
|
||||||
logger.debug("Updated attributes")
|
logger.debug("Updated attributes")
|
||||||
field_config = build_field_config(custom_component)
|
field_config = build_field_config(custom_component)
|
||||||
logger.debug("Built field config")
|
logger.debug("Built field config")
|
||||||
add_extra_fields(
|
add_extra_fields(
|
||||||
frontend_node, field_config, custom_component.get_function_entrypoint_args
|
frontend_node, field_config, custom_component.get_function_entrypoint_args
|
||||||
)
|
)
|
||||||
logger.debug("Added extra fields")
|
logger.debug("Added extra fields")
|
||||||
frontend_node = add_code_field(
|
frontend_node = add_code_field(
|
||||||
frontend_node, custom_component.code, field_config.get("code", {})
|
frontend_node, custom_component.code, field_config.get("code", {})
|
||||||
)
|
)
|
||||||
logger.debug("Added code field")
|
logger.debug("Added code field")
|
||||||
add_base_classes(
|
add_base_classes(
|
||||||
frontend_node, custom_component.get_function_entrypoint_return_type
|
frontend_node, custom_component.get_function_entrypoint_return_type
|
||||||
)
|
)
|
||||||
logger.debug("Added base classes")
|
logger.debug("Added base classes")
|
||||||
return frontend_node
|
return frontend_node
|
||||||
|
except Exception as exc:
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=400,
|
||||||
|
detail={
|
||||||
|
"error": (
|
||||||
|
"Invalid type convertion. Please check your code and try again."
|
||||||
|
),
|
||||||
|
"traceback": traceback.format_exc(),
|
||||||
|
},
|
||||||
|
) from exc
|
||||||
|
|
||||||
|
|
||||||
def load_files_from_path(path: str):
|
def load_files_from_path(path: str):
|
||||||
|
|
|
||||||
|
|
@ -77,9 +77,16 @@ def set_langchain_cache(settings):
|
||||||
import langchain
|
import langchain
|
||||||
from langflow.interface.importing.utils import import_class
|
from langflow.interface.importing.utils import import_class
|
||||||
|
|
||||||
cache_type = os.getenv("LANGFLOW_LANGCHAIN_CACHE")
|
if cache_type := os.getenv("LANGFLOW_LANGCHAIN_CACHE"):
|
||||||
cache_class = import_class(f"langchain.cache.{cache_type or settings.CACHE}")
|
try:
|
||||||
|
cache_class = import_class(
|
||||||
|
f"langchain.cache.{cache_type or settings.CACHE}"
|
||||||
|
)
|
||||||
|
|
||||||
logger.debug(f"Setting up LLM caching with {cache_class.__name__}")
|
logger.debug(f"Setting up LLM caching with {cache_class.__name__}")
|
||||||
langchain.llm_cache = cache_class()
|
langchain.llm_cache = cache_class()
|
||||||
logger.info(f"LLM caching setup with {cache_class.__name__}")
|
logger.info(f"LLM caching setup with {cache_class.__name__}")
|
||||||
|
except ImportError:
|
||||||
|
logger.warning(f"Could not import {cache_type}. ")
|
||||||
|
else:
|
||||||
|
logger.info("No LLM cache set.")
|
||||||
|
|
|
||||||
|
|
@ -146,9 +146,8 @@ def generate_result(langchain_object: Union[Chain, VectorStore], inputs: dict):
|
||||||
elif isinstance(langchain_object, Document):
|
elif isinstance(langchain_object, Document):
|
||||||
result = langchain_object.dict()
|
result = langchain_object.dict()
|
||||||
else:
|
else:
|
||||||
raise ValueError(
|
logger.warning(f"Unknown langchain_object type: {type(langchain_object)}")
|
||||||
f"Unknown langchain_object type: {type(langchain_object).__name__}"
|
result = langchain_object
|
||||||
)
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ class Settings(BaseSettings):
|
||||||
|
|
||||||
DEV: bool = False
|
DEV: bool = False
|
||||||
DATABASE_URL: Optional[str] = None
|
DATABASE_URL: Optional[str] = None
|
||||||
CACHE: str = "InMemoryCache"
|
CACHE: Optional[str] = None
|
||||||
REMOVE_API_KEYS: bool = False
|
REMOVE_API_KEYS: bool = False
|
||||||
COMPONENTS_PATH: List[str] = []
|
COMPONENTS_PATH: List[str] = []
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -140,13 +140,16 @@ class FrontendNode(BaseModel):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def handle_dict_type(field: TemplateField, _type: str) -> str:
|
def handle_dict_type(field: TemplateField, _type: str) -> str:
|
||||||
"""Handles 'dict' type by replacing it with 'code' or 'file' based on the field name."""
|
"""Handles 'dict' type by replacing it with 'code' or 'file' based on the field name."""
|
||||||
if "dict" in _type.lower():
|
if "dict" in _type.lower() and field.name == "dict_":
|
||||||
if field.name == "dict_":
|
field.field_type = "file"
|
||||||
field.field_type = "file"
|
field.suffixes = [".json", ".yaml", ".yml"]
|
||||||
field.suffixes = [".json", ".yaml", ".yml"]
|
field.file_types = ["json", "yaml", "yml"]
|
||||||
field.file_types = ["json", "yaml", "yml"]
|
elif (
|
||||||
else:
|
_type.startswith("Dict")
|
||||||
field.field_type = "code"
|
or _type.startswith("Mapping")
|
||||||
|
or _type.startswith("dict")
|
||||||
|
):
|
||||||
|
field.field_type = "dict"
|
||||||
return _type
|
return _type
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|
@ -240,20 +243,6 @@ class FrontendNode(BaseModel):
|
||||||
"description",
|
"description",
|
||||||
}
|
}
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def replace_dict_with_code_or_file(
|
|
||||||
field: TemplateField, _type: str, key: str
|
|
||||||
) -> str:
|
|
||||||
"""Replaces 'dict' type with 'code' or 'file'."""
|
|
||||||
if "dict" in _type.lower():
|
|
||||||
if key == "dict_":
|
|
||||||
field.field_type = "file"
|
|
||||||
field.suffixes = [".json", ".yaml", ".yml"]
|
|
||||||
field.file_types = ["json", "yaml", "yml"]
|
|
||||||
else:
|
|
||||||
field.field_type = "code"
|
|
||||||
return field.field_type
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def set_field_default_value(field: TemplateField, value: dict, key: str) -> None:
|
def set_field_default_value(field: TemplateField, value: dict, key: str) -> None:
|
||||||
"""Sets the field value with the default value if present."""
|
"""Sets the field value with the default value if present."""
|
||||||
|
|
|
||||||
|
|
@ -170,11 +170,11 @@ class DocumentLoaderFrontNode(FrontendNode):
|
||||||
# add a metadata field of type dict
|
# add a metadata field of type dict
|
||||||
self.template.add_field(
|
self.template.add_field(
|
||||||
TemplateField(
|
TemplateField(
|
||||||
field_type="code",
|
field_type="dict",
|
||||||
required=True,
|
required=True,
|
||||||
show=True,
|
show=True,
|
||||||
name="metadata",
|
name="metadata",
|
||||||
value="{}",
|
value={},
|
||||||
display_name="Metadata",
|
display_name="Metadata",
|
||||||
multiline=False,
|
multiline=False,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ class EmbeddingFrontendNode(FrontendNode):
|
||||||
if field.name == "headers":
|
if field.name == "headers":
|
||||||
field.show = False
|
field.show = False
|
||||||
if field.name == "model_kwargs":
|
if field.name == "model_kwargs":
|
||||||
field.field_type = "code"
|
field.field_type = "dict"
|
||||||
field.advanced = True
|
field.advanced = True
|
||||||
field.show = True
|
field.show = True
|
||||||
elif field.name in [
|
elif field.name in [
|
||||||
|
|
|
||||||
|
|
@ -153,10 +153,13 @@ class DictCodeFileFormatter(FieldFormatter):
|
||||||
key = field.name
|
key = field.name
|
||||||
value = field.to_dict()
|
value = field.to_dict()
|
||||||
_type = value["type"]
|
_type = value["type"]
|
||||||
if "dict" in _type.lower():
|
if "dict" in _type.lower() and key == "dict_":
|
||||||
if key == "dict_":
|
field.field_type = "file"
|
||||||
field.field_type = "file"
|
field.suffixes = [".json", ".yaml", ".yml"]
|
||||||
field.suffixes = [".json", ".yaml", ".yml"]
|
field.file_types = ["json", "yaml", "yml"]
|
||||||
field.file_types = ["json", "yaml", "yml"]
|
elif (
|
||||||
else:
|
_type.startswith("Dict")
|
||||||
field.field_type = "code"
|
or _type.startswith("Mapping")
|
||||||
|
or _type.startswith("dict")
|
||||||
|
):
|
||||||
|
field.field_type = "dict"
|
||||||
|
|
|
||||||
|
|
@ -131,7 +131,7 @@ class LLMFrontendNode(FrontendNode):
|
||||||
if display_name := display_names_dict.get(field.name):
|
if display_name := display_names_dict.get(field.name):
|
||||||
field.display_name = display_name
|
field.display_name = display_name
|
||||||
if field.name == "model_kwargs":
|
if field.name == "model_kwargs":
|
||||||
field.field_type = "code"
|
field.field_type = "dict"
|
||||||
field.advanced = True
|
field.advanced = True
|
||||||
field.show = True
|
field.show = True
|
||||||
elif field.name in [
|
elif field.name in [
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@ from langflow.template.template.base import Template
|
||||||
class PromptFrontendNode(FrontendNode):
|
class PromptFrontendNode(FrontendNode):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
|
def format_field(field: TemplateField, name: Optional[str] = None) -> None:
|
||||||
|
FrontendNode.format_field(field, name)
|
||||||
# if field.field_type == "StringPromptTemplate"
|
# if field.field_type == "StringPromptTemplate"
|
||||||
# change it to str
|
# change it to str
|
||||||
PROMPT_FIELDS = [
|
PROMPT_FIELDS = [
|
||||||
|
|
|
||||||
|
|
@ -21,5 +21,4 @@ class UtilitiesFrontendNode(FrontendNode):
|
||||||
field.field_type = "str"
|
field.field_type = "str"
|
||||||
|
|
||||||
if isinstance(field.value, dict):
|
if isinstance(field.value, dict):
|
||||||
field.field_type = "code"
|
|
||||||
field.value = orjson_dumps(field.value)
|
field.value = orjson_dumps(field.value)
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ class VectorStoreFrontendNode(FrontendNode):
|
||||||
# Add search_kwargs field
|
# Add search_kwargs field
|
||||||
extra_field = TemplateField(
|
extra_field = TemplateField(
|
||||||
name="search_kwargs",
|
name="search_kwargs",
|
||||||
field_type="code",
|
field_type="NestedDict",
|
||||||
required=False,
|
required=False,
|
||||||
placeholder="",
|
placeholder="",
|
||||||
show=True,
|
show=True,
|
||||||
|
|
|
||||||
|
|
@ -48,4 +48,14 @@ def python_function(text: str) -> str:
|
||||||
return text
|
return text
|
||||||
"""
|
"""
|
||||||
|
|
||||||
DIRECT_TYPES = ["str", "bool", "code", "int", "float", "Any", "prompt"]
|
DIRECT_TYPES = [
|
||||||
|
"str",
|
||||||
|
"bool",
|
||||||
|
"dict",
|
||||||
|
"int",
|
||||||
|
"float",
|
||||||
|
"Any",
|
||||||
|
"prompt",
|
||||||
|
"code",
|
||||||
|
"NestedDict",
|
||||||
|
]
|
||||||
|
|
|
||||||
|
|
@ -276,8 +276,6 @@ def format_dict(
|
||||||
value["password"] = is_password_field(key)
|
value["password"] = is_password_field(key)
|
||||||
value["multiline"] = is_multiline_field(key)
|
value["multiline"] = is_multiline_field(key)
|
||||||
|
|
||||||
replace_dict_type_with_code(value)
|
|
||||||
|
|
||||||
if key == "dict_":
|
if key == "dict_":
|
||||||
set_dict_file_attributes(value)
|
set_dict_file_attributes(value)
|
||||||
|
|
||||||
|
|
@ -407,14 +405,6 @@ def is_multiline_field(key: str) -> bool:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def replace_dict_type_with_code(value: Dict[str, Any]) -> None:
|
|
||||||
"""
|
|
||||||
Replaces the type value with 'code' if the type is a dict.
|
|
||||||
"""
|
|
||||||
if "dict" in value["type"].lower():
|
|
||||||
value["type"] = "code"
|
|
||||||
|
|
||||||
|
|
||||||
def set_dict_file_attributes(value: Dict[str, Any]) -> None:
|
def set_dict_file_attributes(value: Dict[str, Any]) -> None:
|
||||||
"""
|
"""
|
||||||
Sets the file attributes for the 'dict_' key.
|
Sets the file attributes for the 'dict_' key.
|
||||||
|
|
|
||||||
9
src/frontend/package-lock.json
generated
9
src/frontend/package-lock.json
generated
|
|
@ -58,6 +58,7 @@
|
||||||
"react-syntax-highlighter": "^15.5.0",
|
"react-syntax-highlighter": "^15.5.0",
|
||||||
"react-tabs": "^6.0.2",
|
"react-tabs": "^6.0.2",
|
||||||
"react-tooltip": "^5.21.1",
|
"react-tooltip": "^5.21.1",
|
||||||
|
"react18-json-view": "^0.2.3",
|
||||||
"reactflow": "^11.8.3",
|
"reactflow": "^11.8.3",
|
||||||
"rehype-mathjax": "^4.0.3",
|
"rehype-mathjax": "^4.0.3",
|
||||||
"remark-gfm": "^3.0.1",
|
"remark-gfm": "^3.0.1",
|
||||||
|
|
@ -8872,6 +8873,14 @@
|
||||||
"react-dom": ">=16.6.0"
|
"react-dom": ">=16.6.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/react18-json-view": {
|
||||||
|
"version": "0.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/react18-json-view/-/react18-json-view-0.2.3.tgz",
|
||||||
|
"integrity": "sha512-FZlEWS6A3yf1CyuPRtxYrGNZVRvUT1jQvt/kS1C3SDrStwViENsAKhe3NANq37on9cPoNbLD8+KZB+EArNhuWQ==",
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": ">=16.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/reactflow": {
|
"node_modules/reactflow": {
|
||||||
"version": "11.8.3",
|
"version": "11.8.3",
|
||||||
"resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.8.3.tgz",
|
"resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.8.3.tgz",
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@
|
||||||
"react-syntax-highlighter": "^15.5.0",
|
"react-syntax-highlighter": "^15.5.0",
|
||||||
"react-tabs": "^6.0.2",
|
"react-tabs": "^6.0.2",
|
||||||
"react-tooltip": "^5.21.1",
|
"react-tooltip": "^5.21.1",
|
||||||
|
"react18-json-view": "^0.2.3",
|
||||||
"reactflow": "^11.8.3",
|
"reactflow": "^11.8.3",
|
||||||
"rehype-mathjax": "^4.0.3",
|
"rehype-mathjax": "^4.0.3",
|
||||||
"remark-gfm": "^3.0.1",
|
"remark-gfm": "^3.0.1",
|
||||||
|
|
|
||||||
|
|
@ -3,45 +3,78 @@
|
||||||
@tailwind utilities;
|
@tailwind utilities;
|
||||||
|
|
||||||
.App {
|
.App {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-logo {
|
.App-logo {
|
||||||
height: 40vmin;
|
height: 40vmin;
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-reduced-motion: no-preference) {
|
@media (prefers-reduced-motion: no-preference) {
|
||||||
.App-logo {
|
.App-logo {
|
||||||
animation: App-logo-spin infinite 20s linear;
|
animation: App-logo-spin infinite 20s linear;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-header {
|
.App-header {
|
||||||
background-color: #282c34;
|
background-color: #282c34;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
font-size: calc(10px + 2vmin);
|
font-size: calc(10px + 2vmin);
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.App-link {
|
.App-link {
|
||||||
color: #61dafb;
|
color: #61dafb;
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes App-logo-spin {
|
@keyframes App-logo-spin {
|
||||||
from {
|
from {
|
||||||
transform: rotate(0deg);
|
transform: rotate(0deg);
|
||||||
}
|
}
|
||||||
to {
|
to {
|
||||||
transform: rotate(360deg);
|
transform: rotate(360deg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: text-security-disc;
|
font-family: text-security-disc;
|
||||||
src: url("assets/text-security-disc.woff") format("woff");
|
src: url("assets/text-security-disc.woff") format("woff");
|
||||||
|
}
|
||||||
|
|
||||||
|
.json-view {
|
||||||
|
height: 370px !important;
|
||||||
|
background-color: #2c2c2c !important;
|
||||||
|
border-radius: 10px !important;
|
||||||
|
padding: 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jv-indent {
|
||||||
|
overflow-y: auto !important;
|
||||||
|
max-height: 310px !important;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jv-indent::-webkit-scrollbar {
|
||||||
|
width: 8px !important;
|
||||||
|
height: 8px !important;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jv-indent::-webkit-scrollbar-track {
|
||||||
|
background-color: #f1f1f1 !important;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jv-indent::-webkit-scrollbar-thumb {
|
||||||
|
background-color: #ccc !important;
|
||||||
|
border-radius: 999px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.jv-indent::-webkit-scrollbar-thumb:hover {
|
||||||
|
background-color: #bbb !important;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import React, {
|
||||||
import { Handle, Position, useUpdateNodeInternals } from "reactflow";
|
import { Handle, Position, useUpdateNodeInternals } from "reactflow";
|
||||||
import ShadTooltip from "../../../../components/ShadTooltipComponent";
|
import ShadTooltip from "../../../../components/ShadTooltipComponent";
|
||||||
import CodeAreaComponent from "../../../../components/codeAreaComponent";
|
import CodeAreaComponent from "../../../../components/codeAreaComponent";
|
||||||
|
import DictComponent from "../../../../components/dictComponent";
|
||||||
import Dropdown from "../../../../components/dropdownComponent";
|
import Dropdown from "../../../../components/dropdownComponent";
|
||||||
import FloatComponent from "../../../../components/floatComponent";
|
import FloatComponent from "../../../../components/floatComponent";
|
||||||
import IconComponent from "../../../../components/genericIconComponent";
|
import IconComponent from "../../../../components/genericIconComponent";
|
||||||
|
|
@ -16,6 +17,7 @@ import InputComponent from "../../../../components/inputComponent";
|
||||||
import InputFileComponent from "../../../../components/inputFileComponent";
|
import InputFileComponent from "../../../../components/inputFileComponent";
|
||||||
import InputListComponent from "../../../../components/inputListComponent";
|
import InputListComponent from "../../../../components/inputListComponent";
|
||||||
import IntComponent from "../../../../components/intComponent";
|
import IntComponent from "../../../../components/intComponent";
|
||||||
|
import KeypairListComponent from "../../../../components/keypairListComponent";
|
||||||
import PromptAreaComponent from "../../../../components/promptComponent";
|
import PromptAreaComponent from "../../../../components/promptComponent";
|
||||||
import TextAreaComponent from "../../../../components/textAreaComponent";
|
import TextAreaComponent from "../../../../components/textAreaComponent";
|
||||||
import ToggleShadComponent from "../../../../components/toggleShadComponent";
|
import ToggleShadComponent from "../../../../components/toggleShadComponent";
|
||||||
|
|
@ -24,7 +26,12 @@ import { TabsContext } from "../../../../contexts/tabsContext";
|
||||||
import { typesContext } from "../../../../contexts/typesContext";
|
import { typesContext } from "../../../../contexts/typesContext";
|
||||||
import { ParameterComponentType } from "../../../../types/components";
|
import { ParameterComponentType } from "../../../../types/components";
|
||||||
import { TabsState } from "../../../../types/tabs";
|
import { TabsState } from "../../../../types/tabs";
|
||||||
import { isValidConnection } from "../../../../utils/reactflowUtils";
|
import {
|
||||||
|
convertObjToArray,
|
||||||
|
convertValuesToNumbers,
|
||||||
|
hasDuplicateKeys,
|
||||||
|
isValidConnection,
|
||||||
|
} from "../../../../utils/reactflowUtils";
|
||||||
import {
|
import {
|
||||||
nodeColors,
|
nodeColors,
|
||||||
nodeIconsLucide,
|
nodeIconsLucide,
|
||||||
|
|
@ -74,13 +81,18 @@ export default function ParameterComponent({
|
||||||
|
|
||||||
const { data: myData } = useContext(typesContext);
|
const { data: myData } = useContext(typesContext);
|
||||||
|
|
||||||
const handleOnNewValue = (newValue: string | string[] | boolean): void => {
|
const handleOnNewValue = (
|
||||||
|
newValue: string | string[] | boolean | Object[]
|
||||||
|
): void => {
|
||||||
let newData = cloneDeep(data);
|
let newData = cloneDeep(data);
|
||||||
newData.node!.template[name].value = newValue;
|
newData.node!.template[name].value = newValue;
|
||||||
setData(newData);
|
setData(newData);
|
||||||
// Set state to pending
|
// Set state to pending
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
setTabsState((prev: TabsState) => {
|
setTabsState((prev: TabsState) => {
|
||||||
|
if (!prev[tabId]) {
|
||||||
|
return prev;
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
...prev,
|
...prev,
|
||||||
[tabId]: {
|
[tabId]: {
|
||||||
|
|
@ -93,6 +105,8 @@ export default function ParameterComponent({
|
||||||
renderTooltips();
|
renderTooltips();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const [errorDuplicateKey, setErrorDuplicateKey] = useState(false);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (name === "openai_api_base") console.log(info);
|
if (name === "openai_api_base") console.log(info);
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|
@ -214,6 +228,8 @@ export default function ParameterComponent({
|
||||||
type === "code" ||
|
type === "code" ||
|
||||||
type === "prompt" ||
|
type === "prompt" ||
|
||||||
type === "file" ||
|
type === "file" ||
|
||||||
|
type === "dict" ||
|
||||||
|
type === "NestedDict" ||
|
||||||
type === "int") &&
|
type === "int") &&
|
||||||
!optionalHandle ? (
|
!optionalHandle ? (
|
||||||
<></>
|
<></>
|
||||||
|
|
@ -343,11 +359,52 @@ export default function ParameterComponent({
|
||||||
field_name={name}
|
field_name={name}
|
||||||
setNodeClass={(nodeClass) => {
|
setNodeClass={(nodeClass) => {
|
||||||
data.node = nodeClass;
|
data.node = nodeClass;
|
||||||
|
const clone = cloneDeep(data);
|
||||||
|
clone.node = nodeClass;
|
||||||
|
setData(clone);
|
||||||
}}
|
}}
|
||||||
nodeClass={data.node}
|
nodeClass={data.node}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
value={data.node?.template[name].value ?? ""}
|
value={data.node?.template[name].value ?? ""}
|
||||||
onChange={handleOnNewValue}
|
onChange={(e) => {
|
||||||
|
handleOnNewValue(e);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
) : left === true && type === "NestedDict" ? (
|
||||||
|
<div className="mt-2 w-full">
|
||||||
|
<DictComponent
|
||||||
|
disabled={disabled}
|
||||||
|
editNode={false}
|
||||||
|
value={
|
||||||
|
data.node!.template[name].value ?? {
|
||||||
|
yourkey: "value",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onChange={(newValue) => {
|
||||||
|
data.node!.template[name].value = newValue;
|
||||||
|
handleOnNewValue(newValue);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
) : left === true && type === "dict" ? (
|
||||||
|
<div className="mt-2 w-full">
|
||||||
|
<KeypairListComponent
|
||||||
|
disabled={disabled}
|
||||||
|
editNode={false}
|
||||||
|
value={
|
||||||
|
data.node!.template[name].value?.length === 0 ||
|
||||||
|
!data.node!.template[name].value
|
||||||
|
? [{ "": "" }]
|
||||||
|
: convertObjToArray(data.node!.template[name].value)
|
||||||
|
}
|
||||||
|
duplicateKey={errorDuplicateKey}
|
||||||
|
onChange={(newValue) => {
|
||||||
|
const valueToNumbers = convertValuesToNumbers(newValue);
|
||||||
|
data.node!.template[name].value = valueToNumbers;
|
||||||
|
setErrorDuplicateKey(hasDuplicateKeys(valueToNumbers));
|
||||||
|
handleOnNewValue(valueToNumbers);
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
|
|
|
||||||
53
src/frontend/src/components/dictComponent/index.tsx
Normal file
53
src/frontend/src/components/dictComponent/index.tsx
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
import { useEffect } from "react";
|
||||||
|
import { DictComponentType } from "../../types/components";
|
||||||
|
|
||||||
|
import DictAreaModal from "../../modals/dictAreaModal";
|
||||||
|
import { classNames } from "../../utils/utils";
|
||||||
|
import { Input } from "../ui/input";
|
||||||
|
|
||||||
|
export default function DictComponent({
|
||||||
|
value,
|
||||||
|
onChange,
|
||||||
|
disabled,
|
||||||
|
editNode = false,
|
||||||
|
}: DictComponentType): JSX.Element {
|
||||||
|
useEffect(() => {
|
||||||
|
if (disabled) {
|
||||||
|
onChange([""]);
|
||||||
|
}
|
||||||
|
}, [disabled]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (value) onChange(value);
|
||||||
|
}, [value]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={classNames(
|
||||||
|
value.length > 1 && editNode ? "my-1" : "",
|
||||||
|
"flex flex-col gap-3"
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{
|
||||||
|
<div className="flex w-full gap-3">
|
||||||
|
<DictAreaModal
|
||||||
|
value={value}
|
||||||
|
onChange={(obj) => {
|
||||||
|
onChange(obj);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Input
|
||||||
|
type="text"
|
||||||
|
className={
|
||||||
|
editNode
|
||||||
|
? "input-edit-node input-disable pointer-events-none cursor-pointer"
|
||||||
|
: "input-disable pointer-events-none cursor-pointer"
|
||||||
|
}
|
||||||
|
placeholder="Click to edit your dictionary..."
|
||||||
|
/>
|
||||||
|
</DictAreaModal>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -19,7 +19,9 @@ export default function InputListComponent({
|
||||||
}, [disabled]);
|
}, [disabled]);
|
||||||
|
|
||||||
// @TODO Recursive Character Text Splitter - the value might be in string format, whereas the InputListComponent specifically requires an array format. To ensure smooth operation and prevent potential errors, it's crucial that we handle the conversion from a string to an array with the string as its element.
|
// @TODO Recursive Character Text Splitter - the value might be in string format, whereas the InputListComponent specifically requires an array format. To ensure smooth operation and prevent potential errors, it's crucial that we handle the conversion from a string to an array with the string as its element.
|
||||||
typeof value === "string" ? (value = [value]) : (value = value);
|
if (typeof value === "string") {
|
||||||
|
value = [value];
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
|
|
||||||
112
src/frontend/src/components/keypairListComponent/index.tsx
Normal file
112
src/frontend/src/components/keypairListComponent/index.tsx
Normal file
|
|
@ -0,0 +1,112 @@
|
||||||
|
import { useEffect } from "react";
|
||||||
|
import { KeyPairListComponentType } from "../../types/components";
|
||||||
|
|
||||||
|
import _ from "lodash";
|
||||||
|
import { classNames } from "../../utils/utils";
|
||||||
|
import IconComponent from "../genericIconComponent";
|
||||||
|
import { Input } from "../ui/input";
|
||||||
|
|
||||||
|
export default function KeypairListComponent({
|
||||||
|
value,
|
||||||
|
onChange,
|
||||||
|
disabled,
|
||||||
|
editNode = false,
|
||||||
|
duplicateKey,
|
||||||
|
}: KeyPairListComponentType): JSX.Element {
|
||||||
|
useEffect(() => {
|
||||||
|
if (disabled) {
|
||||||
|
onChange([""]);
|
||||||
|
}
|
||||||
|
}, [disabled]);
|
||||||
|
|
||||||
|
const handleChangeKey = (event, idx) => {
|
||||||
|
const newInputList = _.cloneDeep(value);
|
||||||
|
const oldKey = Object.keys(newInputList[idx])[0];
|
||||||
|
const updatedObj = { [event.target.value]: newInputList[idx][oldKey] };
|
||||||
|
newInputList[idx] = updatedObj;
|
||||||
|
onChange(newInputList);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleChangeValue = (newValue, idx) => {
|
||||||
|
const newInputList = _.cloneDeep(value);
|
||||||
|
const key = Object.keys(newInputList[idx])[0];
|
||||||
|
newInputList[idx][key] = newValue;
|
||||||
|
onChange(newInputList);
|
||||||
|
};
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (value) onChange(value);
|
||||||
|
}, [value]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={classNames(
|
||||||
|
value?.length > 1 && editNode ? "my-1" : "",
|
||||||
|
"flex flex-col gap-3"
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
{value?.map((obj, index) => {
|
||||||
|
return Object.keys(obj).map((key, idx) => {
|
||||||
|
return (
|
||||||
|
<div key={idx} className="flex w-full gap-3">
|
||||||
|
<Input
|
||||||
|
type="text"
|
||||||
|
value={key.trim()}
|
||||||
|
className={classNames(
|
||||||
|
editNode ? "input-edit-node" : "",
|
||||||
|
duplicateKey ? "input-invalid" : ""
|
||||||
|
)}
|
||||||
|
placeholder="Type key..."
|
||||||
|
onChange={(event) => handleChangeKey(event, index)}
|
||||||
|
onKeyDown={(e) => {
|
||||||
|
if (e.ctrlKey && e.key === "Backspace") {
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Input
|
||||||
|
type="text"
|
||||||
|
value={obj[key]}
|
||||||
|
className={editNode ? "input-edit-node" : ""}
|
||||||
|
placeholder="Type a value..."
|
||||||
|
onChange={(event) =>
|
||||||
|
handleChangeValue(event.target.value, index)
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
|
||||||
|
{index === value.length - 1 ? (
|
||||||
|
<button
|
||||||
|
onClick={() => {
|
||||||
|
let newInputList = _.cloneDeep(value);
|
||||||
|
newInputList.push({ "": "" });
|
||||||
|
onChange(newInputList);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<IconComponent
|
||||||
|
name="Plus"
|
||||||
|
className={"h-4 w-4 hover:text-accent-foreground"}
|
||||||
|
/>
|
||||||
|
</button>
|
||||||
|
) : (
|
||||||
|
<button
|
||||||
|
onClick={() => {
|
||||||
|
let newInputList = _.cloneDeep(value);
|
||||||
|
newInputList.splice(index, 1);
|
||||||
|
onChange(newInputList);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<IconComponent
|
||||||
|
name="X"
|
||||||
|
className="h-4 w-4 hover:text-status-red"
|
||||||
|
/>
|
||||||
|
</button>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -3,7 +3,7 @@ import { useEffect } from "react";
|
||||||
import { TypeModal } from "../../constants/enums";
|
import { TypeModal } from "../../constants/enums";
|
||||||
import { postValidatePrompt } from "../../controllers/API";
|
import { postValidatePrompt } from "../../controllers/API";
|
||||||
import GenericModal from "../../modals/genericModal";
|
import GenericModal from "../../modals/genericModal";
|
||||||
import { TextAreaComponentType } from "../../types/components";
|
import { PromptAreaComponentType } from "../../types/components";
|
||||||
import IconComponent from "../genericIconComponent";
|
import IconComponent from "../genericIconComponent";
|
||||||
|
|
||||||
export default function PromptAreaComponent({
|
export default function PromptAreaComponent({
|
||||||
|
|
@ -14,7 +14,7 @@ export default function PromptAreaComponent({
|
||||||
onChange,
|
onChange,
|
||||||
disabled,
|
disabled,
|
||||||
editNode = false,
|
editNode = false,
|
||||||
}: TextAreaComponentType): JSX.Element {
|
}: PromptAreaComponentType) {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (disabled) {
|
if (disabled) {
|
||||||
onChange("");
|
onChange("");
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ const DialogPortal = ({
|
||||||
...props
|
...props
|
||||||
}: DialogPrimitive.DialogPortalProps) => (
|
}: DialogPrimitive.DialogPortalProps) => (
|
||||||
<DialogPrimitive.Portal className={cn(className)} {...props}>
|
<DialogPrimitive.Portal className={cn(className)} {...props}>
|
||||||
<div className="fixed inset-0 z-50 flex items-start justify-center sm:items-center">
|
<div className="nopan nodrag noundo nocopy fixed inset-0 z-50 flex items-start justify-center sm:items-center">
|
||||||
{children}
|
{children}
|
||||||
</div>
|
</div>
|
||||||
</DialogPrimitive.Portal>
|
</DialogPrimitive.Portal>
|
||||||
|
|
@ -27,7 +27,7 @@ const DialogOverlay = React.forwardRef<
|
||||||
<DialogPrimitive.Overlay
|
<DialogPrimitive.Overlay
|
||||||
ref={ref}
|
ref={ref}
|
||||||
className={cn(
|
className={cn(
|
||||||
"noundo nocopy fixed inset-0 bottom-0 left-0 right-0 top-0 z-50 overflow-auto bg-blur-shared backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
"nopan nodrag noundo nocopy fixed inset-0 bottom-0 left-0 right-0 top-0 z-50 overflow-auto bg-blur-shared backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
{...props}
|
{...props}
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,9 @@ export const EDIT_DIALOG_SUBTITLE =
|
||||||
export const CODE_PROMPT_DIALOG_SUBTITLE =
|
export const CODE_PROMPT_DIALOG_SUBTITLE =
|
||||||
"Edit your Python code. This code snippet accepts module import and a single function definition. Make sure that your function returns a string.";
|
"Edit your Python code. This code snippet accepts module import and a single function definition. Make sure that your function returns a string.";
|
||||||
|
|
||||||
|
export const CODE_DICT_DIALOG_SUBTITLE =
|
||||||
|
"Edit your dictionary. This dialog allows you to create your own customized dictionary. You can add as many key-value pairs as you want. While in edit mode, you can enter ({}) or ([]), and this will result in adding a new object or array.";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The base text for subtitle of Prompt Dialog
|
* The base text for subtitle of Prompt Dialog
|
||||||
* @constant
|
* @constant
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { InfinityIcon } from "lucide-react";
|
||||||
import { forwardRef } from "react";
|
import { forwardRef } from "react";
|
||||||
|
|
||||||
export const GradientSparkles = forwardRef<
|
export const GradientSparkles = forwardRef<
|
||||||
|
|
@ -14,26 +15,7 @@ export const GradientSparkles = forwardRef<
|
||||||
</linearGradient>
|
</linearGradient>
|
||||||
</defs>
|
</defs>
|
||||||
</svg>
|
</svg>
|
||||||
{/* this svg comes from the source code of lucide,
|
<InfinityIcon stroke="url(#grad1)" ref={ref} {...props} />
|
||||||
we do not use the import because it crashes the ui (why? no one knows...).
|
|
||||||
source code from the used svg:
|
|
||||||
https://github.com/lucide-icons/lucide/blob/a4076db69b52ff0debc383f76d4d671c3bad5345/icons/infinity.svg?short_path=f79de91
|
|
||||||
*/}
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="24"
|
|
||||||
height="24"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
fill="none"
|
|
||||||
stroke-width="2"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
stroke="url(#grad1)"
|
|
||||||
ref={ref}
|
|
||||||
{...props}
|
|
||||||
>
|
|
||||||
<path d="M12 12c-2-2.67-4-4-6-4a4 4 0 1 0 0 8c2 0 4-1.33 6-4Zm0 0c2 2.67 4 4 6 4a4 4 0 0 0 0-8c-2 0-4 1.33-6 4Z" />
|
|
||||||
</svg>
|
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,14 @@
|
||||||
import { cloneDeep } from "lodash";
|
import { cloneDeep } from "lodash";
|
||||||
import { ReactNode, forwardRef, useContext, useEffect, useState } from "react";
|
import {
|
||||||
|
ReactNode,
|
||||||
|
forwardRef,
|
||||||
|
useContext,
|
||||||
|
useEffect,
|
||||||
|
useRef,
|
||||||
|
useState,
|
||||||
|
} from "react";
|
||||||
import CodeAreaComponent from "../../components/codeAreaComponent";
|
import CodeAreaComponent from "../../components/codeAreaComponent";
|
||||||
|
import DictComponent from "../../components/dictComponent";
|
||||||
import Dropdown from "../../components/dropdownComponent";
|
import Dropdown from "../../components/dropdownComponent";
|
||||||
import FloatComponent from "../../components/floatComponent";
|
import FloatComponent from "../../components/floatComponent";
|
||||||
import IconComponent from "../../components/genericIconComponent";
|
import IconComponent from "../../components/genericIconComponent";
|
||||||
|
|
@ -8,6 +16,7 @@ import InputComponent from "../../components/inputComponent";
|
||||||
import InputFileComponent from "../../components/inputFileComponent";
|
import InputFileComponent from "../../components/inputFileComponent";
|
||||||
import InputListComponent from "../../components/inputListComponent";
|
import InputListComponent from "../../components/inputListComponent";
|
||||||
import IntComponent from "../../components/intComponent";
|
import IntComponent from "../../components/intComponent";
|
||||||
|
import KeypairListComponent from "../../components/keypairListComponent";
|
||||||
import PromptAreaComponent from "../../components/promptComponent";
|
import PromptAreaComponent from "../../components/promptComponent";
|
||||||
import TextAreaComponent from "../../components/textAreaComponent";
|
import TextAreaComponent from "../../components/textAreaComponent";
|
||||||
import ToggleShadComponent from "../../components/toggleShadComponent";
|
import ToggleShadComponent from "../../components/toggleShadComponent";
|
||||||
|
|
@ -26,6 +35,10 @@ import { TabsContext } from "../../contexts/tabsContext";
|
||||||
import { typesContext } from "../../contexts/typesContext";
|
import { typesContext } from "../../contexts/typesContext";
|
||||||
import { NodeDataType } from "../../types/flow";
|
import { NodeDataType } from "../../types/flow";
|
||||||
import { TabsState } from "../../types/tabs";
|
import { TabsState } from "../../types/tabs";
|
||||||
|
import {
|
||||||
|
convertObjToArray,
|
||||||
|
hasDuplicateKeys,
|
||||||
|
} from "../../utils/reactflowUtils";
|
||||||
import { classNames } from "../../utils/utils";
|
import { classNames } from "../../utils/utils";
|
||||||
import BaseModal from "../baseModal";
|
import BaseModal from "../baseModal";
|
||||||
|
|
||||||
|
|
@ -45,43 +58,62 @@ const EditNodeModal = forwardRef(
|
||||||
ref
|
ref
|
||||||
) => {
|
) => {
|
||||||
const [modalOpen, setModalOpen] = useState(false);
|
const [modalOpen, setModalOpen] = useState(false);
|
||||||
const [myData, setMyData] = useState(data);
|
|
||||||
const { setTabsState, tabId } = useContext(TabsContext);
|
const { setTabsState, tabId } = useContext(TabsContext);
|
||||||
const { reactFlowInstance } = useContext(typesContext);
|
const { reactFlowInstance } = useContext(typesContext);
|
||||||
|
const myData = useRef(data);
|
||||||
|
|
||||||
let disabled =
|
let disabled =
|
||||||
reactFlowInstance
|
reactFlowInstance
|
||||||
?.getEdges()
|
?.getEdges()
|
||||||
.some((edge) => edge.targetHandle === data.id) ?? false;
|
.some((edge) => edge.targetHandle === data.id) ?? false;
|
||||||
|
|
||||||
function changeAdvanced(templateParam: string): void {
|
function changeAdvanced(n) {
|
||||||
setMyData((old) => {
|
let newData = cloneDeep(data);
|
||||||
let newData = cloneDeep(old);
|
newData.node!.template[n].advanced = !newData.node!.template[n].advanced;
|
||||||
newData.node!.template[templateParam].advanced =
|
myData.current = newData;
|
||||||
!newData.node!.template[templateParam].advanced;
|
|
||||||
return newData;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleOnNewValue = (
|
const handleOnNewValue = (newValue: any, name) => {
|
||||||
newValue: string | string[] | boolean,
|
let newData = cloneDeep(data);
|
||||||
name: string
|
newData.node!.template[name].value = newValue;
|
||||||
) => {
|
myData.current = newData;
|
||||||
setMyData((old) => {
|
|
||||||
let newData = cloneDeep(old);
|
|
||||||
newData.node!.template[name].value = newValue;
|
|
||||||
return newData;
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setMyData(data); // reset data to what it is on node when opening modal
|
myData.current = data;
|
||||||
}, [modalOpen]);
|
}, [modalOpen]);
|
||||||
|
|
||||||
|
const [obj, setObj] = useState({
|
||||||
|
arr: ["test", 123456, false, null],
|
||||||
|
boolean: false,
|
||||||
|
longString:
|
||||||
|
"long string long string long string long string long string long string",
|
||||||
|
number: 123456,
|
||||||
|
try: {
|
||||||
|
k1: 123,
|
||||||
|
k2: "123",
|
||||||
|
k3: false,
|
||||||
|
},
|
||||||
|
string: "string",
|
||||||
|
});
|
||||||
|
|
||||||
|
const [errorDuplicateKey, setErrorDuplicateKey] = useState(false);
|
||||||
|
const [dictArr, setDictArr] = useState([
|
||||||
|
{ yourKey: "yourValue" },
|
||||||
|
] as Object[]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<BaseModal size="large-h-full" open={modalOpen} setOpen={setModalOpen}>
|
<BaseModal
|
||||||
|
size="large-h-full"
|
||||||
|
open={modalOpen}
|
||||||
|
setOpen={setModalOpen}
|
||||||
|
onChangeOpenModal={(open) => {
|
||||||
|
let newData = cloneDeep(data);
|
||||||
|
myData.current = newData;
|
||||||
|
}}
|
||||||
|
>
|
||||||
<BaseModal.Trigger>{children}</BaseModal.Trigger>
|
<BaseModal.Trigger>{children}</BaseModal.Trigger>
|
||||||
<BaseModal.Header description={myData.node?.description!}>
|
<BaseModal.Header description={myData.current.node?.description!}>
|
||||||
<span className="pr-2">{myData.type}</span>
|
<span className="pr-2">{myData.type}</span>
|
||||||
<Badge variant="secondary">ID: {myData.id}</Badge>
|
<Badge variant="secondary">ID: {myData.id}</Badge>
|
||||||
</BaseModal.Header>
|
</BaseModal.Header>
|
||||||
|
|
@ -116,64 +148,122 @@ const EditNodeModal = forwardRef(
|
||||||
</TableRow>
|
</TableRow>
|
||||||
</TableHeader>
|
</TableHeader>
|
||||||
<TableBody className="p-0">
|
<TableBody className="p-0">
|
||||||
{Object.keys(myData.node!.template)
|
{Object.keys(myData.current.node!.template)
|
||||||
.filter(
|
.filter(
|
||||||
(templateParam) =>
|
(templateParam) =>
|
||||||
templateParam.charAt(0) !== "_" &&
|
templateParam.charAt(0) !== "_" &&
|
||||||
myData.node?.template[templateParam].show &&
|
myData.current.node?.template[templateParam].show &&
|
||||||
(myData.node.template[templateParam].type ===
|
(myData.current.node.template[templateParam]
|
||||||
"str" ||
|
.type === "str" ||
|
||||||
myData.node.template[templateParam].type ===
|
myData.current.node.template[templateParam]
|
||||||
"bool" ||
|
.type === "bool" ||
|
||||||
myData.node.template[templateParam].type ===
|
myData.current.node.template[templateParam]
|
||||||
"float" ||
|
.type === "float" ||
|
||||||
myData.node.template[templateParam].type ===
|
myData.current.node.template[templateParam]
|
||||||
"code" ||
|
.type === "code" ||
|
||||||
myData.node.template[templateParam].type ===
|
myData.current.node.template[templateParam]
|
||||||
"prompt" ||
|
.type === "prompt" ||
|
||||||
myData.node.template[templateParam].type ===
|
myData.current.node.template[templateParam]
|
||||||
"file" ||
|
.type === "file" ||
|
||||||
myData.node.template[templateParam].type ===
|
myData.current.node.template[templateParam]
|
||||||
"int")
|
.type === "int")
|
||||||
)
|
)
|
||||||
.map((templateParam, index) => (
|
.map((templateParam, index) => (
|
||||||
<TableRow key={index} className="h-10">
|
<TableRow key={index} className="h-10">
|
||||||
<TableCell className="truncate p-0 text-center text-sm text-foreground sm:px-3">
|
<TableCell className="truncate p-0 text-center text-sm text-foreground sm:px-3">
|
||||||
{myData.node?.template[templateParam].name
|
{myData.current.node?.template[templateParam].name
|
||||||
? myData.node.template[templateParam].name
|
? myData.current.node.template[templateParam]
|
||||||
: myData.node?.template[templateParam]
|
.name
|
||||||
|
: myData.current.node?.template[templateParam]
|
||||||
.display_name}
|
.display_name}
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className="w-[300px] p-0 text-center text-xs text-foreground ">
|
<TableCell className="w-[300px] p-0 text-center text-xs text-foreground ">
|
||||||
{myData.node?.template[templateParam].type ===
|
{myData.current.node?.template[templateParam]
|
||||||
"str" &&
|
.type === "str" &&
|
||||||
!myData.node.template[templateParam].options ? (
|
!myData.current.node.template[templateParam]
|
||||||
|
.options ? (
|
||||||
<div className="mx-auto">
|
<div className="mx-auto">
|
||||||
{myData.node.template[templateParam].list ? (
|
{myData.current.node.template[templateParam]
|
||||||
|
.list ? (
|
||||||
<InputListComponent
|
<InputListComponent
|
||||||
editNode={true}
|
editNode={true}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
value={
|
value={
|
||||||
!myData.node.template[templateParam]
|
!myData.current.node.template[
|
||||||
.value ||
|
templateParam
|
||||||
myData.node.template[templateParam]
|
].value ||
|
||||||
.value === ""
|
myData.current.node.template[
|
||||||
|
templateParam
|
||||||
|
].value === ""
|
||||||
? [""]
|
? [""]
|
||||||
: myData.node.template[templateParam]
|
: myData.current.node.template[
|
||||||
.value
|
templateParam
|
||||||
|
].value
|
||||||
}
|
}
|
||||||
onChange={(value: string[]) => {
|
onChange={(value: string[]) => {
|
||||||
handleOnNewValue(value, templateParam);
|
handleOnNewValue(value, templateParam);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
) : myData.node.template[templateParam]
|
) : myData.current.node?.template[
|
||||||
.multiline ? (
|
templateParam
|
||||||
|
].type === "NestedDict" ? (
|
||||||
|
<div className="mt-2 w-full">
|
||||||
|
<DictComponent
|
||||||
|
disabled={disabled}
|
||||||
|
editNode={true}
|
||||||
|
value={obj}
|
||||||
|
onChange={(newValue) => {
|
||||||
|
setObj(newValue);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
) : myData.current.node?.template[
|
||||||
|
templateParam
|
||||||
|
].type === "dict" ? (
|
||||||
|
<div className="mt-2 w-full">
|
||||||
|
<KeypairListComponent
|
||||||
|
disabled={disabled}
|
||||||
|
editNode={false}
|
||||||
|
value={
|
||||||
|
myData.current.node.template[
|
||||||
|
templateParam
|
||||||
|
].value?.length === 0 ||
|
||||||
|
!myData.current.node.template[
|
||||||
|
templateParam
|
||||||
|
].value
|
||||||
|
? dictArr
|
||||||
|
: convertObjToArray(
|
||||||
|
myData.current.node.template[
|
||||||
|
templateParam
|
||||||
|
].value
|
||||||
|
)
|
||||||
|
}
|
||||||
|
duplicateKey={errorDuplicateKey}
|
||||||
|
onChange={(newValue) => {
|
||||||
|
setErrorDuplicateKey(
|
||||||
|
hasDuplicateKeys(newValue)
|
||||||
|
);
|
||||||
|
if (hasDuplicateKeys(newValue)) {
|
||||||
|
setDictArr(newValue);
|
||||||
|
} else {
|
||||||
|
setDictArr(newValue);
|
||||||
|
myData.current.node!.template[
|
||||||
|
templateParam
|
||||||
|
].value = newValue;
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
) : myData.current.node.template[
|
||||||
|
templateParam
|
||||||
|
].multiline ? (
|
||||||
<TextAreaComponent
|
<TextAreaComponent
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
editNode={true}
|
editNode={true}
|
||||||
value={
|
value={
|
||||||
myData.node.template[templateParam]
|
myData.current.node.template[
|
||||||
.value ?? ""
|
templateParam
|
||||||
|
].value ?? ""
|
||||||
}
|
}
|
||||||
onChange={(value: string | string[]) => {
|
onChange={(value: string | string[]) => {
|
||||||
handleOnNewValue(value, templateParam);
|
handleOnNewValue(value, templateParam);
|
||||||
|
|
@ -184,12 +274,14 @@ const EditNodeModal = forwardRef(
|
||||||
editNode={true}
|
editNode={true}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
password={
|
password={
|
||||||
myData.node.template[templateParam]
|
myData.current.node.template[
|
||||||
.password ?? false
|
templateParam
|
||||||
|
].password ?? false
|
||||||
}
|
}
|
||||||
value={
|
value={
|
||||||
myData.node.template[templateParam]
|
myData.current.node.template[
|
||||||
.value ?? ""
|
templateParam
|
||||||
|
].value ?? ""
|
||||||
}
|
}
|
||||||
onChange={(value) => {
|
onChange={(value) => {
|
||||||
handleOnNewValue(value, templateParam);
|
handleOnNewValue(value, templateParam);
|
||||||
|
|
@ -197,14 +289,16 @@ const EditNodeModal = forwardRef(
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
) : myData.node?.template[templateParam].type ===
|
) : myData.current.node?.template[templateParam]
|
||||||
"bool" ? (
|
.type === "bool" ? (
|
||||||
<div className="ml-auto">
|
<div className="ml-auto">
|
||||||
{" "}
|
{" "}
|
||||||
<ToggleShadComponent
|
<ToggleShadComponent
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
enabled={
|
enabled={
|
||||||
myData.node.template[templateParam].value
|
myData.current.node.template[
|
||||||
|
templateParam
|
||||||
|
].value
|
||||||
}
|
}
|
||||||
setEnabled={(isEnabled) => {
|
setEnabled={(isEnabled) => {
|
||||||
handleOnNewValue(
|
handleOnNewValue(
|
||||||
|
|
@ -215,76 +309,84 @@ const EditNodeModal = forwardRef(
|
||||||
size="small"
|
size="small"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
) : myData.node?.template[templateParam].type ===
|
) : myData.current.node?.template[templateParam]
|
||||||
"float" ? (
|
.type === "float" ? (
|
||||||
<div className="mx-auto">
|
<div className="mx-auto">
|
||||||
<FloatComponent
|
<FloatComponent
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
editNode={true}
|
editNode={true}
|
||||||
value={
|
value={
|
||||||
myData.node.template[templateParam]
|
myData.current.node.template[
|
||||||
.value ?? ""
|
templateParam
|
||||||
|
].value ?? ""
|
||||||
}
|
}
|
||||||
onChange={(value) => {
|
onChange={(value) => {
|
||||||
handleOnNewValue(value, templateParam);
|
handleOnNewValue(value, templateParam);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
) : myData.node?.template[templateParam].type ===
|
) : myData.current.node?.template[templateParam]
|
||||||
"str" &&
|
.type === "str" &&
|
||||||
myData.node.template[templateParam].options ? (
|
myData.current.node.template[templateParam]
|
||||||
|
.options ? (
|
||||||
<div className="mx-auto">
|
<div className="mx-auto">
|
||||||
<Dropdown
|
<Dropdown
|
||||||
numberOfOptions={nodeLength}
|
numberOfOptions={nodeLength}
|
||||||
editNode={true}
|
editNode={true}
|
||||||
options={
|
options={
|
||||||
myData.node.template[templateParam]
|
myData.current.node.template[
|
||||||
.options
|
templateParam
|
||||||
|
].options
|
||||||
}
|
}
|
||||||
onSelect={(value) =>
|
onSelect={(value) =>
|
||||||
handleOnNewValue(value, templateParam)
|
handleOnNewValue(value, templateParam)
|
||||||
}
|
}
|
||||||
value={
|
value={
|
||||||
myData.node.template[templateParam]
|
myData.current.node.template[
|
||||||
.value ?? "Choose an option"
|
templateParam
|
||||||
|
].value ?? "Choose an option"
|
||||||
}
|
}
|
||||||
></Dropdown>
|
></Dropdown>
|
||||||
</div>
|
</div>
|
||||||
) : myData.node?.template[templateParam].type ===
|
) : myData.current.node?.template[templateParam]
|
||||||
"int" ? (
|
.type === "int" ? (
|
||||||
<div className="mx-auto">
|
<div className="mx-auto">
|
||||||
<IntComponent
|
<IntComponent
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
editNode={true}
|
editNode={true}
|
||||||
value={
|
value={
|
||||||
myData.node.template[templateParam]
|
myData.current.node.template[
|
||||||
.value ?? ""
|
templateParam
|
||||||
|
].value ?? ""
|
||||||
}
|
}
|
||||||
onChange={(value) => {
|
onChange={(value) => {
|
||||||
handleOnNewValue(value, templateParam);
|
handleOnNewValue(value, templateParam);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
) : myData.node?.template[templateParam].type ===
|
) : myData.current.node?.template[templateParam]
|
||||||
"file" ? (
|
.type === "file" ? (
|
||||||
<div className="mx-auto">
|
<div className="mx-auto">
|
||||||
<InputFileComponent
|
<InputFileComponent
|
||||||
editNode={true}
|
editNode={true}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
value={
|
value={
|
||||||
myData.node.template[templateParam]
|
myData.current.node.template[
|
||||||
.value ?? ""
|
templateParam
|
||||||
|
].value ?? ""
|
||||||
}
|
}
|
||||||
onChange={(value: string | string[]) => {
|
onChange={(value: string | string[]) => {
|
||||||
handleOnNewValue(value, templateParam);
|
handleOnNewValue(value, templateParam);
|
||||||
}}
|
}}
|
||||||
fileTypes={
|
fileTypes={
|
||||||
myData.node.template[templateParam]
|
myData.current.node.template[
|
||||||
.fileTypes
|
templateParam
|
||||||
|
].fileTypes
|
||||||
}
|
}
|
||||||
suffixes={
|
suffixes={
|
||||||
myData.node.template[templateParam]
|
myData.current.node.template[
|
||||||
.suffixes
|
templateParam
|
||||||
|
].suffixes
|
||||||
}
|
}
|
||||||
onFileChange={(filePath: string) => {
|
onFileChange={(filePath: string) => {
|
||||||
data.node!.template[
|
data.node!.template[
|
||||||
|
|
@ -293,28 +395,29 @@ const EditNodeModal = forwardRef(
|
||||||
}}
|
}}
|
||||||
></InputFileComponent>
|
></InputFileComponent>
|
||||||
</div>
|
</div>
|
||||||
) : myData.node?.template[templateParam].type ===
|
) : myData.current.node?.template[templateParam]
|
||||||
"prompt" ? (
|
.type === "prompt" ? (
|
||||||
<div className="mx-auto">
|
<div className="mx-auto">
|
||||||
<PromptAreaComponent
|
<PromptAreaComponent
|
||||||
field_name={templateParam}
|
field_name={templateParam}
|
||||||
editNode={true}
|
editNode={true}
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
nodeClass={myData.node}
|
nodeClass={myData.current.node}
|
||||||
setNodeClass={(nodeClass) => {
|
setNodeClass={(nodeClass) => {
|
||||||
myData.node = nodeClass;
|
myData.current.node = nodeClass;
|
||||||
}}
|
}}
|
||||||
value={
|
value={
|
||||||
myData.node.template[templateParam]
|
myData.current.node.template[
|
||||||
.value ?? ""
|
templateParam
|
||||||
|
].value ?? ""
|
||||||
}
|
}
|
||||||
onChange={(value: string | string[]) => {
|
onChange={(value: string | string[]) => {
|
||||||
handleOnNewValue(value, templateParam);
|
handleOnNewValue(value, templateParam);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
) : myData.node?.template[templateParam].type ===
|
) : myData.current.node?.template[templateParam]
|
||||||
"code" ? (
|
.type === "code" ? (
|
||||||
<div className="mx-auto">
|
<div className="mx-auto">
|
||||||
<CodeAreaComponent
|
<CodeAreaComponent
|
||||||
dynamic={
|
dynamic={
|
||||||
|
|
@ -328,16 +431,17 @@ const EditNodeModal = forwardRef(
|
||||||
disabled={disabled}
|
disabled={disabled}
|
||||||
editNode={true}
|
editNode={true}
|
||||||
value={
|
value={
|
||||||
myData.node.template[templateParam]
|
myData.current.node.template[
|
||||||
.value ?? ""
|
templateParam
|
||||||
|
].value ?? ""
|
||||||
}
|
}
|
||||||
onChange={(value: string | string[]) => {
|
onChange={(value: string | string[]) => {
|
||||||
handleOnNewValue(value, templateParam);
|
handleOnNewValue(value, templateParam);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
) : myData.node?.template[templateParam].type ===
|
) : myData.current.node?.template[templateParam]
|
||||||
"Any" ? (
|
.type === "Any" ? (
|
||||||
"-"
|
"-"
|
||||||
) : (
|
) : (
|
||||||
<div className="hidden"></div>
|
<div className="hidden"></div>
|
||||||
|
|
@ -347,8 +451,9 @@ const EditNodeModal = forwardRef(
|
||||||
<div className="items-center text-center">
|
<div className="items-center text-center">
|
||||||
<ToggleShadComponent
|
<ToggleShadComponent
|
||||||
enabled={
|
enabled={
|
||||||
!myData.node?.template[templateParam]
|
!myData.current.node?.template[
|
||||||
.advanced
|
templateParam
|
||||||
|
].advanced
|
||||||
}
|
}
|
||||||
setEnabled={(e) =>
|
setEnabled={(e) =>
|
||||||
changeAdvanced(templateParam)
|
changeAdvanced(templateParam)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
import { ReactNode } from "react";
|
import { ReactNode, useEffect } from "react";
|
||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import {
|
import {
|
||||||
|
|
@ -68,12 +68,16 @@ interface BaseModalProps {
|
||||||
| "large-h-full"
|
| "large-h-full"
|
||||||
| "small-h-full"
|
| "small-h-full"
|
||||||
| "medium-h-full";
|
| "medium-h-full";
|
||||||
|
|
||||||
|
disable?: boolean;
|
||||||
|
onChangeOpenModal?: (open: boolean) => void;
|
||||||
}
|
}
|
||||||
function BaseModal({
|
function BaseModal({
|
||||||
open,
|
open,
|
||||||
setOpen,
|
setOpen,
|
||||||
children,
|
children,
|
||||||
size = "large",
|
size = "large",
|
||||||
|
onChangeOpenModal,
|
||||||
}: BaseModalProps) {
|
}: BaseModalProps) {
|
||||||
const headerChild = React.Children.toArray(children).find(
|
const headerChild = React.Children.toArray(children).find(
|
||||||
(child) => (child as React.ReactElement).type === Header
|
(child) => (child as React.ReactElement).type === Header
|
||||||
|
|
@ -127,6 +131,12 @@ function BaseModal({
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (onChangeOpenModal) {
|
||||||
|
onChangeOpenModal(open);
|
||||||
|
}
|
||||||
|
}, [open]);
|
||||||
|
|
||||||
//UPDATE COLORS AND STYLE CLASSSES
|
//UPDATE COLORS AND STYLE CLASSSES
|
||||||
return (
|
return (
|
||||||
<Dialog open={open} onOpenChange={setOpen}>
|
<Dialog open={open} onOpenChange={setOpen}>
|
||||||
|
|
|
||||||
|
|
@ -164,18 +164,18 @@ export default function CodeAreaModal({
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className={
|
className={
|
||||||
"w-full transition-all delay-500 " +
|
"whitespace-break-spaces transition-all delay-500" +
|
||||||
(error?.detail.error !== undefined ? "h-2/6" : "h-0")
|
(error?.detail?.error !== undefined ? "h-2/6" : "h-0")
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<div className="mt-1 h-full w-full overflow-y-auto overflow-x-clip text-left custom-scroll">
|
<div className="mt-1 h-full max-h-[10rem] w-full overflow-y-auto overflow-x-clip text-left custom-scroll">
|
||||||
<h1 className="text-lg text-destructive">
|
<h1 className="text-lg text-destructive">
|
||||||
{error?.detail?.error}
|
{error?.detail?.error}
|
||||||
</h1>
|
</h1>
|
||||||
<div className="ml-2 w-full text-sm text-status-red word-break-break-word">
|
<div className="ml-2 w-full text-sm text-status-red word-break-break-word">
|
||||||
<pre className="w-full word-break-break-word">
|
<span className="w-full word-break-break-word">
|
||||||
{error?.detail?.traceback}
|
{error?.detail?.traceback}
|
||||||
</pre>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
67
src/frontend/src/modals/dictAreaModal/index.tsx
Normal file
67
src/frontend/src/modals/dictAreaModal/index.tsx
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
import "ace-builds/src-noconflict/ace";
|
||||||
|
import "ace-builds/src-noconflict/ext-language_tools";
|
||||||
|
import "ace-builds/src-noconflict/mode-python";
|
||||||
|
import "ace-builds/src-noconflict/theme-github";
|
||||||
|
import "ace-builds/src-noconflict/theme-twilight";
|
||||||
|
// import "ace-builds/webpack-resolver";
|
||||||
|
import { useEffect, useState } from "react";
|
||||||
|
import JsonView from "react18-json-view";
|
||||||
|
import "react18-json-view/src/dark.css";
|
||||||
|
import "react18-json-view/src/style.css";
|
||||||
|
import IconComponent from "../../components/genericIconComponent";
|
||||||
|
import { Button } from "../../components/ui/button";
|
||||||
|
import { CODE_DICT_DIALOG_SUBTITLE } from "../../constants/constants";
|
||||||
|
import BaseModal from "../baseModal";
|
||||||
|
|
||||||
|
export default function DictAreaModal({
|
||||||
|
children,
|
||||||
|
onChange,
|
||||||
|
value,
|
||||||
|
}): JSX.Element {
|
||||||
|
const [open, setOpen] = useState(false);
|
||||||
|
const [dictObj, setDictObj] = useState(value);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (value) setDictObj(value);
|
||||||
|
}, [value]);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<BaseModal size="medium-h-full" open={open} setOpen={setOpen}>
|
||||||
|
<BaseModal.Trigger>{children}</BaseModal.Trigger>
|
||||||
|
<BaseModal.Header description={CODE_DICT_DIALOG_SUBTITLE}>
|
||||||
|
<span className="pr-2">Edit Dictionary</span>
|
||||||
|
<IconComponent
|
||||||
|
name="BookMarked"
|
||||||
|
className="h-6 w-6 pl-1 text-primary "
|
||||||
|
aria-hidden="true"
|
||||||
|
/>
|
||||||
|
</BaseModal.Header>
|
||||||
|
<BaseModal.Content>
|
||||||
|
<div className="flex h-full w-full flex-col transition-all">
|
||||||
|
<JsonView
|
||||||
|
theme="vscode"
|
||||||
|
dark={true}
|
||||||
|
editable
|
||||||
|
enableClipboard
|
||||||
|
onEdit={(edit) => {
|
||||||
|
setDictObj(edit["src"]);
|
||||||
|
}}
|
||||||
|
src={dictObj}
|
||||||
|
/>
|
||||||
|
<div className="flex h-fit w-full justify-end">
|
||||||
|
<Button
|
||||||
|
className="mt-3"
|
||||||
|
type="submit"
|
||||||
|
onClick={() => {
|
||||||
|
onChange(dictObj);
|
||||||
|
setOpen(false);
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Save
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</BaseModal.Content>
|
||||||
|
</BaseModal>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
@ -122,9 +122,15 @@ export default function GenericModal({
|
||||||
|
|
||||||
function validatePrompt(closeModal: boolean): void {
|
function validatePrompt(closeModal: boolean): void {
|
||||||
//nodeClass is always null on tweaks
|
//nodeClass is always null on tweaks
|
||||||
|
|
||||||
postValidatePrompt(field_name, inputValue, nodeClass!)
|
postValidatePrompt(field_name, inputValue, nodeClass!)
|
||||||
.then((apiReturn) => {
|
.then((apiReturn) => {
|
||||||
if (apiReturn.data) {
|
if (apiReturn.data) {
|
||||||
|
setValue(inputValue);
|
||||||
|
apiReturn.data.frontend_node["template"]["template"]["value"] =
|
||||||
|
inputValue;
|
||||||
|
setNodeClass!(apiReturn?.data?.frontend_node);
|
||||||
|
|
||||||
let inputVariables = apiReturn.data.input_variables ?? [];
|
let inputVariables = apiReturn.data.input_variables ?? [];
|
||||||
if (inputVariables && inputVariables.length === 0) {
|
if (inputVariables && inputVariables.length === 0) {
|
||||||
setIsEdit(true);
|
setIsEdit(true);
|
||||||
|
|
@ -164,7 +170,11 @@ export default function GenericModal({
|
||||||
const [modalOpen, setModalOpen] = useState(false);
|
const [modalOpen, setModalOpen] = useState(false);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<BaseModal open={modalOpen} setOpen={setModalOpen}>
|
<BaseModal
|
||||||
|
onChangeOpenModal={(open) => {}}
|
||||||
|
open={modalOpen}
|
||||||
|
setOpen={setModalOpen}
|
||||||
|
>
|
||||||
<BaseModal.Trigger>{children}</BaseModal.Trigger>
|
<BaseModal.Trigger>{children}</BaseModal.Trigger>
|
||||||
<BaseModal.Header
|
<BaseModal.Header
|
||||||
description={(() => {
|
description={(() => {
|
||||||
|
|
@ -291,9 +301,7 @@ export default function GenericModal({
|
||||||
setModalOpen(false);
|
setModalOpen(false);
|
||||||
break;
|
break;
|
||||||
case TypeModal.PROMPT:
|
case TypeModal.PROMPT:
|
||||||
!inputValue || inputValue === ""
|
validatePrompt(false);
|
||||||
? setModalOpen(false)
|
|
||||||
: validatePrompt(false);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -1057,4 +1057,8 @@
|
||||||
.label-invalid{
|
.label-invalid{
|
||||||
@apply text-destructive
|
@apply text-destructive
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.input-invalid{
|
||||||
|
@apply border-destructive focus:ring-destructive focus:border-destructive
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,6 @@ pre {
|
||||||
animation: slideUp 300ms ease-out;
|
animation: slideUp 300ms ease-out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.gradient-end {
|
.gradient-end {
|
||||||
animation: gradient-motion-end 3s infinite forwards;
|
animation: gradient-motion-end 3s infinite forwards;
|
||||||
}
|
}
|
||||||
|
|
@ -50,4 +49,22 @@ select:-webkit-autofill:focus {
|
||||||
-webkit-box-shadow: 0 0 0px 1000px #fff6d0 inset;
|
-webkit-box-shadow: 0 0 0px 1000px #fff6d0 inset;
|
||||||
box-shadow: 0 0 0px 1000px #fff6d0 inset;
|
box-shadow: 0 0 0px 1000px #fff6d0 inset;
|
||||||
color: black;
|
color: black;
|
||||||
}
|
}
|
||||||
|
.ace_scrollbar::-webkit-scrollbar {
|
||||||
|
height: 8px;
|
||||||
|
width: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ace_scrollbar::-webkit-scrollbar-track {
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ace_scrollbar::-webkit-scrollbar-thumb {
|
||||||
|
background-color: #ccc;
|
||||||
|
border-radius: 999px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ace_scrollbar::-webkit-scrollbar-thumb:hover {
|
||||||
|
background-color: #bbb;
|
||||||
|
border-radius: 999px;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,21 @@ export type InputListComponentType = {
|
||||||
editNode?: boolean;
|
editNode?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type KeyPairListComponentType = {
|
||||||
|
value: any;
|
||||||
|
onChange: (value: Object[]) => void;
|
||||||
|
disabled: boolean;
|
||||||
|
editNode?: boolean;
|
||||||
|
duplicateKey?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type DictComponentType = {
|
||||||
|
value: any;
|
||||||
|
onChange: (value) => void;
|
||||||
|
disabled: boolean;
|
||||||
|
editNode?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
export type TextAreaComponentType = {
|
export type TextAreaComponentType = {
|
||||||
field_name?: string;
|
field_name?: string;
|
||||||
nodeClass?: APIClassType;
|
nodeClass?: APIClassType;
|
||||||
|
|
@ -64,6 +79,16 @@ export type TextAreaComponentType = {
|
||||||
editNode?: boolean;
|
editNode?: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type PromptAreaComponentType = {
|
||||||
|
field_name?: string;
|
||||||
|
nodeClass?: APIClassType;
|
||||||
|
setNodeClass?: (value: APIClassType) => void;
|
||||||
|
disabled: boolean;
|
||||||
|
onChange: (value: string[] | string) => void;
|
||||||
|
value: string;
|
||||||
|
editNode?: boolean;
|
||||||
|
};
|
||||||
|
|
||||||
export type CodeAreaComponentType = {
|
export type CodeAreaComponentType = {
|
||||||
disabled: boolean;
|
disabled: boolean;
|
||||||
onChange: (value: string[] | string) => void;
|
onChange: (value: string[] | string) => void;
|
||||||
|
|
|
||||||
|
|
@ -204,30 +204,49 @@ export function validateNode(
|
||||||
node: { template },
|
node: { template },
|
||||||
} = node.data;
|
} = node.data;
|
||||||
|
|
||||||
return Object.keys(template).reduce(
|
return Object.keys(template).reduce((errors: Array<string>, t) => {
|
||||||
(errors: Array<string>, t) =>
|
if (
|
||||||
errors.concat(
|
template[t].required &&
|
||||||
template[t].required &&
|
template[t].show &&
|
||||||
template[t].show &&
|
(template[t].value === undefined ||
|
||||||
(template[t].value === undefined ||
|
template[t].value === null ||
|
||||||
template[t].value === null ||
|
template[t].value === "") &&
|
||||||
template[t].value === "") &&
|
!reactFlowInstance
|
||||||
!reactFlowInstance
|
.getEdges()
|
||||||
.getEdges()
|
.some(
|
||||||
.some(
|
(edge) =>
|
||||||
(edge) =>
|
edge.targetHandle?.split("|")[1] === t &&
|
||||||
edge.targetHandle?.split("|")[1] === t &&
|
edge.targetHandle.split("|")[2] === node.id
|
||||||
edge.targetHandle.split("|")[2] === node.id
|
)
|
||||||
)
|
) {
|
||||||
? [
|
errors.push(
|
||||||
`${type} is missing ${
|
`${type} is missing ${
|
||||||
template.display_name || toNormalCase(template[t].name)
|
template.display_name || toNormalCase(template[t].name)
|
||||||
}.`,
|
}.`
|
||||||
]
|
);
|
||||||
: []
|
} else if (
|
||||||
),
|
template[t].type === "dict" &&
|
||||||
[] as string[]
|
template[t].required &&
|
||||||
);
|
template[t].show &&
|
||||||
|
(template[t].value !== undefined ||
|
||||||
|
template[t].value !== null ||
|
||||||
|
template[t].value !== "")
|
||||||
|
) {
|
||||||
|
if (hasDuplicateKeys(template[t].value))
|
||||||
|
errors.push(
|
||||||
|
`${type} (${
|
||||||
|
template.display_name || template[t].name
|
||||||
|
}) contains duplicate keys with the same values.`
|
||||||
|
);
|
||||||
|
if (hasEmptyKey(template[t].value))
|
||||||
|
errors.push(
|
||||||
|
`${type} (${
|
||||||
|
template.display_name || template[t].name
|
||||||
|
}) field must not be empty.`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return errors;
|
||||||
|
}, [] as string[]);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function validateNodes(reactFlowInstance: ReactFlowInstance) {
|
export function validateNodes(reactFlowInstance: ReactFlowInstance) {
|
||||||
|
|
@ -291,3 +310,58 @@ export function getConnectedNodes(
|
||||||
const targetId = edge.target;
|
const targetId = edge.target;
|
||||||
return nodes.filter((node) => node.id === targetId || node.id === sourceId);
|
return nodes.filter((node) => node.id === targetId || node.id === sourceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function convertObjToArray(singleObject) {
|
||||||
|
if (Array.isArray(singleObject)) return singleObject;
|
||||||
|
|
||||||
|
let arrConverted: any = [];
|
||||||
|
for (const key in singleObject) {
|
||||||
|
if (singleObject.hasOwnProperty(key)) {
|
||||||
|
const newObj = {};
|
||||||
|
newObj[key] = singleObject[key];
|
||||||
|
arrConverted.push(newObj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arrConverted;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function hasDuplicateKeys(array) {
|
||||||
|
const keys = {};
|
||||||
|
for (const obj of array) {
|
||||||
|
for (const key in obj) {
|
||||||
|
if (keys[key]) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
keys[key] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function hasEmptyKey(objArray) {
|
||||||
|
for (const obj of objArray) {
|
||||||
|
for (const key in obj) {
|
||||||
|
if (obj.hasOwnProperty(key) && key === "") {
|
||||||
|
return true; // Found an empty key
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false; // No empty keys found
|
||||||
|
}
|
||||||
|
|
||||||
|
export function convertValuesToNumbers(arr) {
|
||||||
|
return arr.map((obj) => {
|
||||||
|
const newObj = {};
|
||||||
|
for (const key in obj) {
|
||||||
|
if (obj.hasOwnProperty(key)) {
|
||||||
|
let value = obj[key];
|
||||||
|
if (/\s/g.test(value)) {
|
||||||
|
value = value.trim();
|
||||||
|
}
|
||||||
|
newObj[key] =
|
||||||
|
value === "" || isNaN(value) ? value.toString() : Number(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newObj;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import {
|
import {
|
||||||
ArrowUpToLine,
|
ArrowUpToLine,
|
||||||
Bell,
|
Bell,
|
||||||
|
BookMarked,
|
||||||
Check,
|
Check,
|
||||||
CheckCircle2,
|
CheckCircle2,
|
||||||
ChevronDown,
|
ChevronDown,
|
||||||
|
|
@ -307,5 +308,6 @@ export const nodeIconsLucide: iconsType = {
|
||||||
UserCog2,
|
UserCog2,
|
||||||
Key,
|
Key,
|
||||||
Unplug,
|
Unplug,
|
||||||
|
BookMarked,
|
||||||
ChevronUp,
|
ChevronUp,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,98 +1,6 @@
|
||||||
from fastapi.testclient import TestClient
|
from fastapi.testclient import TestClient
|
||||||
|
|
||||||
|
|
||||||
# def test_hugging_face_hub(client: TestClient):
|
|
||||||
# response = client.get("api/v1/all")
|
|
||||||
# assert response.status_code == 200
|
|
||||||
# json_response = response.json()
|
|
||||||
# language_models = json_response["llms"]
|
|
||||||
|
|
||||||
# model = language_models["HuggingFaceHub"]
|
|
||||||
# template = model["template"]
|
|
||||||
|
|
||||||
# assert template["cache"] == {
|
|
||||||
# "required": False,
|
|
||||||
# "placeholder": "",
|
|
||||||
# "show": False,
|
|
||||||
# "multiline": False,
|
|
||||||
# "password": False,
|
|
||||||
# "name": "cache",
|
|
||||||
# "type": "bool",
|
|
||||||
# "list": False,
|
|
||||||
# "advanced": False,
|
|
||||||
# }
|
|
||||||
# assert template["verbose"] == {
|
|
||||||
# "required": False,
|
|
||||||
# "placeholder": "",
|
|
||||||
# "show": False,
|
|
||||||
# "multiline": False,
|
|
||||||
# "value": False,
|
|
||||||
# "password": False,
|
|
||||||
# "name": "verbose",
|
|
||||||
# "type": "bool",
|
|
||||||
# "list": False,
|
|
||||||
# "advanced": False,
|
|
||||||
# }
|
|
||||||
# assert template["client"] == {
|
|
||||||
# "required": False,
|
|
||||||
# "placeholder": "",
|
|
||||||
# "show": False,
|
|
||||||
# "multiline": False,
|
|
||||||
# "password": False,
|
|
||||||
# "name": "client",
|
|
||||||
# "type": "Any",
|
|
||||||
# "list": False,
|
|
||||||
# "advanced": False,
|
|
||||||
# }
|
|
||||||
# assert template["repo_id"] == {
|
|
||||||
# "required": False,
|
|
||||||
# "placeholder": "",
|
|
||||||
# "show": True,
|
|
||||||
# "multiline": False,
|
|
||||||
# "value": "gpt2",
|
|
||||||
# "password": False,
|
|
||||||
# "name": "repo_id",
|
|
||||||
# "type": "str",
|
|
||||||
# "list": False,
|
|
||||||
# "advanced": False,
|
|
||||||
# }
|
|
||||||
# assert template["task"] == {
|
|
||||||
# "required": True,
|
|
||||||
# "placeholder": "",
|
|
||||||
# "show": True,
|
|
||||||
# "multiline": False,
|
|
||||||
# "password": False,
|
|
||||||
# "options": ["text-generation", "text2text-generation"],
|
|
||||||
# "name": "task",
|
|
||||||
# "type": "str",
|
|
||||||
# "list": True,
|
|
||||||
# "advanced": True,
|
|
||||||
# }
|
|
||||||
# assert template["model_kwargs"] == {
|
|
||||||
# "required": False,
|
|
||||||
# "placeholder": "",
|
|
||||||
# "show": True,
|
|
||||||
# "multiline": False,
|
|
||||||
# "password": False,
|
|
||||||
# "name": "model_kwargs",
|
|
||||||
# "type": "code",
|
|
||||||
# "list": False,
|
|
||||||
# "advanced": True,
|
|
||||||
# }
|
|
||||||
# assert template["huggingfacehub_api_token"] == {
|
|
||||||
# "required": False,
|
|
||||||
# "placeholder": "",
|
|
||||||
# "show": True,
|
|
||||||
# "multiline": False,
|
|
||||||
# "password": True,
|
|
||||||
# "name": "huggingfacehub_api_token",
|
|
||||||
# "display_name": "HuggingFace Hub API Token",
|
|
||||||
# "type": "str",
|
|
||||||
# "list": False,
|
|
||||||
# "advanced": False,
|
|
||||||
# }
|
|
||||||
|
|
||||||
|
|
||||||
def test_openai(client: TestClient, logged_in_headers):
|
def test_openai(client: TestClient, logged_in_headers):
|
||||||
response = client.get("api/v1/all", headers=logged_in_headers)
|
response = client.get("api/v1/all", headers=logged_in_headers)
|
||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
|
|
@ -269,7 +177,7 @@ def test_openai(client: TestClient, logged_in_headers):
|
||||||
"multiline": False,
|
"multiline": False,
|
||||||
"password": False,
|
"password": False,
|
||||||
"name": "model_kwargs",
|
"name": "model_kwargs",
|
||||||
"type": "code",
|
"type": "dict",
|
||||||
"list": False,
|
"list": False,
|
||||||
"advanced": True,
|
"advanced": True,
|
||||||
"info": "",
|
"info": "",
|
||||||
|
|
@ -324,7 +232,7 @@ def test_openai(client: TestClient, logged_in_headers):
|
||||||
"multiline": False,
|
"multiline": False,
|
||||||
"password": False,
|
"password": False,
|
||||||
"name": "logit_bias",
|
"name": "logit_bias",
|
||||||
"type": "code",
|
"type": "dict",
|
||||||
"list": False,
|
"list": False,
|
||||||
"advanced": False,
|
"advanced": False,
|
||||||
"info": "",
|
"info": "",
|
||||||
|
|
@ -441,7 +349,7 @@ def test_chat_open_ai(client: TestClient, logged_in_headers):
|
||||||
"multiline": False,
|
"multiline": False,
|
||||||
"password": False,
|
"password": False,
|
||||||
"name": "model_kwargs",
|
"name": "model_kwargs",
|
||||||
"type": "code",
|
"type": "dict",
|
||||||
"list": False,
|
"list": False,
|
||||||
"advanced": True,
|
"advanced": True,
|
||||||
"info": "",
|
"info": "",
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ def test_prompt_template(client: TestClient, logged_in_headers):
|
||||||
"multiline": False,
|
"multiline": False,
|
||||||
"password": False,
|
"password": False,
|
||||||
"name": "partial_variables",
|
"name": "partial_variables",
|
||||||
"type": "code",
|
"type": "dict",
|
||||||
"list": False,
|
"list": False,
|
||||||
"advanced": False,
|
"advanced": False,
|
||||||
"info": "",
|
"info": "",
|
||||||
|
|
|
||||||
|
|
@ -135,7 +135,7 @@ def test_format_dict():
|
||||||
}
|
}
|
||||||
expected_output = {
|
expected_output = {
|
||||||
"field1": {
|
"field1": {
|
||||||
"type": "code", # Mapping type is replaced with dict which is replaced with code
|
"type": "dict[str, int]", # Mapping type is replaced with dict which is replaced with code
|
||||||
"required": False,
|
"required": False,
|
||||||
"list": False,
|
"list": False,
|
||||||
"show": False,
|
"show": False,
|
||||||
|
|
@ -249,7 +249,7 @@ def test_format_dict():
|
||||||
}
|
}
|
||||||
expected_output = {
|
expected_output = {
|
||||||
"field1": {
|
"field1": {
|
||||||
"type": "code",
|
"type": "Dict[str, int]",
|
||||||
"required": False,
|
"required": False,
|
||||||
"list": False,
|
"list": False,
|
||||||
"show": False,
|
"show": False,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue