AIEnthusiast369 commited on
Commit
9d1035f
·
1 Parent(s): 801bf2a

added translations and words

Browse files
Pipfile CHANGED
@@ -23,6 +23,7 @@ google-cloud-aiplatform = "*"
23
  langchain-groq = "*"
24
  streamlit-chat-widget = "*"
25
  streamlit-extras = "*"
 
26
 
27
  [dev-packages]
28
 
 
23
  langchain-groq = "*"
24
  streamlit-chat-widget = "*"
25
  streamlit-extras = "*"
26
+ streamlit-dynamic-filters = "*"
27
 
28
  [dev-packages]
29
 
Pipfile.lock CHANGED
@@ -1,7 +1,7 @@
1
  {
2
  "_meta": {
3
  "hash": {
4
- "sha256": "feb7be19a0e8951f78377dd715570e806cd94e61d68ca04316945190be063376"
5
  },
6
  "pipfile-spec": 6,
7
  "requires": {
@@ -256,11 +256,11 @@
256
  },
257
  "cachetools": {
258
  "hashes": [
259
- "sha256:70f238fbba50383ef62e55c6aff6d9673175fe59f7c6782c7a0b9e38f4a9df95",
260
- "sha256:b76651fdc3b24ead3c648bbdeeb940c1b04d365b38b4af66788f9ec4a81d42bb"
261
  ],
262
  "markers": "python_version >= '3.7'",
263
- "version": "==5.5.1"
264
  },
265
  "catalogue": {
266
  "hashes": [
@@ -1006,19 +1006,19 @@
1006
  },
1007
  "google-cloud-core": {
1008
  "hashes": [
1009
- "sha256:9b7749272a812bde58fff28868d0c5e2f585b82f37e09a1f6ed2d4d10f134073",
1010
- "sha256:a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61"
1011
  ],
1012
  "markers": "python_version >= '3.7'",
1013
- "version": "==2.4.1"
1014
  },
1015
  "google-cloud-resource-manager": {
1016
  "hashes": [
1017
- "sha256:4860c3ea9ace760b317ea90d4e27f1b32e54ededdcc340a7cb70c8ef238d8f7c",
1018
- "sha256:daa70a3a4704759d31f812ed221e3b6f7b660af30c7862e4a0060ea91291db30"
1019
  ],
1020
  "markers": "python_version >= '3.7'",
1021
- "version": "==1.14.0"
1022
  },
1023
  "google-cloud-storage": {
1024
  "hashes": [
@@ -1081,11 +1081,11 @@
1081
  "grpc"
1082
  ],
1083
  "hashes": [
1084
- "sha256:21398025365f138be356d5923e9168737d94d46a72aefee4a6110a1f23463c86",
1085
- "sha256:579de760800d13616f51cf8be00c876f00a9f146d3e6510e19d1f4111758b741"
1086
  ],
1087
  "markers": "python_version >= '3.7'",
1088
- "version": "==1.67.0"
1089
  },
1090
  "greenlet": {
1091
  "hashes": [
@@ -1663,12 +1663,12 @@
1663
  },
1664
  "langchain-mistralai": {
1665
  "hashes": [
1666
- "sha256:a7fde8094641e89309e2ee0db57fa06a1270b461c19d44e5d93e518270bbafee",
1667
- "sha256:a861c6a5858a933ce63abb2cf9ea59e91d87103da2ddf08694a69a26be339d35"
1668
  ],
1669
  "index": "pypi",
1670
  "markers": "python_version >= '3.9' and python_version < '4.0'",
1671
- "version": "==0.2.6"
1672
  },
1673
  "langchain-openai": {
1674
  "hashes": [
@@ -1722,11 +1722,11 @@
1722
  },
1723
  "langsmith": {
1724
  "hashes": [
1725
- "sha256:97f9bebe0b7cb0a4f278e6ff30ae7d5ededff3883b014442ec6d7d575b02a0f1",
1726
- "sha256:fbb9dd97b0f090219447fca9362698d07abaeda1da85aa7cc6ec6517b36581b1"
1727
  ],
1728
  "markers": "python_version >= '3.9' and python_version < '4.0'",
1729
- "version": "==0.3.8"
1730
  },
1731
  "language-data": {
1732
  "hashes": [
@@ -2874,91 +2874,107 @@
2874
  },
2875
  "propcache": {
2876
  "hashes": [
2877
- "sha256:03ff9d3f665769b2a85e6157ac8b439644f2d7fd17615a82fa55739bc97863f4",
2878
- "sha256:049324ee97bb67285b49632132db351b41e77833678432be52bdd0289c0e05e4",
2879
- "sha256:081a430aa8d5e8876c6909b67bd2d937bfd531b0382d3fdedb82612c618bc41a",
2880
- "sha256:0f022d381747f0dfe27e99d928e31bc51a18b65bb9e481ae0af1380a6725dd1f",
2881
- "sha256:12d1083f001ace206fe34b6bdc2cb94be66d57a850866f0b908972f90996b3e9",
2882
- "sha256:14d86fe14b7e04fa306e0c43cdbeebe6b2c2156a0c9ce56b815faacc193e320d",
2883
- "sha256:160291c60081f23ee43d44b08a7e5fb76681221a8e10b3139618c5a9a291b84e",
2884
- "sha256:1672137af7c46662a1c2be1e8dc78cb6d224319aaa40271c9257d886be4363a6",
2885
- "sha256:19a0f89a7bb9d8048d9c4370c9c543c396e894c76be5525f5e1ad287f1750ddf",
2886
- "sha256:1ac2f5fe02fa75f56e1ad473f1175e11f475606ec9bd0be2e78e4734ad575034",
2887
- "sha256:1cd9a1d071158de1cc1c71a26014dcdfa7dd3d5f4f88c298c7f90ad6f27bb46d",
2888
- "sha256:1ffc3cca89bb438fb9c95c13fc874012f7b9466b89328c3c8b1aa93cdcfadd16",
2889
- "sha256:297878dc9d0a334358f9b608b56d02e72899f3b8499fc6044133f0d319e2ec30",
2890
- "sha256:2d3af2e79991102678f53e0dbf4c35de99b6b8b58f29a27ca0325816364caaba",
2891
- "sha256:30b43e74f1359353341a7adb783c8f1b1c676367b011709f466f42fda2045e95",
2892
- "sha256:3156628250f46a0895f1f36e1d4fbe062a1af8718ec3ebeb746f1d23f0c5dc4d",
2893
- "sha256:31f5af773530fd3c658b32b6bdc2d0838543de70eb9a2156c03e410f7b0d3aae",
2894
- "sha256:3935bfa5fede35fb202c4b569bb9c042f337ca4ff7bd540a0aa5e37131659348",
2895
- "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2",
2896
- "sha256:3f77ce728b19cb537714499928fe800c3dda29e8d9428778fc7c186da4c09a64",
2897
- "sha256:4160d9283bd382fa6c0c2b5e017acc95bc183570cd70968b9202ad6d8fc48dce",
2898
- "sha256:4a571d97dbe66ef38e472703067021b1467025ec85707d57e78711c085984e54",
2899
- "sha256:4e6281aedfca15301c41f74d7005e6e3f4ca143584ba696ac69df4f02f40d629",
2900
- "sha256:52277518d6aae65536e9cea52d4e7fd2f7a66f4aa2d30ed3f2fcea620ace3c54",
2901
- "sha256:556fc6c10989f19a179e4321e5d678db8eb2924131e64652a51fe83e4c3db0e1",
2902
- "sha256:574faa3b79e8ebac7cb1d7930f51184ba1ccf69adfdec53a12f319a06030a68b",
2903
- "sha256:58791550b27d5488b1bb52bc96328456095d96206a250d28d874fafe11b3dfaf",
2904
- "sha256:5b750a8e5a1262434fb1517ddf64b5de58327f1adc3524a5e44c2ca43305eb0b",
2905
- "sha256:5d97151bc92d2b2578ff7ce779cdb9174337390a535953cbb9452fb65164c587",
2906
- "sha256:5eee736daafa7af6d0a2dc15cc75e05c64f37fc37bafef2e00d77c14171c2097",
2907
- "sha256:6445804cf4ec763dc70de65a3b0d9954e868609e83850a47ca4f0cb64bd79fea",
2908
- "sha256:647894f5ae99c4cf6bb82a1bb3a796f6e06af3caa3d32e26d2350d0e3e3faf24",
2909
- "sha256:66d4cfda1d8ed687daa4bc0274fcfd5267873db9a5bc0418c2da19273040eeb7",
2910
- "sha256:6a9a8c34fb7bb609419a211e59da8887eeca40d300b5ea8e56af98f6fbbb1541",
2911
- "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6",
2912
- "sha256:6b6fb63ae352e13748289f04f37868099e69dba4c2b3e271c46061e82c745634",
2913
- "sha256:70693319e0b8fd35dd863e3e29513875eb15c51945bf32519ef52927ca883bc3",
2914
- "sha256:781e65134efaf88feb447e8c97a51772aa75e48b794352f94cb7ea717dedda0d",
2915
- "sha256:819ce3b883b7576ca28da3861c7e1a88afd08cc8c96908e08a3f4dd64a228034",
2916
- "sha256:857112b22acd417c40fa4595db2fe28ab900c8c5fe4670c7989b1c0230955465",
2917
- "sha256:887d9b0a65404929641a9fabb6452b07fe4572b269d901d622d8a34a4e9043b2",
2918
- "sha256:8b3489ff1ed1e8315674d0775dc7d2195fb13ca17b3808721b54dbe9fd020faf",
2919
- "sha256:92fc4500fcb33899b05ba73276dfb684a20d31caa567b7cb5252d48f896a91b1",
2920
- "sha256:9403db39be1393618dd80c746cb22ccda168efce239c73af13c3763ef56ffc04",
2921
- "sha256:98110aa363f1bb4c073e8dcfaefd3a5cea0f0834c2aab23dda657e4dab2f53b5",
2922
- "sha256:999779addc413181912e984b942fbcc951be1f5b3663cd80b2687758f434c583",
2923
- "sha256:9caac6b54914bdf41bcc91e7eb9147d331d29235a7c967c150ef5df6464fd1bb",
2924
- "sha256:a7a078f5d37bee6690959c813977da5291b24286e7b962e62a94cec31aa5188b",
2925
- "sha256:a7e65eb5c003a303b94aa2c3852ef130230ec79e349632d030e9571b87c4698c",
2926
- "sha256:a96dc1fa45bd8c407a0af03b2d5218392729e1822b0c32e62c5bf7eeb5fb3958",
2927
- "sha256:aca405706e0b0a44cc6bfd41fbe89919a6a56999157f6de7e182a990c36e37bc",
2928
- "sha256:accb6150ce61c9c4b7738d45550806aa2b71c7668c6942f17b0ac182b6142fd4",
2929
- "sha256:ad1af54a62ffe39cf34db1aa6ed1a1873bd548f6401db39d8e7cd060b9211f82",
2930
- "sha256:ae1aa1cd222c6d205853b3013c69cd04515f9d6ab6de4b0603e2e1c33221303e",
2931
- "sha256:b2d0a12018b04f4cb820781ec0dffb5f7c7c1d2a5cd22bff7fb055a2cb19ebce",
2932
- "sha256:b480c6a4e1138e1aa137c0079b9b6305ec6dcc1098a8ca5196283e8a49df95a9",
2933
- "sha256:b74c261802d3d2b85c9df2dfb2fa81b6f90deeef63c2db9f0e029a3cac50b518",
2934
- "sha256:ba278acf14471d36316159c94a802933d10b6a1e117b8554fe0d0d9b75c9d536",
2935
- "sha256:bb6178c241278d5fe853b3de743087be7f5f4c6f7d6d22a3b524d323eecec505",
2936
- "sha256:bf72af5e0fb40e9babf594308911436c8efde3cb5e75b6f206c34ad18be5c052",
2937
- "sha256:bfd3223c15bebe26518d58ccf9a39b93948d3dcb3e57a20480dfdd315356baff",
2938
- "sha256:c214999039d4f2a5b2073ac506bba279945233da8c786e490d411dfc30f855c1",
2939
- "sha256:c2f992c07c0fca81655066705beae35fc95a2fa7366467366db627d9f2ee097f",
2940
- "sha256:cba4cfa1052819d16699e1d55d18c92b6e094d4517c41dd231a8b9f87b6fa681",
2941
- "sha256:cea7daf9fc7ae6687cf1e2c049752f19f146fdc37c2cc376e7d0032cf4f25347",
2942
- "sha256:cf6c4150f8c0e32d241436526f3c3f9cbd34429492abddbada2ffcff506c51af",
2943
- "sha256:d09c333d36c1409d56a9d29b3a1b800a42c76a57a5a8907eacdbce3f18768246",
2944
- "sha256:d27b84d5880f6d8aa9ae3edb253c59d9f6642ffbb2c889b78b60361eed449787",
2945
- "sha256:d2ccec9ac47cf4e04897619c0e0c1a48c54a71bdf045117d3a26f80d38ab1fb0",
2946
- "sha256:d71264a80f3fcf512eb4f18f59423fe82d6e346ee97b90625f283df56aee103f",
2947
- "sha256:d93f3307ad32a27bda2e88ec81134b823c240aa3abb55821a8da553eed8d9439",
2948
- "sha256:d9631c5e8b5b3a0fda99cb0d29c18133bca1e18aea9effe55adb3da1adef80d3",
2949
- "sha256:ddfab44e4489bd79bda09d84c430677fc7f0a4939a73d2bba3073036f487a0a6",
2950
- "sha256:e7048abd75fe40712005bcfc06bb44b9dfcd8e101dda2ecf2f5aa46115ad07ca",
2951
- "sha256:e73091191e4280403bde6c9a52a6999d69cdfde498f1fdf629105247599b57ec",
2952
- "sha256:e800776a79a5aabdb17dcc2346a7d66d0777e942e4cd251defeb084762ecd17d",
2953
- "sha256:edc9fc7051e3350643ad929df55c451899bb9ae6d24998a949d2e4c87fb596d3",
2954
- "sha256:f089118d584e859c62b3da0892b88a83d611c2033ac410e929cb6754eec0ed16",
2955
- "sha256:f174bbd484294ed9fdf09437f889f95807e5f229d5d93588d34e92106fbf6717",
2956
- "sha256:f508b0491767bb1f2b87fdfacaba5f7eddc2f867740ec69ece6d1946d29029a6",
2957
- "sha256:f7a31fc1e1bd362874863fdeed71aed92d348f5336fd84f2197ba40c59f061bd",
2958
- "sha256:f9479aa06a793c5aeba49ce5c5692ffb51fcd9a7016e017d555d5e2b0045d212"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2959
  ],
2960
  "markers": "python_version >= '3.9'",
2961
- "version": "==0.2.1"
2962
  },
2963
  "proto-plus": {
2964
  "hashes": [
@@ -3520,112 +3536,112 @@
3520
  },
3521
  "rpds-py": {
3522
  "hashes": [
3523
- "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518",
3524
- "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059",
3525
- "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61",
3526
- "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5",
3527
- "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9",
3528
- "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543",
3529
- "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2",
3530
- "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a",
3531
- "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d",
3532
- "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56",
3533
- "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d",
3534
- "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd",
3535
- "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b",
3536
- "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4",
3537
- "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99",
3538
- "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d",
3539
- "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd",
3540
- "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe",
3541
- "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1",
3542
- "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e",
3543
- "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f",
3544
- "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3",
3545
- "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca",
3546
- "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d",
3547
- "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e",
3548
- "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc",
3549
- "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea",
3550
- "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38",
3551
- "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b",
3552
- "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c",
3553
- "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff",
3554
- "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723",
3555
- "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e",
3556
- "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493",
3557
- "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6",
3558
- "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83",
3559
- "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091",
3560
- "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1",
3561
- "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627",
3562
- "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1",
3563
- "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728",
3564
- "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16",
3565
- "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c",
3566
- "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45",
3567
- "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7",
3568
- "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a",
3569
- "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730",
3570
- "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967",
3571
- "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25",
3572
- "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24",
3573
- "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055",
3574
- "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d",
3575
- "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0",
3576
- "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e",
3577
- "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7",
3578
- "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c",
3579
- "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f",
3580
- "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd",
3581
- "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652",
3582
- "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8",
3583
- "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11",
3584
- "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333",
3585
- "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96",
3586
- "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64",
3587
- "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b",
3588
- "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e",
3589
- "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c",
3590
- "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9",
3591
- "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec",
3592
- "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb",
3593
- "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37",
3594
- "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad",
3595
- "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9",
3596
- "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c",
3597
- "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf",
3598
- "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4",
3599
- "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f",
3600
- "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d",
3601
- "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09",
3602
- "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d",
3603
- "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566",
3604
- "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74",
3605
- "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338",
3606
- "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15",
3607
- "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c",
3608
- "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648",
3609
- "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84",
3610
- "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3",
3611
- "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123",
3612
- "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520",
3613
- "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831",
3614
- "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e",
3615
- "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf",
3616
- "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b",
3617
- "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2",
3618
- "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3",
3619
- "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130",
3620
- "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b",
3621
- "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de",
3622
- "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5",
3623
- "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d",
3624
- "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00",
3625
- "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e"
3626
  ],
3627
  "markers": "python_version >= '3.9'",
3628
- "version": "==0.22.3"
3629
  },
3630
  "rsa": {
3631
  "hashes": [
@@ -4058,12 +4074,12 @@
4058
  },
4059
  "streamlit": {
4060
  "hashes": [
4061
- "sha256:4e13c47b0385bd633cc2777cb5da277129edb774db417ee77d8f349e9c7357ba",
4062
- "sha256:f995642dfe14f5e93acf1956a909f17aa3c395d5aa0bc580461d7fc9a452bbb2"
4063
  ],
4064
  "index": "pypi",
4065
  "markers": "python_version >= '3.9' and python_full_version != '3.9.7'",
4066
- "version": "==1.42.1"
4067
  },
4068
  "streamlit-camera-input-live": {
4069
  "hashes": [
@@ -4090,6 +4106,14 @@
4090
  "markers": "python_version >= '3.6'",
4091
  "version": "==0.2.0"
4092
  },
 
 
 
 
 
 
 
 
4093
  "streamlit-embedcode": {
4094
  "hashes": [
4095
  "sha256:22a50eb43407bab3d0ed2d4b58e89819da477cd0592ef87edbd373c286712e3a",
 
1
  {
2
  "_meta": {
3
  "hash": {
4
+ "sha256": "a3dac077dd0eef36684b3dfeec4b9e84e302e95ae8d4038442c70becdeb5a6eb"
5
  },
6
  "pipfile-spec": 6,
7
  "requires": {
 
256
  },
257
  "cachetools": {
258
  "hashes": [
259
+ "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4",
260
+ "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"
261
  ],
262
  "markers": "python_version >= '3.7'",
263
+ "version": "==5.5.2"
264
  },
265
  "catalogue": {
266
  "hashes": [
 
1006
  },
1007
  "google-cloud-core": {
1008
  "hashes": [
1009
+ "sha256:7459c3e83de7cb8b9ecfec9babc910efb4314030c56dd798eaad12c426f7d180",
1010
+ "sha256:a4fcb0e2fcfd4bfe963837fad6d10943754fd79c1a50097d68540b6eb3d67f35"
1011
  ],
1012
  "markers": "python_version >= '3.7'",
1013
+ "version": "==2.4.2"
1014
  },
1015
  "google-cloud-resource-manager": {
1016
  "hashes": [
1017
+ "sha256:41e9e546aaa03d5160cdfa2341dbe81ef7596706c300a89b94c429f1f3411f87",
1018
+ "sha256:68340599f85ebf07a6e18487e460ea07cc15e132068f6b188786d01c2cf25518"
1019
  ],
1020
  "markers": "python_version >= '3.7'",
1021
+ "version": "==1.14.1"
1022
  },
1023
  "google-cloud-storage": {
1024
  "hashes": [
 
1081
  "grpc"
1082
  ],
1083
  "hashes": [
1084
+ "sha256:95d38161f4f9af0d9423eed8fb7b64ffd2568c3464eb542ff02c5bfa1953ab3c",
1085
+ "sha256:aaf179b2f81df26dfadac95def3b16a95064c76a5f45f07e4c68a21bb371c4ac"
1086
  ],
1087
  "markers": "python_version >= '3.7'",
1088
+ "version": "==1.68.0"
1089
  },
1090
  "greenlet": {
1091
  "hashes": [
 
1663
  },
1664
  "langchain-mistralai": {
1665
  "hashes": [
1666
+ "sha256:2e8fc581f6c798b63a53fb8ec389f6e559027af1f3c01dfa3e228bdc58bafa9c",
1667
+ "sha256:957c99104679a4fa74df28f92de50367bd9d2001572a58c522d6761aa439f04b"
1668
  ],
1669
  "index": "pypi",
1670
  "markers": "python_version >= '3.9' and python_version < '4.0'",
1671
+ "version": "==0.2.7"
1672
  },
1673
  "langchain-openai": {
1674
  "hashes": [
 
1722
  },
1723
  "langsmith": {
1724
  "hashes": [
1725
+ "sha256:0e250cca50d1142d8bb00528da573c83bef1c41d78de43b2c032f8d11a308d04",
1726
+ "sha256:460e70d349282cf8d7d503cdf16684db58061d12a6a512daf626257a3218e0fb"
1727
  ],
1728
  "markers": "python_version >= '3.9' and python_version < '4.0'",
1729
+ "version": "==0.3.9"
1730
  },
1731
  "language-data": {
1732
  "hashes": [
 
2874
  },
2875
  "propcache": {
2876
  "hashes": [
2877
+ "sha256:02df07041e0820cacc8f739510078f2aadcfd3fc57eaeeb16d5ded85c872c89e",
2878
+ "sha256:03acd9ff19021bd0567582ac88f821b66883e158274183b9e5586f678984f8fe",
2879
+ "sha256:03c091bb752349402f23ee43bb2bff6bd80ccab7c9df6b88ad4322258d6960fc",
2880
+ "sha256:07700939b2cbd67bfb3b76a12e1412405d71019df00ca5697ce75e5ef789d829",
2881
+ "sha256:0c3e893c4464ebd751b44ae76c12c5f5c1e4f6cbd6fbf67e3783cd93ad221863",
2882
+ "sha256:119e244ab40f70a98c91906d4c1f4c5f2e68bd0b14e7ab0a06922038fae8a20f",
2883
+ "sha256:11ae6a8a01b8a4dc79093b5d3ca2c8a4436f5ee251a9840d7790dccbd96cb649",
2884
+ "sha256:15010f29fbed80e711db272909a074dc79858c6d28e2915704cfc487a8ac89c6",
2885
+ "sha256:19d36bb351ad5554ff20f2ae75f88ce205b0748c38b146c75628577020351e3c",
2886
+ "sha256:1c8f7d896a16da9455f882870a507567d4f58c53504dc2d4b1e1d386dfe4588a",
2887
+ "sha256:2383a17385d9800b6eb5855c2f05ee550f803878f344f58b6e194de08b96352c",
2888
+ "sha256:24c04f8fbf60094c531667b8207acbae54146661657a1b1be6d3ca7773b7a545",
2889
+ "sha256:2578541776769b500bada3f8a4eeaf944530516b6e90c089aa368266ed70c49e",
2890
+ "sha256:26a67e5c04e3119594d8cfae517f4b9330c395df07ea65eab16f3d559b7068fe",
2891
+ "sha256:2b975528998de037dfbc10144b8aed9b8dd5a99ec547f14d1cb7c5665a43f075",
2892
+ "sha256:2d15bc27163cd4df433e75f546b9ac31c1ba7b0b128bfb1b90df19082466ff57",
2893
+ "sha256:2d913d36bdaf368637b4f88d554fb9cb9d53d6920b9c5563846555938d5450bf",
2894
+ "sha256:3302c5287e504d23bb0e64d2a921d1eb4a03fb93a0a0aa3b53de059f5a5d737d",
2895
+ "sha256:36ca5e9a21822cc1746023e88f5c0af6fce3af3b85d4520efb1ce4221bed75cc",
2896
+ "sha256:3b812b3cb6caacd072276ac0492d249f210006c57726b6484a1e1805b3cfeea0",
2897
+ "sha256:3c6ec957025bf32b15cbc6b67afe233c65b30005e4c55fe5768e4bb518d712f1",
2898
+ "sha256:41de3da5458edd5678b0f6ff66691507f9885f5fe6a0fb99a5d10d10c0fd2d64",
2899
+ "sha256:42924dc0c9d73e49908e35bbdec87adedd651ea24c53c29cac103ede0ea1d340",
2900
+ "sha256:4544699674faf66fb6b4473a1518ae4999c1b614f0b8297b1cef96bac25381db",
2901
+ "sha256:46ed02532cb66612d42ae5c3929b5e98ae330ea0f3900bc66ec5f4862069519b",
2902
+ "sha256:49ea05212a529c2caffe411e25a59308b07d6e10bf2505d77da72891f9a05641",
2903
+ "sha256:4fa0e7c9c3cf7c276d4f6ab9af8adddc127d04e0fcabede315904d2ff76db626",
2904
+ "sha256:507c5357a8d8b4593b97fb669c50598f4e6cccbbf77e22fa9598aba78292b4d7",
2905
+ "sha256:549722908de62aa0b47a78b90531c022fa6e139f9166be634f667ff45632cc92",
2906
+ "sha256:58e6d2a5a7cb3e5f166fd58e71e9a4ff504be9dc61b88167e75f835da5764d07",
2907
+ "sha256:5a16167118677d94bb48bfcd91e420088854eb0737b76ec374b91498fb77a70e",
2908
+ "sha256:5d62c4f6706bff5d8a52fd51fec6069bef69e7202ed481486c0bc3874912c787",
2909
+ "sha256:5fa159dcee5dba00c1def3231c249cf261185189205073bde13797e57dd7540a",
2910
+ "sha256:6032231d4a5abd67c7f71168fd64a47b6b451fbcb91c8397c2f7610e67683810",
2911
+ "sha256:63f26258a163c34542c24808f03d734b338da66ba91f410a703e505c8485791d",
2912
+ "sha256:65a37714b8ad9aba5780325228598a5b16c47ba0f8aeb3dc0514701e4413d7c0",
2913
+ "sha256:67054e47c01b7b349b94ed0840ccae075449503cf1fdd0a1fdd98ab5ddc2667b",
2914
+ "sha256:67dda3c7325691c2081510e92c561f465ba61b975f481735aefdfc845d2cd043",
2915
+ "sha256:6985a593417cdbc94c7f9c3403747335e450c1599da1647a5af76539672464d3",
2916
+ "sha256:6a1948df1bb1d56b5e7b0553c0fa04fd0e320997ae99689488201f19fa90d2e7",
2917
+ "sha256:6b5b7fd6ee7b54e01759f2044f936dcf7dea6e7585f35490f7ca0420fe723c0d",
2918
+ "sha256:6c929916cbdb540d3407c66f19f73387f43e7c12fa318a66f64ac99da601bcdf",
2919
+ "sha256:6f4d7a7c0aff92e8354cceca6fe223973ddf08401047920df0fcb24be2bd5138",
2920
+ "sha256:728af36011bb5d344c4fe4af79cfe186729efb649d2f8b395d1572fb088a996c",
2921
+ "sha256:742840d1d0438eb7ea4280f3347598f507a199a35a08294afdcc560c3739989d",
2922
+ "sha256:75e872573220d1ee2305b35c9813626e620768248425f58798413e9c39741f46",
2923
+ "sha256:794c3dd744fad478b6232289c866c25406ecdfc47e294618bdf1697e69bd64a6",
2924
+ "sha256:7c0fdbdf6983526e269e5a8d53b7ae3622dd6998468821d660d0daf72779aefa",
2925
+ "sha256:7c5f5290799a3f6539cc5e6f474c3e5c5fbeba74a5e1e5be75587746a940d51e",
2926
+ "sha256:7c6e7e4f9167fddc438cd653d826f2222222564daed4116a02a184b464d3ef05",
2927
+ "sha256:7cedd25e5f678f7738da38037435b340694ab34d424938041aa630d8bac42663",
2928
+ "sha256:7e2e068a83552ddf7a39a99488bcba05ac13454fb205c847674da0352602082f",
2929
+ "sha256:8319293e85feadbbfe2150a5659dbc2ebc4afdeaf7d98936fb9a2f2ba0d4c35c",
2930
+ "sha256:8526b0941ec5a40220fc4dfde76aed58808e2b309c03e9fa8e2260083ef7157f",
2931
+ "sha256:8884ba1a0fe7210b775106b25850f5e5a9dc3c840d1ae9924ee6ea2eb3acbfe7",
2932
+ "sha256:8cb625bcb5add899cb8ba7bf716ec1d3e8f7cdea9b0713fa99eadf73b6d4986f",
2933
+ "sha256:8d663fd71491dde7dfdfc899d13a067a94198e90695b4321084c6e450743b8c7",
2934
+ "sha256:8ee1983728964d6070ab443399c476de93d5d741f71e8f6e7880a065f878e0b9",
2935
+ "sha256:997e7b8f173a391987df40f3b52c423e5850be6f6df0dcfb5376365440b56667",
2936
+ "sha256:9be90eebc9842a93ef8335291f57b3b7488ac24f70df96a6034a13cb58e6ff86",
2937
+ "sha256:9ddd49258610499aab83b4f5b61b32e11fce873586282a0e972e5ab3bcadee51",
2938
+ "sha256:9ecde3671e62eeb99e977f5221abcf40c208f69b5eb986b061ccec317c82ebd0",
2939
+ "sha256:9ff4e9ecb6e4b363430edf2c6e50173a63e0820e549918adef70515f87ced19a",
2940
+ "sha256:a254537b9b696ede293bfdbc0a65200e8e4507bc9f37831e2a0318a9b333c85c",
2941
+ "sha256:a2b9bf8c79b660d0ca1ad95e587818c30ccdb11f787657458d6f26a1ea18c568",
2942
+ "sha256:a61a68d630e812b67b5bf097ab84e2cd79b48c792857dc10ba8a223f5b06a2af",
2943
+ "sha256:a7080b0159ce05f179cfac592cda1a82898ca9cd097dacf8ea20ae33474fbb25",
2944
+ "sha256:a8fd93de4e1d278046345f49e2238cdb298589325849b2645d4a94c53faeffc5",
2945
+ "sha256:a94ffc66738da99232ddffcf7910e0f69e2bbe3a0802e54426dbf0714e1c2ffe",
2946
+ "sha256:aa806bbc13eac1ab6291ed21ecd2dd426063ca5417dd507e6be58de20e58dfcf",
2947
+ "sha256:b0c1a133d42c6fc1f5fbcf5c91331657a1ff822e87989bf4a6e2e39b818d0ee9",
2948
+ "sha256:b58229a844931bca61b3a20efd2be2a2acb4ad1622fc026504309a6883686fbf",
2949
+ "sha256:bb2f144c6d98bb5cbc94adeb0447cfd4c0f991341baa68eee3f3b0c9c0e83767",
2950
+ "sha256:be90c94570840939fecedf99fa72839aed70b0ced449b415c85e01ae67422c90",
2951
+ "sha256:bf0d9a171908f32d54f651648c7290397b8792f4303821c42a74e7805bfb813c",
2952
+ "sha256:bf15fc0b45914d9d1b706f7c9c4f66f2b7b053e9517e40123e137e8ca8958b3d",
2953
+ "sha256:bf4298f366ca7e1ad1d21bbb58300a6985015909964077afd37559084590c929",
2954
+ "sha256:c441c841e82c5ba7a85ad25986014be8d7849c3cfbdb6004541873505929a74e",
2955
+ "sha256:cacea77ef7a2195f04f9279297684955e3d1ae4241092ff0cfcef532bb7a1c32",
2956
+ "sha256:cd54895e4ae7d32f1e3dd91261df46ee7483a735017dc6f987904f194aa5fd14",
2957
+ "sha256:d1323cd04d6e92150bcc79d0174ce347ed4b349d748b9358fd2e497b121e03c8",
2958
+ "sha256:d383bf5e045d7f9d239b38e6acadd7b7fdf6c0087259a84ae3475d18e9a2ae8b",
2959
+ "sha256:d3e7420211f5a65a54675fd860ea04173cde60a7cc20ccfbafcccd155225f8bc",
2960
+ "sha256:d8074c5dd61c8a3e915fa8fc04754fa55cfa5978200d2daa1e2d4294c1f136aa",
2961
+ "sha256:df03cd88f95b1b99052b52b1bb92173229d7a674df0ab06d2b25765ee8404bce",
2962
+ "sha256:e45377d5d6fefe1677da2a2c07b024a6dac782088e37c0b1efea4cfe2b1be19b",
2963
+ "sha256:e53d19c2bf7d0d1e6998a7e693c7e87300dd971808e6618964621ccd0e01fe4e",
2964
+ "sha256:e560fd75aaf3e5693b91bcaddd8b314f4d57e99aef8a6c6dc692f935cc1e6bbf",
2965
+ "sha256:ec5060592d83454e8063e487696ac3783cc48c9a329498bafae0d972bc7816c9",
2966
+ "sha256:ecc2920630283e0783c22e2ac94427f8cca29a04cfdf331467d4f661f4072dac",
2967
+ "sha256:ed7161bccab7696a473fe7ddb619c1d75963732b37da4618ba12e60899fefe4f",
2968
+ "sha256:ee0bd3a7b2e184e88d25c9baa6a9dc609ba25b76daae942edfb14499ac7ec374",
2969
+ "sha256:ee25f1ac091def37c4b59d192bbe3a206298feeb89132a470325bf76ad122a1e",
2970
+ "sha256:efa44f64c37cc30c9f05932c740a8b40ce359f51882c70883cc95feac842da4d",
2971
+ "sha256:f47d52fd9b2ac418c4890aad2f6d21a6b96183c98021f0a48497a904199f006e",
2972
+ "sha256:f857034dc68d5ceb30fb60afb6ff2103087aea10a01b613985610e007053a121",
2973
+ "sha256:fb91d20fa2d3b13deea98a690534697742029f4fb83673a3501ae6e3746508b5",
2974
+ "sha256:fddb8870bdb83456a489ab67c6b3040a8d5a55069aa6f72f9d872235fbc52f54"
2975
  ],
2976
  "markers": "python_version >= '3.9'",
2977
+ "version": "==0.3.0"
2978
  },
2979
  "proto-plus": {
2980
  "hashes": [
 
3536
  },
3537
  "rpds-py": {
3538
  "hashes": [
3539
+ "sha256:04882cc4adbdc2778dd49f5ed71b1d9ab43349c45cde7e461456d0432d7d323e",
3540
+ "sha256:048dc18eb2cc83a67bec07c6f9ffe1da83fb94d5af6cc32e333248013576dc4c",
3541
+ "sha256:04d7fc114ca57d25f0d8c324d2d0ddd675df92b2f7da8284f806711c25fe00f7",
3542
+ "sha256:06962dc9462fe97d0355e01525ebafcd317316e80e335272751a1857b7bdec97",
3543
+ "sha256:0b3b3553d9216153eb3f8cf0d369b0e31e83912e50835ee201794d9b410e227f",
3544
+ "sha256:0e1ece346395e127a8024e5c13d304bdd7dbd094e05329a2f4f27ea1fbe14aa3",
3545
+ "sha256:0edf94328feaae49a96caa3459784614365708c38f610316601b996e5f085be1",
3546
+ "sha256:0f74d8babe0139b8ee30c24c65040cdad81e00547e7eefe43d13b31da9d2bbc5",
3547
+ "sha256:1191bf5975a0b001c161a62d5833a6b2f838b10ff19e203910dd6210e88d89f5",
3548
+ "sha256:16826a5346e293bedf0acd5c2f4c8e05415b1970aa3cc448eea19f02724dd453",
3549
+ "sha256:174602fe067a5b622ce47a5b09022e0128c526a308354abd9cc4bf0391f3cfd2",
3550
+ "sha256:1b36e993b95f0744a94a5add7624cfaf77b91805819c1a960026bc452f95841e",
3551
+ "sha256:1bda53037dcac2465d0b2067a7129283eb823c7e0175c0991ea7e28ae7593555",
3552
+ "sha256:1e0fb88357f59c70b8595bc8e5887be35636e646a9ab519c1876063159812cf6",
3553
+ "sha256:1fa3476c9845152091f62edca5e543df77fc0fc2e83027c389fa4c4f52633369",
3554
+ "sha256:210aa7c699cc61320630c4be33348d9bfef4785fabd6f33ea6be711d4eb45f1f",
3555
+ "sha256:2e27dfcea222c81cd8bece98a73ebb8ca69870de01dc27002d433ad06e55dd8b",
3556
+ "sha256:312981d4da5dc463baeca3ba23a3e74dc7a48a4500d267566d8e9c0680ac54c6",
3557
+ "sha256:3154e132e685f907813ace8701721ad4420244f6e07afc2a61763894e8a22961",
3558
+ "sha256:35336790b4d70c31a59c922d7d603010fe13c5ff56a1dce14849b6bb6a2ad4b9",
3559
+ "sha256:374d2c0067f5ef18e73bfb2a555ef0b8f2b01f5b653a3eca68e9fbde5625c305",
3560
+ "sha256:377ba75ebce48d5df69b0ab2e3333cd86f6acfee8cf0a2c286af4e32e4a8b499",
3561
+ "sha256:37af2ee37efeb0a09463124cc1e560192cc751c2a5ae650effb36469e1f17dc8",
3562
+ "sha256:3adc0b2e71e62fde524389634df4b53f4d16d5f3830ab35c1e511d50b75674f6",
3563
+ "sha256:3b147c0d49de69dac573c8e05a5f7edf18a83136bf8c98e2cd3e87dafee184e5",
3564
+ "sha256:3cb0ddf0ecc705f8f6dfe858e703c1b9b3ea240b1f56e33316e89dc6c2994ac0",
3565
+ "sha256:41f6bb731bfcbd886bd6399717971dd881d759ea831b9f513bc57a10f52c7d53",
3566
+ "sha256:516cec4c1a45bed3c417c402a2f52515561a1d8e578ff675347dcf4180636cca",
3567
+ "sha256:5211b646a0beb1f8f4b1cde8c7c073f9d6ca3439d5a93ea0874c8ece6cab66a9",
3568
+ "sha256:55fe404f2826c5821661e787dffcb113e682d9ff011d9d39a28c992312d7029b",
3569
+ "sha256:56bbf34e129551004e4952db16087bb4912e8cf4fa335ad5c70e126666f97788",
3570
+ "sha256:5bc79d528e65c877a5e254ddad394d51797bc6bba44c9aa436f61b94448d5f87",
3571
+ "sha256:5e549c7ef1ae42b79878bff27c33363b2de77f23de2f4c19541ef69ae4c11ac7",
3572
+ "sha256:5ff50d7a5b206af7ac8342255ae3ab6c6c86d86520f4413bf9d2561bf4f1ffa1",
3573
+ "sha256:6097538c81a94d4432de645a20bbbbfa7a0eb52c6dcb7370feda18eb8eed61de",
3574
+ "sha256:62d8fe953110a98a118cacdc1ca79fe344a946c72a2d19fa7d17d0b2ace58f3d",
3575
+ "sha256:64ba22924340d7e200b48befcc75ff2379301902381ca4ebbfec81d80c5216b5",
3576
+ "sha256:6593dc9b225f8fc900df43c40625c998b8fa99ba78ec69bcd073fe3fb1018a5d",
3577
+ "sha256:670c29a74f8e632aa58b48425b12d026703af1ea5e3b131adbb2601c7ae03108",
3578
+ "sha256:6893a88925972635c843eb02a113d7aabacd386c05d54f2fda29125befbc1b05",
3579
+ "sha256:72a0dd4d599fadaf519d4e4b8092e5d7940057c61e70f9f06c1d004a47895204",
3580
+ "sha256:75d5a2c5629e3582aa73c3a11ac0a3dd454e86cc70188a9b6e2ed51889c331dd",
3581
+ "sha256:7730442bb642748dddfbe1de24275bf0cdbae938c68e1c38e0a9d285a056e17d",
3582
+ "sha256:77c3e51d994c39227facc742001b7be98c2ad634f8a0cf2ed08c30cf2f7f9249",
3583
+ "sha256:784a79474675ee12cab90241f3df328129e15443acfea618df069a7d67d12abb",
3584
+ "sha256:784d2ef454b42451a1efca40f888105536b6d2374d155c14f51831980c384461",
3585
+ "sha256:7c2ba6b0f4eccf3738a03878c13f18037931c947d70a75231448954e42884feb",
3586
+ "sha256:7cca21adfefe5a2237f1e64d769c1ed7ccdc2515d376d1774e7fbe918e03cd8c",
3587
+ "sha256:7cd550ee493adab33e95ce00cb42529b0435c916ed949d298887ee9acdcd3f2f",
3588
+ "sha256:8212c5d25514386a14a032fde7f7f0383a88355f93a1d0fde453f38ebdc43a1b",
3589
+ "sha256:827b334702a04df2e1b7fe85ed3784512f6fd3d3a40259180db0c8fdeb20b37f",
3590
+ "sha256:83f71359d81cfb3bd39522045d08a7031036fb0b1b0a43a066c094cc52a9fd00",
3591
+ "sha256:8529a28b0dffe7e0c56537912ab8594df7b71b24032622aadce33a2643beada5",
3592
+ "sha256:87b8e416f55f2be671d5dbf55e7517a8144f8b926609d2f1427f8310c95e4e13",
3593
+ "sha256:8c708f5c2d604e0acc9489df3ea879f4fc75030dfa590668fd959fda34fcc0b8",
3594
+ "sha256:903344afbc46dfb488a73a7eeb9c14d8484c6d80eb402e6737a520a55327f26c",
3595
+ "sha256:947db56d8ee2f567a597f7484ac6c8cb94529181eaa498bd9c196079c395c69f",
3596
+ "sha256:95d7ffa91b423c974fb50384561736aa16f5fb7a8592d81b2ca5fcaf8afd69a0",
3597
+ "sha256:96f0261ef2a45c9dc48c4105ab798e8ba1c0c912ae5c59c2d9f899242cf3ed79",
3598
+ "sha256:9901d57e8dc3b7245d349a255af097e309602986a604d073414a3826bc5c2cdd",
3599
+ "sha256:9b263adb8e54bc7a5b2b8feebe99ff79f1067037a9178989e9341ea76e935706",
3600
+ "sha256:9e66aaa24e0dc3cfaf63a8fc2810ae296792c18fb4cfb99868f52e7c598911b6",
3601
+ "sha256:a20fa5cd1cb074c145c3955732cfc3eca19bef16d425b32f14c3d275230110fb",
3602
+ "sha256:a49aeb989ee5e057137910059610bfa8f571a4af674404ce05c59862bbeeecbe",
3603
+ "sha256:a8983725590ddeb62acf7e585badb7354fa71e3d08d3326eaac6886aa91e526c",
3604
+ "sha256:aa9d67acbcf2cb11acd44da7d41a0495b7799a32fb7ec9a6bc0b14d8552e00fb",
3605
+ "sha256:aae64cb7faaecd5d36ebcb99dc3f0196f4357586e095630207047f35183431fb",
3606
+ "sha256:ac766c8127ee9c9a72f1a6ad6b4291e5acfd14d9685964b771bf8820fe65aeed",
3607
+ "sha256:aef4f05059aa6f5f22c76f23f45b6908da4871589c9efb882e58c33ebf8f4c4f",
3608
+ "sha256:b1eb4757f9c9f96e26a420db97c3ecaa97568961ce718f1f89e03ce1f59ec12e",
3609
+ "sha256:b233a2bdb15dbb4c05b0c79c94d2367a05d0c54351b76c74fdc81aae023a2df8",
3610
+ "sha256:b8b7b4e5cc5a981a147e1602cf4bd517e57617f9a4c7e96a22a27e4d18de2523",
3611
+ "sha256:bba83d703c6728a3a2676a14a9649d7cc87b9e4654293f13f8d4b4d7007d6383",
3612
+ "sha256:c1523dae0321bf21d0e4151a7438c9bd26c0b712602fb56116efd4ee5b463b5d",
3613
+ "sha256:c23cbff21154951731866358e983d01d536a2c0f60f2765be85f00682eae60d9",
3614
+ "sha256:c46247ea1382758987417b9c47b05d32dc7f971cd2553e7b3088a76ad48c5a67",
3615
+ "sha256:c5e3c7d7cdbbd450acb62c5d29d39ea6d5f8584019d391947d73fb998f54acc5",
3616
+ "sha256:c6c98bde8ec93dd4e19c413e3ac089fb0ff731da54bab8aaf1e8263f55f01406",
3617
+ "sha256:c79544d0be2c7c3891fe448bc006666410bc219fdf29bf35990f0ea88ff72b64",
3618
+ "sha256:c7fee301c715ce2fed4c0620a65dff12686002061cd38c6f11a427f64bd0c8ff",
3619
+ "sha256:ce1a2fe8eea2e956a11112ba426b9be79b2da65e27a533cf152ba8e9882bf9be",
3620
+ "sha256:ce1c4277d7f235faa2f31f1aad82e3ab3caeb66f13c97413e738592ec7fef7e0",
3621
+ "sha256:cec9feef63e213ec9f9cac44d8454643983c422b318b67059da796f55780b4d4",
3622
+ "sha256:cf06007aca17ea31069adc8396d718b714559fd7f7db8302399b4697c4564fec",
3623
+ "sha256:d1f3baf652aeb91775eb3343535890156b07e0cbb2a7b72651f4bbaf7323d40f",
3624
+ "sha256:d2e0cace96976f4e86fc3c51cb3fba24225976e26341e958be42f3d8d0a634ee",
3625
+ "sha256:d5504bd1d637e7633d953418520d9b109b0d8a419153a56537938adf068da9d5",
3626
+ "sha256:d59582ddbeabf217d1b815b60acaec9ff5e2ded79e440c3b3e4ddc970ff59160",
3627
+ "sha256:d8c754d4d021a010df79e0ce10b2dbf0ed12997ff4e508274337fdceed32275f",
3628
+ "sha256:e17402e8f3b49a7ec22e7ef7bbbe0ac0797fcbf0f1ba844811668ef24b37fc9d",
3629
+ "sha256:e2c26f1e0ebbe85dc275816cd53fcbb225aaf7923a4d48b7cdf8b8eb6291e5ae",
3630
+ "sha256:e5305ee98053a0f0155e4e5f9fe4d196fa2e43ae7c2ecc61534babf6390511d9",
3631
+ "sha256:eb841a8e1c2615dfc721d3c28fe81e6300e819a01d3305ecd7f75c7d58c31b2b",
3632
+ "sha256:f1023b1de400ef9d3d9f8f9e88f3f5d8c66c26e48c3f83cffe83bd423def8d81",
3633
+ "sha256:f119176191c359cb33ff8064b242874bfb1352761379bca8e6ccb74a6141db27",
3634
+ "sha256:f27867c24f0a81065ef94e575dbb1846867257994ac41ebbe5e66c6a3976ac73",
3635
+ "sha256:f46d53a6a37383eca41a111df0e9993399a60e9e1e2110f467fddc5de4a43b68",
3636
+ "sha256:f482453aeebdae7774781e8c9b1884e0df0bdb1c61f330f95c63a401dfc2fc31",
3637
+ "sha256:f4b699830ced68db4294e2e47f25a4ff935a54244814b76fa683e0b857391e3e",
3638
+ "sha256:f9c49366f19c06ce31af1312ae4718292081e73f454a56705e7d56acfd25ac1e",
3639
+ "sha256:fa93e2460b7791872a5dd355438b854a5d9ab317107380c2143d94a1ca5b10a7",
3640
+ "sha256:fbeade9f0284a5c5965f8a4805ef1864e5fb4bc4c5d3d8dd60c5fd2a44f0b51a",
3641
+ "sha256:ffac3b13182dc1bf648cde2982148dc9caf60f3eedec7ae639e05636389ebf5d"
3642
  ],
3643
  "markers": "python_version >= '3.9'",
3644
+ "version": "==0.23.0"
3645
  },
3646
  "rsa": {
3647
  "hashes": [
 
4074
  },
4075
  "streamlit": {
4076
  "hashes": [
4077
+ "sha256:62026dbdcb482790933f658b096d7dd58fa70da89c1f06fbc3658b91dcd4dab2",
4078
+ "sha256:e2516c7fcd17a11a85cc1999fae58ace0a6458e2b4c1a411ed3d75b1aee2eb93"
4079
  ],
4080
  "index": "pypi",
4081
  "markers": "python_version >= '3.9' and python_full_version != '3.9.7'",
4082
+ "version": "==1.42.2"
4083
  },
4084
  "streamlit-camera-input-live": {
4085
  "hashes": [
 
4106
  "markers": "python_version >= '3.6'",
4107
  "version": "==0.2.0"
4108
  },
4109
+ "streamlit-dynamic-filters": {
4110
+ "hashes": [
4111
+ "sha256:0b2d6db612f35bf10e18f19de137c65b051d38ed000a6e3bfe973370b142b42d",
4112
+ "sha256:ef65029ec249a3681390711b88fcad339bb3a4ce1e13857443d4553592e23cba"
4113
+ ],
4114
+ "index": "pypi",
4115
+ "version": "==0.1.9"
4116
+ },
4117
  "streamlit-embedcode": {
4118
  "hashes": [
4119
  "sha256:22a50eb43407bab3d0ed2d4b58e89819da477cd0592ef87edbd373c286712e3a",
streamlit_app/chat_page.py ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from streamlit_chat_widget import chat_input_widget
3
+ from graph.workflow import create_workflow
4
+ import pandas as pd
5
+
6
+ def create_translation_word_dfs(result):
7
+ """
8
+ Create translation and word dataframes from the translation options
9
+ Args:
10
+ result: The result from the workflow
11
+ Returns:
12
+ translation_df: dataframe from the translation options
13
+ word_df: dataframe from the words of the translation options
14
+ """
15
+ # Extract target language
16
+ target_language = result["translation"]["target_language"]
17
+ source_language = result["translation"]["source_language"]
18
+ # Create list to hold rows for DataFrame
19
+ translation_data = []
20
+ word_data = []
21
+ for option in result["translation"]["options"]:
22
+ translation_data.append({
23
+ "Translation_Language": target_language,
24
+ "Source_Language": source_language,
25
+ "Translation": option["translation"],
26
+ "Context": option["description"]
27
+ })
28
+ # For each word in the translation, create a row with translation details
29
+ for word in option["words"]:
30
+ word_data.append({
31
+ "Translation_Language": target_language,
32
+ "Source_Language": source_language,
33
+ "Original_Word": word["original_word"],
34
+ "Translated_Word": word["translated_word"]
35
+ })
36
+
37
+ # Create DataFrame
38
+ df_translation = pd.DataFrame(translation_data)
39
+ df_words = pd.DataFrame(word_data)
40
+ return df_translation, df_words
41
+
42
+ def merge_translation_word_dfs(session_state, new_translation_df, new_word_df):
43
+ """
44
+ Merge the translation and word dataframes
45
+ Args:
46
+ session_state: The session state
47
+ new_translation_df: The new translation dataframe
48
+ new_word_df: The new word dataframe
49
+ Returns:
50
+ merged_translation_df: The merged translation dataframe
51
+ merged_word_df: The merged word dataframe
52
+ """
53
+ merged_translation_df = None
54
+ merged_word_df = None
55
+ # If existing dataframes exist, merge with new ones
56
+ if hasattr(session_state, 'translation_df') and session_state.translation_df is not None:
57
+ # Merge translation dataframes, dropping duplicates based on language
58
+ merged_translation_df = pd.concat([
59
+ session_state.translation_df,
60
+ new_translation_df
61
+ ]).drop_duplicates(subset=['Translation_Language', 'Source_Language', 'Translation'])
62
+ else:
63
+ merged_translation_df = new_translation_df
64
+
65
+ if hasattr(st.session_state, 'word_df') and st.session_state.word_df is not None:
66
+ # Merge word dataframes, dropping duplicates based on language
67
+ merged_word_df = pd.concat([
68
+ session_state.word_df,
69
+ new_word_df
70
+ ]).drop_duplicates(subset=['Translation_Language', 'Source_Language', 'Original_Word', 'Translated_Word'])
71
+ else:
72
+ merged_word_df = new_word_df
73
+
74
+ return merged_translation_df, merged_word_df
75
+
76
+ def display_translation_options(translation_options):
77
+ """
78
+ Display the translation options
79
+ Args:
80
+ translation_options: The translation options
81
+ """
82
+ for idx, option in enumerate(translation_options):
83
+ translation_text = option['translation']
84
+ audio_file_path = option['audio_file_path']
85
+ context_text = option['description']
86
+ translation_number = idx + 1
87
+ translation_message = f"**Translation {translation_number}:** {translation_text}\n*Context:* {context_text}"
88
+ st.session_state.messages.append({"role": "assistant", "content": translation_message, "audio_file_path": audio_file_path})
89
+ st.markdown(f"**Translation {translation_number}:** {translation_text}")
90
+ st.markdown(f"*Context:* {context_text}")
91
+ st.audio(audio_file_path)
92
+ # os.remove(audio_file_path)
93
+
94
+ def process_chat_message(input_text: str, is_audio: bool = False) -> None:
95
+ """
96
+ Process a chat message and update the chat interface with the response.
97
+
98
+ Args:
99
+ input_text: The text to process (either direct input or transcribed audio)
100
+ is_audio: Boolean indicating if the input was from audio
101
+ """
102
+ # Add user message to chat history
103
+ display_text = f"🎤 *Audio message*:\n{input_text}" if is_audio else input_text
104
+ st.session_state.messages.append({"role": "user", "content": display_text})
105
+
106
+ with st.chat_message("user"):
107
+ st.markdown(display_text)
108
+ if is_audio:
109
+ st.markdown(input_text) # Show transcription below audio message
110
+
111
+ # Process through workflow
112
+ workflow = create_workflow(llm=st.session_state.llm,tts_model=st.session_state.tts)
113
+ app_workflow = workflow.compile()
114
+ result = app_workflow.invoke({"input": input_text})
115
+
116
+ # Display assistant response
117
+ with st.chat_message("assistant"):
118
+ if "error" in result and result["error"] is not None:
119
+ st.markdown("An Error occurred while processing your message. Please try again.")
120
+ st.markdown(result["error"])
121
+ elif "chat_resp" in result and result["chat_resp"] is not None:
122
+ st.markdown(result["chat_resp"])
123
+ st.session_state.messages.append({"role": "assistant", "content": result["chat_resp"]})
124
+ elif (result["translation"] is not None):
125
+ # Convert translation data to DataFrame
126
+ new_translation_df, new_word_df = create_translation_word_dfs(result)
127
+ # Merge with existing dataframes
128
+ merged_translation_df, merged_word_df = merge_translation_word_dfs(st.session_state, new_translation_df, new_word_df)
129
+ # Update session state
130
+ st.session_state.translation_df = merged_translation_df
131
+ st.session_state.word_df = merged_word_df
132
+ display_translation_options(result["translation"]["options"])
133
+
134
+ def display_chat_interface():
135
+ """
136
+ Display the chat interface
137
+ """
138
+ # Display chat messages
139
+ for message in st.session_state.messages:
140
+ with st.chat_message(message["role"]):
141
+ st.markdown(message["content"])
142
+
143
+ # # Create columns for text and audio input
144
+ # col1, col2 = st.columns([4, 1])
145
+
146
+ # with col1:
147
+ # prompt = st.chat_input("Type your message here...")
148
+
149
+ # with col2:
150
+ # audio = st.audio_input("🎤")
151
+ # with bottom():
152
+ user_input = chat_input_widget()
153
+ # with st.chat_message("user"):
154
+
155
+
156
+ if user_input:
157
+ # Process text input
158
+ if "text" in user_input:
159
+ process_chat_message(user_input['text'])
160
+ elif "audioFile" in user_input: # Process audio input
161
+ chat_message_user= st.chat_message("user")
162
+ chat_message_user.markdown("🎤 *Audio message*")
163
+ audio =bytes(user_input["audioFile"])
164
+ chat_message_user.audio(audio)
165
+ with st.spinner("Transcribing audio..."):
166
+ # chat_message_user.markdown("Transcribing audio...")
167
+ try:
168
+ transcription = st.session_state.stt.transcribe(audio)
169
+ print(f"transcription: {transcription}")
170
+ if transcription and transcription["text"] and len(transcription["text"]) > 0:
171
+ process_chat_message(transcription["text"], is_audio=True)
172
+ else:
173
+ chat_message_user.markdown("Transcribing resulted in an empty text, try again")
174
+ except Exception as e:
175
+ chat_message_user.error(f"Error transcribing audio: {str(e)}")
176
+ chat_message_user.markdown("Failed to transcribe audio, try again")
177
+
178
+ # Check for API key before displaying chat interface
179
+ if "llm" in st.session_state:
180
+ # Main chat interface
181
+ display_chat_interface()
182
+ else:
183
+ st.info("Please configure your GROQ API key to start chatting.")
streamlit_app/graph/chains.py CHANGED
@@ -82,6 +82,7 @@ class TranslationOption(BaseModel):
82
  class TranslationResponse(BaseModel):
83
  # source_text: str = Field(description="Original text")
84
  target_language: str = Field(description="Target language")
 
85
  options: List[TranslationOption] = Field(description="List of translation options")
86
 
87
  # def parse_translation_response(result) -> TranslationResponse:
@@ -116,6 +117,7 @@ def create_translate_chain(llm):
116
  <user_request> {user_request} </user_request>
117
  In your response, provide:
118
  - the target language.
 
119
  - For each translation, provide:
120
  1. The translated text
121
  2. A description of when to use this variant
 
82
  class TranslationResponse(BaseModel):
83
  # source_text: str = Field(description="Original text")
84
  target_language: str = Field(description="Target language")
85
+ source_language: str = Field(description="Source language")
86
  options: List[TranslationOption] = Field(description="List of translation options")
87
 
88
  # def parse_translation_response(result) -> TranslationResponse:
 
117
  <user_request> {user_request} </user_request>
118
  In your response, provide:
119
  - the target language.
120
+ - the source language.
121
  - For each translation, provide:
122
  1. The translated text
123
  2. A description of when to use this variant
streamlit_app/graph/state.py CHANGED
@@ -2,7 +2,7 @@ from typing import Literal, TypedDict, Annotated, Optional
2
  from operator import add
3
  from pydantic import BaseModel
4
 
5
- class Word(BaseModel):
6
  translated_word: str
7
  original_word: str
8
 
@@ -13,7 +13,8 @@ class TranslationOptions(TypedDict):
13
  words: Annotated[list[Word], add]
14
 
15
  class Translation(TypedDict):
16
- language: str
 
17
  options: Annotated[list[TranslationOptions], add]
18
 
19
  class PolyglotState(TypedDict):
 
2
  from operator import add
3
  from pydantic import BaseModel
4
 
5
+ class Word(TypedDict):
6
  translated_word: str
7
  original_word: str
8
 
 
13
  words: Annotated[list[Word], add]
14
 
15
  class Translation(TypedDict):
16
+ target_language: str
17
+ source_language: str
18
  options: Annotated[list[TranslationOptions], add]
19
 
20
  class PolyglotState(TypedDict):
streamlit_app/graph/workflow.py CHANGED
@@ -5,7 +5,7 @@ from langgraph.types import Command
5
  import os
6
  from .state import PolyglotState, Translation, TranslationOptions, Word
7
  from langchain_core.runnables.config import RunnableConfig
8
- from .configSchema import ConfigSchema
9
  from .chains import create_detect_intent_chain, Intent, create_translate_chain, TranslationResponse, create_chat_response_chain
10
  from stt_tts.models import TTSModel
11
  # Load environment variables
@@ -71,7 +71,8 @@ def create_translate_node(llm)-> Callable[[PolyglotState, RunnableConfig], Polyg
71
  response:TranslationResponse = translate_chain.invoke({"user_request": state["input"]})
72
  print(f"response: {response}")
73
  translation = Translation()
74
- translation["language"] = response.target_language
 
75
  translation["options"] = []
76
  for option in response.options:
77
  translation_option = TranslationOptions()
 
5
  import os
6
  from .state import PolyglotState, Translation, TranslationOptions, Word
7
  from langchain_core.runnables.config import RunnableConfig
8
+ # from .configSchema import ConfigSchema
9
  from .chains import create_detect_intent_chain, Intent, create_translate_chain, TranslationResponse, create_chat_response_chain
10
  from stt_tts.models import TTSModel
11
  # Load environment variables
 
71
  response:TranslationResponse = translate_chain.invoke({"user_request": state["input"]})
72
  print(f"response: {response}")
73
  translation = Translation()
74
+ translation["target_language"] = response.target_language
75
+ translation["source_language"] = response.source_language
76
  translation["options"] = []
77
  for option in response.options:
78
  translation_option = TranslationOptions()
streamlit_app/main.py CHANGED
@@ -1,17 +1,17 @@
1
  import streamlit as st
2
  # from pathlib import Path
3
  # import json
4
- import os
5
  # from dotenv import load_dotenv
6
  # from streamlit_app.graph import workflow
7
  from stt_tts.models import STTModel, TTSModel
8
- from graph.workflow import create_workflow
9
  from config import load_config
10
  # from langchain_google_genai import ChatGoogleGenerativeAI
11
  # from langchain_mistralai.chat_models import ChatMistralAI
12
  from langchain_groq import ChatGroq
13
  from config import Config
14
- from streamlit_chat_widget import chat_input_widget
15
  # from streamlit_extras.bottom_container import bottom
16
 
17
  def has_api_key(config: Config) -> bool:
@@ -93,128 +93,15 @@ def initialize_app():
93
  st.sidebar.error("Please enter GROQ API key")
94
  else:
95
  init_llm()
96
-
97
-
98
- def create_sidebar():
99
- with st.sidebar:
100
- st.title("Learning Tools")
101
-
102
- if st.button("📚 Dictionary"):
103
- # TODO: Implement dictionary view
104
- st.session_state.current_view = "dictionary"
105
-
106
- if st.button("📝 Phrases"):
107
- # TODO: Implement phrases view
108
- st.session_state.current_view = "phrases"
109
-
110
- st.markdown("---")
111
- if st.button("⬇️ Download Progress"):
112
- # TODO: Implement download functionality
113
- st.text_input("Enter your email:", key="download_email")
114
-
115
- def display_translation_options(translation_options):
116
- for idx, option in enumerate(translation_options):
117
- translation_text = option['translation']
118
- audio_file_path = option['audio_file_path']
119
- context_text = option['description']
120
- translation_number = idx + 1
121
- translation_message = f"**Translation {translation_number}:** {translation_text}\n*Context:* {context_text}"
122
- st.session_state.messages.append({"role": "assistant", "content": translation_message, "audio_file_path": audio_file_path})
123
- st.markdown(f"**Translation {translation_number}:** {translation_text}")
124
- st.markdown(f"*Context:* {context_text}")
125
- st.audio(audio_file_path)
126
- # os.remove(audio_file_path)
127
-
128
- def process_chat_message(input_text: str, is_audio: bool = False) -> None:
129
- """
130
- Process a chat message and update the chat interface with the response.
131
-
132
- Args:
133
- input_text: The text to process (either direct input or transcribed audio)
134
- is_audio: Boolean indicating if the input was from audio
135
- """
136
- # Add user message to chat history
137
- display_text = f"🎤 *Audio message*:\n{input_text}" if is_audio else input_text
138
- st.session_state.messages.append({"role": "user", "content": display_text})
139
-
140
- with st.chat_message("user"):
141
- st.markdown(display_text)
142
- if is_audio:
143
- st.markdown(input_text) # Show transcription below audio message
144
-
145
- # Process through workflow
146
- workflow = create_workflow(llm=st.session_state.llm,tts_model=st.session_state.tts)
147
- app_workflow = workflow.compile()
148
- result = app_workflow.invoke({"input": input_text})
149
-
150
- # Display assistant response
151
- with st.chat_message("assistant"):
152
- if "error" in result and result["error"] is not None:
153
- st.markdown("An Error occurred while processing your message. Please try again.")
154
- st.markdown(result["error"])
155
- elif "chat_resp" in result and result["chat_resp"] is not None:
156
- st.markdown(result["chat_resp"])
157
- st.session_state.messages.append({"role": "assistant", "content": result["chat_resp"]})
158
- elif (result["translation"] is not None):
159
- # Display each translation option with its audio
160
- # display_translation_options(result["translation"]["options"], result.get("audio_response_files", []))
161
- display_translation_options(result["translation"]["options"])
162
-
163
-
164
-
165
- def display_chat_interface():
166
-
167
- # Display chat messages
168
- for message in st.session_state.messages:
169
- with st.chat_message(message["role"]):
170
- st.markdown(message["content"])
171
-
172
- # # Create columns for text and audio input
173
- # col1, col2 = st.columns([4, 1])
174
-
175
- # with col1:
176
- # prompt = st.chat_input("Type your message here...")
177
 
178
- # with col2:
179
- # audio = st.audio_input("🎤")
180
- # with bottom():
181
- user_input = chat_input_widget()
182
- # with st.chat_message("user"):
183
-
184
-
185
- if user_input:
186
- # Process text input
187
- if "text" in user_input:
188
- process_chat_message(user_input['text'])
189
- elif "audioFile" in user_input: # Process audio input
190
- chat_message_user= st.chat_message("user")
191
- chat_message_user.markdown("🎤 *Audio message*")
192
- audio =bytes(user_input["audioFile"])
193
- chat_message_user.audio(audio)
194
- with st.spinner("Transcribing audio..."):
195
- # chat_message_user.markdown("Transcribing audio...")
196
- try:
197
- transcription = st.session_state.stt.transcribe(audio)
198
- print(f"transcription: {transcription}")
199
- if transcription and transcription["text"] and len(transcription["text"]) > 0:
200
- process_chat_message(transcription["text"], is_audio=True)
201
- else:
202
- chat_message_user.markdown("Transcribing resulted in an empty text, try again")
203
- except Exception as e:
204
- chat_message_user.error(f"Error transcribing audio: {str(e)}")
205
- chat_message_user.markdown("Failed to transcribe audio, try again")
206
-
207
-
208
  def main():
209
  initialize_app()
210
- create_sidebar()
211
-
212
- # Check for API key before displaying chat interface
213
- if "llm" in st.session_state:
214
- # Main chat interface
215
- display_chat_interface()
216
- else:
217
- st.info("Please configure your GROQ API key to start chatting.")
218
 
219
  if __name__ == "__main__":
220
  main()
 
1
  import streamlit as st
2
  # from pathlib import Path
3
  # import json
4
+ # import os
5
  # from dotenv import load_dotenv
6
  # from streamlit_app.graph import workflow
7
  from stt_tts.models import STTModel, TTSModel
8
+ # from graph.workflow import create_workflow
9
  from config import load_config
10
  # from langchain_google_genai import ChatGoogleGenerativeAI
11
  # from langchain_mistralai.chat_models import ChatMistralAI
12
  from langchain_groq import ChatGroq
13
  from config import Config
14
+ # from streamlit_chat_widget import chat_input_widget
15
  # from streamlit_extras.bottom_container import bottom
16
 
17
  def has_api_key(config: Config) -> bool:
 
93
  st.sidebar.error("Please enter GROQ API key")
94
  else:
95
  init_llm()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
96
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
97
  def main():
98
  initialize_app()
99
+ words_page = st.Page(page="words_page.py", title="Words", icon="📖")
100
+ translations_page = st.Page(page="translation_page.py", title="Translations", icon="🗣️")
101
+ chat_page = st.Page(page="chat_page.py", title="Chat", icon="💬")
102
+
103
+ pg = st.navigation([chat_page, translations_page, words_page])
104
+ pg.run()
 
 
105
 
106
  if __name__ == "__main__":
107
  main()
streamlit_app/pages/1_vocabulary DELETED
File without changes
streamlit_app/translation_page.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from util import display_filtered_dataframe
3
+
4
+
5
+ if ('translation_df' in st.session_state) and (st.session_state.translation_df is not None):
6
+ display_filtered_dataframe(st.session_state.translation_df, "Translations", ['Translation_Language', 'Source_Language'])
7
+ st.markdown("---")
8
+ if st.button("Download Phrases"):
9
+ # TODO: Implement download functionality
10
+ st.text_input("Enter your email:", key="download_email")
11
+ else:
12
+ st.write("No translations yet, go chat with your AI Assistant!")
streamlit_app/util.py ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import pandas as pd
3
+ from streamlit_dynamic_filters import DynamicFilters
4
+
5
+ # Function to create and display filtered dataframe
6
+ def display_filtered_dataframe(df: pd.DataFrame, title: str, filters: list[str]):
7
+ # Initialize DynamicFilters
8
+ dynamic_filters = DynamicFilters(df, filters=filters)
9
+
10
+ # Display filters in the sidebar
11
+ # with st.sidebar:
12
+ st.subheader(f"Filters for {title}")
13
+ dynamic_filters.display_filters(location='columns', num_columns=2, gap='large')
14
+
15
+ # Apply dynamic filters to the DataFrame
16
+ filtered_df = dynamic_filters.filter_df()
17
+
18
+ # Free-text search input
19
+ search_term = st.text_input(f"Search {title}:")
20
+
21
+ # Apply free-text search filter
22
+ if search_term:
23
+ mask = filtered_df.apply(lambda row: row.astype(str).str.contains(search_term, case=False).any(), axis=1)
24
+ filtered_df = filtered_df[mask]
25
+
26
+ # Display the filtered DataFrame
27
+ st.subheader(title)
28
+ st.dataframe(filtered_df)
streamlit_app/words_page.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from util import display_filtered_dataframe
3
+
4
+ if ('word_df' in st.session_state) and (st.session_state.word_df is not None):
5
+ # Display both dataframes
6
+ display_filtered_dataframe(st.session_state.word_df, "Words", ['Translation_Language', 'Source_Language'])
7
+ st.markdown("---")
8
+ if st.button("Download Vocabulary"):
9
+ # TODO: Implement download functionality
10
+ st.text_input("Enter your email:", key="download_email")
11
+ else:
12
+ st.write("No words yet, go chat with your AI Assistant!")