Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5221f73227 | ||
|
|
12fa4f94c0 | ||
|
|
66b212b1de | ||
|
|
792f9dbeaf | ||
|
|
7f241b0f04 | ||
|
|
88adf4d69d | ||
|
|
3422e0fbb1 | ||
|
|
b3a99f0197 | ||
|
|
468ed7ab1f | ||
|
|
3204e4a0d6 | ||
|
|
b2d864d74a | ||
|
|
f3b7cb9569 | ||
|
|
e1ee9d8d6d | ||
|
|
c4080a348a | ||
|
|
03057f2040 | ||
|
|
8bd4d78cf9 | ||
|
|
498eb7c977 | ||
|
|
a7e023d7fc | ||
|
|
600152ca70 | ||
|
|
7b1b297390 | ||
|
|
9ba3009da0 | ||
|
|
303cc11116 | ||
|
|
e2af6cec40 | ||
|
|
9aa2edd4fb | ||
|
|
e24f4bc21d | ||
|
|
dfc545503c | ||
|
|
b2e7b935da | ||
|
|
f2a211bf2c | ||
|
|
d99d02a221 | ||
|
|
76fe52c6a2 | ||
|
|
0c828b8e20 | ||
|
|
69b4a9e86b | ||
|
|
bc889bd2a1 | ||
|
|
8277ce9e1b | ||
|
|
9f9ed6d928 | ||
|
|
634dcfc075 | ||
|
|
7fad6dc971 | ||
|
|
3f319eb0f7 | ||
|
|
ecb4110a16 | ||
|
|
0676b2eb4e | ||
|
|
b9bdb1cfd1 | ||
|
|
d41486423b | ||
|
|
9b9a7736af | ||
|
|
0cd2ec984d | ||
|
|
ab163cefe4 | ||
|
|
9a670cd5ec | ||
|
|
88430d7824 | ||
|
|
968609b5a7 | ||
|
|
01fb0e6bee | ||
|
|
17ed78280e | ||
|
|
286916ec2e | ||
|
|
dd987ea9dd | ||
|
|
191bee0cee | ||
|
|
a250fd7d08 | ||
|
|
ad3cf71441 | ||
|
|
3537a1c590 | ||
|
|
b6ed805319 | ||
|
|
dc5d913ac6 | ||
|
|
9aa1f7b453 | ||
|
|
45aa002af7 | ||
|
|
433a6d3f46 | ||
|
|
379ce4845d | ||
|
|
6f17f29525 | ||
|
|
f1dd332ce7 | ||
|
|
e0f35d4859 | ||
|
|
c09907f5fa | ||
|
|
b9375c8afe | ||
|
|
fb3440a141 | ||
|
|
fd6bf1263d | ||
|
|
6d7f7e6f2d | ||
|
|
11035b70cf | ||
|
|
29f49be53e | ||
|
|
f2adc383eb | ||
|
|
168f7e4efd | ||
|
|
3861b818ae | ||
|
|
12acc87e37 | ||
|
|
b4991cb696 | ||
|
|
3ff15c66f5 | ||
|
|
55b10d8529 | ||
|
|
925a3b457b | ||
|
|
0547f23b7b | ||
|
|
b35290ddab | ||
|
|
ea64551f34 | ||
|
|
0b7aa775cf | ||
|
|
f1b9235887 | ||
|
|
190817fddb | ||
|
|
d1d869e0a7 | ||
|
|
25fc8ad39c | ||
|
|
3bc64fe752 | ||
|
|
f541272a26 | ||
|
|
b44d5778d8 | ||
|
|
b907a5f99c | ||
|
|
8bc6940092 | ||
|
|
7d3df12993 | ||
|
|
55d205607a | ||
|
|
069a05e65f | ||
|
|
2eca3e8962 | ||
|
|
f9229bc27c | ||
|
|
ece50e47eb | ||
|
|
12646f2bc2 | ||
|
|
783d266f6a | ||
|
|
a515d30b4d | ||
|
|
3dab4d8653 | ||
|
|
6ce37d4cfc | ||
|
|
28d1ff5746 | ||
|
|
57812b7f2c | ||
|
|
c11fc7bf81 | ||
|
|
6e14cfef41 | ||
|
|
07069adce0 | ||
|
|
6766b41922 | ||
|
|
77f9545a6d | ||
|
|
5de34a667b | ||
|
|
591e7307e3 | ||
|
|
4eeb0b920d | ||
|
|
8a00a01c65 | ||
|
|
6f8963d301 | ||
|
|
f0cb32e8ff | ||
|
|
9768ae380f | ||
|
|
7b2546883e | ||
|
|
a4541ad2db | ||
|
|
65c923cb78 | ||
|
|
7176802968 | ||
|
|
826a248746 | ||
|
|
2904036703 | ||
|
|
e7552a62cc | ||
|
|
df3b810849 | ||
|
|
4a1cd250d2 | ||
|
|
51c978db2f | ||
|
|
42a55430ac | ||
|
|
a6889664dd | ||
|
|
7774fe7255 | ||
|
|
df6b304a5f | ||
|
|
0f35409219 | ||
|
|
bbbb4a20e2 | ||
|
|
840a13002f | ||
|
|
20ececc1ac | ||
|
|
130e1fafd3 | ||
|
|
3847e0f9fe | ||
|
|
4447685ef9 | ||
|
|
fee257fbc6 | ||
|
|
5800445cc8 | ||
|
|
1b368ede71 | ||
|
|
eb41320b7d | ||
|
|
2ba32af615 | ||
|
|
7abf4fa809 | ||
|
|
7bd8717122 | ||
|
|
2548248778 | ||
|
|
fad9301dee | ||
|
|
39d2b1e21c | ||
|
|
89397b7e91 | ||
|
|
96acee4f6b | ||
|
|
f8a6c6381b | ||
|
|
46a8ef813e | ||
|
|
68fc138cd7 | ||
|
|
0012321ee5 | ||
|
|
b1b07de49a | ||
|
|
17ab948c84 | ||
|
|
26b87f7452 | ||
|
|
46ee7a34e1 | ||
|
|
c79562083c | ||
|
|
aadda6b5f7 | ||
|
|
ba6888993c | ||
|
|
a475ffa122 | ||
|
|
64308184cc | ||
|
|
c7a7e6b436 | ||
|
|
8678672ce2 | ||
|
|
ff2a1c7a26 | ||
|
|
dbe0e8fe7f | ||
|
|
9f39d9b3b6 | ||
|
|
e48a8885ce | ||
|
|
ce5a2fc687 | ||
|
|
ab16d54d1c | ||
|
|
789a4555cb | ||
|
|
1f72bc43a2 | ||
|
|
ae4f2a8a7e | ||
|
|
c911f3438f | ||
|
|
a1b92e0a33 | ||
|
|
5f93b21250 | ||
|
|
cf30ca6f76 | ||
|
|
308b7c4357 | ||
|
|
9151ae728d | ||
|
|
464b3dfc43 | ||
|
|
fa305a987b | ||
|
|
b461135b6b | ||
|
|
84dc026806 | ||
|
|
38d0288857 | ||
|
|
fe667abe13 | ||
|
|
5370378a13 | ||
|
|
37d39ba687 | ||
|
|
c85c907a7f | ||
|
|
16c9b154c1 | ||
|
|
aebca3c2d1 | ||
|
|
66da38b150 | ||
|
|
9c504ec8a4 | ||
|
|
073f41b226 | ||
|
|
b86afc7703 | ||
|
|
7ec9ff335a | ||
|
|
942a3c8e0b | ||
|
|
4f1919e6b4 | ||
|
|
1eff5dd4ba | ||
|
|
3d2f12127a | ||
|
|
653c4e5719 | ||
|
|
4fd40f7086 | ||
|
|
3fbbdc1d2f | ||
|
|
ea7c811b82 | ||
|
|
aaa5a72273 | ||
|
|
d8be34f28e | ||
|
|
2f73729101 | ||
|
|
8c60d0597a | ||
|
|
da42909007 | ||
|
|
f2e89d9b2d | ||
|
|
a8f8ae6e82 | ||
|
|
20d8df17b0 | ||
|
|
26634f8cbc | ||
|
|
febf636de2 | ||
|
|
97b8a00553 | ||
|
|
ea9b9a2e9e | ||
|
|
e2a037e221 | ||
|
|
f0886c4a82 | ||
|
|
442e370c54 | ||
|
|
0c00587a25 | ||
|
|
88e0a9e84d | ||
|
|
5251d17150 | ||
|
|
75b4a8e7a2 | ||
|
|
dcd8067eed | ||
|
|
b21df33603 | ||
|
|
f745a0e579 | ||
|
|
59fc73f752 | ||
|
|
fe2d91370d | ||
|
|
dd40e88660 | ||
|
|
d3f8b255fc | ||
|
|
f8ea07bdbc | ||
|
|
d328470d23 | ||
|
|
1dda35baff | ||
|
|
40695176c3 | ||
|
|
319a11cacf | ||
|
|
9740126622 | ||
|
|
4c205c26da | ||
|
|
197f681c8e | ||
|
|
b35f5c7121 | ||
|
|
56f0bceee3 | ||
|
|
3b554d64c9 | ||
|
|
3b5f7c756b | ||
|
|
483f24765e | ||
|
|
50fc05db7d | ||
|
|
a4348cdad5 | ||
|
|
4f4ff6c523 | ||
|
|
d675cdc499 | ||
|
|
b99650d77e | ||
|
|
83b4c35362 | ||
|
|
95b2afa928 | ||
|
|
f197cce928 | ||
|
|
ee67d8e568 | ||
|
|
847b7e42e8 | ||
|
|
a833eeff5d | ||
|
|
5ed0a3c52b | ||
|
|
e2c9ca4699 | ||
|
|
b30a96d9c2 | ||
|
|
e011e480e6 | ||
|
|
0e7f705240 | ||
|
|
702eb4389c | ||
|
|
affcfa5478 | ||
|
|
64f333d5d3 | ||
|
|
47749c4cd9 | ||
|
|
e77c01bd81 | ||
|
|
de41e01e7a | ||
|
|
a9d4cf6424 | ||
|
|
3f225045b9 | ||
|
|
aa55cf8572 | ||
|
|
712e346418 | ||
|
|
4f359a2c8a | ||
|
|
1c95b2d546 | ||
|
|
6a6ce21802 | ||
|
|
7b16eb59e3 | ||
|
|
6b4979e670 | ||
|
|
6b840ca238 | ||
|
|
dc28294881 | ||
|
|
d5af40c699 | ||
|
|
fa9d21ed20 | ||
|
|
a2a4ff3448 | ||
|
|
85125c2c02 | ||
|
|
e9d18d0064 | ||
|
|
4fb8cb29b7 | ||
|
|
1696a9713c | ||
|
|
0001d8bfec | ||
|
|
80d4f340f7 | ||
|
|
7e9864c03e | ||
|
|
ec1e6239fc | ||
|
|
37dee5451b | ||
|
|
4c9d972de9 | ||
|
|
82d43beb63 | ||
|
|
fb094e4226 | ||
|
|
a993d67cdc | ||
|
|
1adf8c371c | ||
|
|
d4dc811f18 | ||
|
|
2e606ec801 | ||
|
|
178f4c26dc | ||
|
|
f393b95eea | ||
|
|
ddf610ba2c | ||
|
|
aa07d4c010 | ||
|
|
39a41fa865 | ||
|
|
aa6e012880 | ||
|
|
b4e9291705 | ||
|
|
523549cadf | ||
|
|
a82e88991d | ||
|
|
f0acf2afb4 | ||
|
|
a9032e6ab3 | ||
|
|
8434fa5aec | ||
|
|
49c2b8350f | ||
|
|
4cc6b8ca8d | ||
|
|
5b572dd553 | ||
|
|
d001dd6a87 | ||
|
|
8ecfd019e7 | ||
|
|
e96bc931f1 | ||
|
|
dbda61c376 | ||
|
|
797da5ac0f | ||
|
|
71022c824e | ||
|
|
33d83d75cb | ||
|
|
27c7d7edf0 | ||
|
|
5933bed469 | ||
|
|
d758e1fa76 | ||
|
|
ee0cc5afcd | ||
|
|
cc899b0c77 | ||
|
|
12b632fe57 | ||
|
|
07b78adf16 | ||
|
|
20526e6bd7 | ||
|
|
cb9e5b4acf | ||
|
|
c533be56dc | ||
|
|
dc2d07bb8c | ||
|
|
18325be256 | ||
|
|
82cb295867 | ||
|
|
b9a8678e0a | ||
|
|
9989eec954 | ||
|
|
eb7f5ed68b | ||
|
|
873cc40729 | ||
|
|
210f2f3f17 | ||
|
|
8e8929725c | ||
|
|
472ef5495c | ||
|
|
b6667c7143 | ||
|
|
79e758da71 | ||
|
|
94e6eac30a | ||
|
|
e3ddc5e9de | ||
|
|
9899ba0a56 | ||
|
|
5aeefc3ab8 | ||
|
|
0163727228 | ||
|
|
95697322c9 | ||
|
|
61290f022a | ||
|
|
399dc56bef | ||
|
|
e749d1bf14 | ||
|
|
fe5edd211f | ||
|
|
9e095f4c11 | ||
|
|
defdd7103b | ||
|
|
0ce31eed88 | ||
|
|
363ef72bbd | ||
|
|
e1081ffbf5 | ||
|
|
c646210d1f | ||
|
|
5b947b7990 | ||
|
|
679ba5f9d9 | ||
|
|
ead9957f6d | ||
|
|
bfa3147171 | ||
|
|
bb06a41db5 | ||
|
|
e288b7bd35 | ||
|
|
a40ccdfdbb | ||
|
|
b2914a17ec | ||
|
|
5251777f63 | ||
|
|
0370269a1d | ||
|
|
88fb779a6c | ||
|
|
7bda001ca5 | ||
|
|
deaf1e7eaf | ||
|
|
a0b488aaf1 | ||
|
|
33110c12ba | ||
|
|
7458eba386 | ||
|
|
6bbdeb0b25 | ||
|
|
60d9d52a36 | ||
|
|
592f8cf430 | ||
|
|
0bfb5961ce | ||
|
|
27be4fa701 | ||
|
|
8c315e5c80 | ||
|
|
842e7a21c9 | ||
|
|
e2c4b92afe | ||
|
|
de5aeca831 | ||
|
|
e2e9036639 | ||
|
|
974a14f5aa | ||
|
|
38cf0d2abb | ||
|
|
4fb67b88a3 | ||
|
|
f89d7aa93c | ||
|
|
36f13b50a9 | ||
|
|
d92a076c06 | ||
|
|
d926dbcf4f | ||
|
|
3a6c108b53 | ||
|
|
0a8638c9ba | ||
|
|
e609f8c7e2 | ||
|
|
2726cfa2b4 | ||
|
|
7f53458521 | ||
|
|
5cb5cc749a | ||
|
|
c3d1529037 | ||
|
|
1d5f4b1204 | ||
|
|
677b848500 | ||
|
|
edda6b65e8 | ||
|
|
a8c8bd88ae | ||
|
|
7560e192bd | ||
|
|
11ab5ac8ab | ||
|
|
c8ccf5fd89 | ||
|
|
bb62355b53 | ||
|
|
3707daaa95 | ||
|
|
c90d78126c | ||
|
|
53876d0aed | ||
|
|
7f9d009b33 | ||
|
|
277068b4c2 | ||
|
|
184cb7bdba | ||
|
|
1feaaf1efb | ||
|
|
65a110e9fb | ||
|
|
cd089d6364 | ||
|
|
69f0171c9d | ||
|
|
fd6dc6d613 | ||
|
|
d5b92ae3af | ||
|
|
b030b0531a | ||
|
|
f223a949b0 | ||
|
|
caefddbab2 | ||
|
|
a46bd67824 | ||
|
|
ca9b92a9e5 | ||
|
|
c78e329631 | ||
|
|
b2517ae987 | ||
|
|
096927a133 | ||
|
|
1f99694f76 | ||
|
|
fa547a7892 | ||
|
|
30453ed313 | ||
|
|
63f63dd408 | ||
|
|
61e78165de | ||
|
|
73ec9950da | ||
|
|
aba2d551d0 | ||
|
|
677f5aa139 | ||
|
|
82461b4fd9 | ||
|
|
3e8d63be86 | ||
|
|
3294ec11f9 | ||
|
|
f5aa36c241 | ||
|
|
a8b00f661a | ||
|
|
9dba5493b4 | ||
|
|
f6808c713a | ||
|
|
2527ab9afd | ||
|
|
de8b2ee599 | ||
|
|
41bb1b89db | ||
|
|
30f82a62b0 | ||
|
|
e085cff3d9 | ||
|
|
bbd16ede2b | ||
|
|
b6cddd1378 | ||
|
|
ad27e105cb | ||
|
|
35be4524e6 | ||
|
|
5938b76e30 | ||
|
|
8afd5efb1b | ||
|
|
4868bdcc42 | ||
|
|
cd43c47fc9 | ||
|
|
a8b1a7b4b5 | ||
|
|
e8cce346c5 | ||
|
|
f3a185c339 | ||
|
|
313f66fd93 | ||
|
|
a5b9968213 | ||
|
|
4b9ac385ac | ||
|
|
3ecdded75f | ||
|
|
a8ee067b1f | ||
|
|
922b8eb0f5 | ||
|
|
dcd57de2a7 | ||
|
|
d71f87d3f7 | ||
|
|
16dcaa3ea5 | ||
|
|
785c9ffcaa | ||
|
|
1ad0705051 | ||
|
|
09b8b3c999 | ||
|
|
bc91beeec5 | ||
|
|
9b74d6a7c5 | ||
|
|
5ad2331f94 | ||
|
|
539daf9ad5 | ||
|
|
fa5ad86564 | ||
|
|
fee71cf66f | ||
|
|
8f2b240f26 | ||
|
|
98f329fbdc | ||
|
|
51fc6a6676 | ||
|
|
f460ddfac2 | ||
|
|
0957e7bde1 | ||
|
|
f1906bd891 | ||
|
|
0a23cbd88a | ||
|
|
4198a1380c | ||
|
|
35c452c448 | ||
|
|
33bc4261be | ||
|
|
4018cd968d | ||
|
|
f9f570327b | ||
|
|
8bd6bc7b38 | ||
|
|
60d1c7c2d7 | ||
|
|
c346df20db | ||
|
|
8fd8e10eb4 | ||
|
|
c2c3216449 | ||
|
|
3f824ec275 | ||
|
|
4f479056b4 | ||
|
|
7e9ee71cdf | ||
|
|
f28a1c0154 | ||
|
|
26db3cc61a | ||
|
|
8a9e559229 | ||
|
|
66babae717 | ||
|
|
c59bf8c743 | ||
|
|
42afe5a174 | ||
|
|
e316460a5b | ||
|
|
febd4be8e0 | ||
|
|
b983704d0c | ||
|
|
96b4ab797c | ||
|
|
fcb5886600 | ||
|
|
48fa74d87a | ||
|
|
215196a748 | ||
|
|
5f1e4e8587 | ||
|
|
bbae444bdf | ||
|
|
f2a6136d7c | ||
|
|
cfc7ecbc0d | ||
|
|
7642d6c0b9 | ||
|
|
2025a0fc55 | ||
|
|
cfc8cafc6f | ||
|
|
e2c58e28ee | ||
|
|
a218ef2162 | ||
|
|
6efe6d8046 | ||
|
|
47bfd88739 | ||
|
|
19cf624ab3 | ||
|
|
9b28b7a391 | ||
|
|
dd3191e126 | ||
|
|
31dc4fd16c | ||
|
|
60344f500f | ||
|
|
c4caf708ee | ||
|
|
3ced24d7e3 | ||
|
|
e3bf889a28 | ||
|
|
d73a556b8c | ||
|
|
4f02a7e6e4 | ||
|
|
5715399ab2 | ||
|
|
4f5609ae8a | ||
|
|
fdb2ae2828 | ||
|
|
eae295bbfa | ||
|
|
4db72769c0 | ||
|
|
cc91d5e56d | ||
|
|
332b232349 | ||
|
|
8bee0184f3 | ||
|
|
a1d4ddd336 | ||
|
|
75dd514a14 | ||
|
|
a51e0f4ad6 | ||
|
|
7bd291da1e | ||
|
|
9312a6ba64 | ||
|
|
2f96536042 | ||
|
|
e325db9fd5 | ||
|
|
5f5167ce6e | ||
|
|
09a92335a5 | ||
|
|
4e84fcea19 | ||
|
|
f690d26d77 | ||
|
|
1743974bf7 | ||
|
|
df58bbd5d4 | ||
|
|
8925341a3c | ||
|
|
ac05a85235 | ||
|
|
52c67abe4a | ||
|
|
896afc7a04 | ||
|
|
9bb098665a | ||
|
|
a51a689906 | ||
|
|
8ad154fdda | ||
|
|
680c33debd | ||
|
|
723889acbc | ||
|
|
85789ac155 | ||
|
|
16f8470ea7 | ||
|
|
a7aed3cf46 | ||
|
|
1a3848bac0 | ||
|
|
a31cc4d5ab | ||
|
|
84d782c146 | ||
|
|
3077a1524f | ||
|
|
c28327b07c | ||
|
|
10102cbb52 | ||
|
|
e444d771ee | ||
|
|
ef9c2355b2 | ||
|
|
822832008b | ||
|
|
fb3bbf3d8c | ||
|
|
d6e98d635c | ||
|
|
67b776ca43 | ||
|
|
917b2cfe59 | ||
|
|
4aafae4a79 | ||
|
|
db70d102b6 | ||
|
|
7884cdd659 | ||
|
|
9eb343f60e | ||
|
|
410cdc8382 | ||
|
|
e36b0e7851 | ||
|
|
5f82b46577 | ||
|
|
bd3db1aece | ||
|
|
667ed023f6 | ||
|
|
ace1b04161 | ||
|
|
fda7fd70f4 | ||
|
|
248acc1f15 | ||
|
|
1a8a8f1ca4 | ||
|
|
b8c29666de | ||
|
|
ddd5074308 | ||
|
|
1f537e88ba | ||
|
|
bee9585075 | ||
|
|
b073f4a16e | ||
|
|
0ccd415281 | ||
|
|
ba9a5fce9d | ||
|
|
f085a8dec7 | ||
|
|
c11b66e485 | ||
|
|
2e8cb047f9 | ||
|
|
8fcab0699a | ||
|
|
bb158d5be3 | ||
|
|
a2aa1b16bf | ||
|
|
1d638e0344 | ||
|
|
af9ac030d9 | ||
|
|
d77786197b | ||
|
|
3c925f8848 | ||
|
|
be73e53ce8 | ||
|
|
f4e76caf43 | ||
|
|
2d4f905a7c | ||
|
|
4c89e20348 | ||
|
|
a5829456d6 | ||
|
|
353fef1483 | ||
|
|
48b8c5f054 | ||
|
|
78c325a8ee | ||
|
|
3e898a8bac | ||
|
|
f107ca20b3 | ||
|
|
be6bda4da4 | ||
|
|
2c76a79d4a | ||
|
|
42814e2c90 | ||
|
|
d41f5c1c00 | ||
|
|
09320cbc1b | ||
|
|
e1f52f8b0f | ||
|
|
edbbadfcd5 | ||
|
|
16ffac2741 | ||
|
|
dba8e51ee4 | ||
|
|
3d13348c25 | ||
|
|
0615976b6b | ||
|
|
540a637c03 | ||
|
|
fa342a4f6a | ||
|
|
fd954eaf68 | ||
|
|
5800b33bb5 | ||
|
|
4856956aa8 | ||
|
|
a86e161d9b | ||
|
|
564953b275 | ||
|
|
22bd1e5ae9 | ||
|
|
2bd3bf83fd | ||
|
|
b0eca57483 | ||
|
|
b4b8497aae | ||
|
|
f4b194a68b | ||
|
|
bfbf46ee11 | ||
|
|
acc4a99bf9 | ||
|
|
289e9af849 | ||
|
|
c402b129d9 | ||
|
|
26e5fb2e4a | ||
|
|
dda277785a | ||
|
|
7a4f6775d5 | ||
|
|
fe458175d6 | ||
|
|
1d41192b44 | ||
|
|
b4ab376a5e | ||
|
|
39d54a1d63 | ||
|
|
c39bfad8e3 | ||
|
|
6816a63adf | ||
|
|
728e3ddb23 | ||
|
|
ad4090252d | ||
|
|
756372dd13 | ||
|
|
26c0634ae4 | ||
|
|
ae4ef9b744 | ||
|
|
cc7a38eb2c | ||
|
|
029210c3c0 | ||
|
|
378fb4e2fa | ||
|
|
dd204b621f | ||
|
|
988d3d3fe4 | ||
|
|
04d5b1d14e | ||
|
|
43c268a6aa | ||
|
|
b6ee189e4e | ||
|
|
47b6b07db3 | ||
|
|
e62e4a2abe | ||
|
|
5167422436 | ||
|
|
dbaa27acac | ||
|
|
367076dcae | ||
|
|
6d12b5ebca | ||
|
|
fee93fdfbd | ||
|
|
41e93f097c | ||
|
|
cc2a5b78fd | ||
|
|
f610745ab2 | ||
|
|
3a34e9bb0b | ||
|
|
c55667f9df | ||
|
|
0f25c68393 | ||
|
|
3391a83d86 | ||
|
|
44a713df8a | ||
|
|
06e7448d3c | ||
|
|
03b97cbc52 | ||
|
|
0a1c5e7b4c | ||
|
|
fca12b5358 | ||
|
|
c3ad76f7e8 | ||
|
|
b4a23d6519 | ||
|
|
c9e13fa37c | ||
|
|
ac9c5f39c8 | ||
|
|
2f674581c0 | ||
|
|
f2c08308e0 | ||
|
|
0770615f17 | ||
|
|
8186eada8b | ||
|
|
8e640483ed | ||
|
|
cbba20adb4 | ||
|
|
52f6cb1657 | ||
|
|
f6b5c2f0fe | ||
|
|
ef9b01b9d5 | ||
|
|
e64ae63529 | ||
|
|
466f88aa79 | ||
|
|
f6150e93f0 | ||
|
|
ec59cce14b | ||
|
|
0066899150 | ||
|
|
5a2c447c23 | ||
|
|
e1818d2728 | ||
|
|
c6ecf2cb3c | ||
|
|
4ef058c289 | ||
|
|
d44145d79f | ||
|
|
0bf536a604 | ||
|
|
07c2495952 | ||
|
|
2e26103244 | ||
|
|
b8cc67670d | ||
|
|
0f87c0712e | ||
|
|
f7c2752219 | ||
|
|
e6c43a98f3 | ||
|
|
d65e20e064 | ||
|
|
60ddda914e | ||
|
|
0b53138c76 | ||
|
|
eda1cabcdc | ||
|
|
2bdfee9116 | ||
|
|
3ac6a5b332 | ||
|
|
9461d2813a | ||
|
|
7a1a9039a8 | ||
|
|
13d620ebd6 | ||
|
|
d646ca70c8 | ||
|
|
b68d8736c4 | ||
|
|
d21d00acc5 | ||
|
|
615395b53d | ||
|
|
2a4e47c797 | ||
|
|
0162b5974c | ||
|
|
1ff6217c1f | ||
|
|
f3eb9cd11f | ||
|
|
3e2bf48478 | ||
|
|
9bb6db16a3 | ||
|
|
8ba533388b | ||
|
|
2798ac7c91 | ||
|
|
8a46872365 | ||
|
|
d5436d2f4f | ||
|
|
60240eeb58 | ||
|
|
e9f34cd850 | ||
|
|
c6a8b14992 | ||
|
|
e318515501 | ||
|
|
dab10d0265 | ||
|
|
d46dd24bfa | ||
|
|
f92038abfd | ||
|
|
b740362401 | ||
|
|
787085e6fe | ||
|
|
f8853f6af8 | ||
|
|
07f6bc1abe | ||
|
|
6afcd44af3 | ||
|
|
dbb7b269f0 | ||
|
|
36ad8d3245 | ||
|
|
8d51bf8b34 | ||
|
|
16b3d9f064 | ||
|
|
60ef5e4bc1 | ||
|
|
d069ec2f83 | ||
|
|
0ce25cde16 | ||
|
|
7b9fa334c9 | ||
|
|
9208194548 | ||
|
|
0f5d3e7ad4 | ||
|
|
fa99458944 | ||
|
|
841786bf6f | ||
|
|
61dbd7f4b8 | ||
|
|
6e9b194570 | ||
|
|
ea8ec3a612 | ||
|
|
bd73a3f8d9 | ||
|
|
709937dfee | ||
|
|
e747c9a1d9 | ||
|
|
f07c64d95c | ||
|
|
22f5dce8cd | ||
|
|
a34e27e776 | ||
|
|
322a8e4e7d | ||
|
|
6c10d2dfdb | ||
|
|
de16640b40 | ||
|
|
66280ae339 | ||
|
|
e52a82b0d3 | ||
|
|
be1b020ed4 | ||
|
|
a454e99dd8 | ||
|
|
9c2d57547c | ||
|
|
b25173a865 | ||
|
|
e83ee844c6 | ||
|
|
b43cdc1f43 | ||
|
|
7d5921060d | ||
|
|
2ac7027fa2 | ||
|
|
708fcaad72 | ||
|
|
1e65a3b75e | ||
|
|
1b5a180221 | ||
|
|
4b70388905 | ||
|
|
9eec84711c | ||
|
|
a7045d3cd6 | ||
|
|
a7d9f3f7e0 | ||
|
|
4efe59e308 | ||
|
|
cf0491e63a | ||
|
|
e0adfdd319 | ||
|
|
a5a039d951 | ||
|
|
7fe06052eb | ||
|
|
01e228fc5c | ||
|
|
5ff161f31f | ||
|
|
a3542086b4 | ||
|
|
5f9a98b5b1 | ||
|
|
2dbe9cf6cd | ||
|
|
d53f1f5b10 | ||
|
|
119306e911 | ||
|
|
b14d8769dd | ||
|
|
04561aa549 | ||
|
|
9ca3663989 | ||
|
|
eba43c2eee | ||
|
|
f9cb32e037 | ||
|
|
0b876d72e8 | ||
|
|
d39629c1d7 | ||
|
|
d15df0f3c9 | ||
|
|
79b4109aee | ||
|
|
48a223c341 | ||
|
|
305db67988 | ||
|
|
85b54eaf0c | ||
|
|
f881c2fd7b | ||
|
|
600fd2e5ea | ||
|
|
d9ffcf6e5c | ||
|
|
07f6b537e6 | ||
|
|
0ea87a849a | ||
|
|
4fa2d2da45 | ||
|
|
f84ed38c1b | ||
|
|
3f8adb2391 | ||
|
|
6aae0015a3 | ||
|
|
ed95ce3c84 | ||
|
|
424eeb80f6 | ||
|
|
cbd52eeee7 | ||
|
|
365f2ca0a7 | ||
|
|
90e3edaaf5 | ||
|
|
787de6a648 | ||
|
|
345d092fab | ||
|
|
4ac7aa26ea | ||
|
|
df72f43205 | ||
|
|
7123356671 | ||
|
|
6dddc99142 | ||
|
|
9441fa85a0 | ||
|
|
214cabdb6e | ||
|
|
807d5349f3 | ||
|
|
a73d914072 | ||
|
|
1659c856e9 | ||
|
|
fe907ccead | ||
|
|
10ebd99cb4 | ||
|
|
0c1de34504 | ||
|
|
944e2afe49 | ||
|
|
eab2c9d02b | ||
|
|
2dd850426f | ||
|
|
3454200674 | ||
|
|
ffb3713114 | ||
|
|
cf20ea49b6 | ||
|
|
4b0b45468f | ||
|
|
cbd6849697 | ||
|
|
972254c7fc | ||
|
|
1ca5ebc522 | ||
|
|
dd29b3636c | ||
|
|
dbdb68144b | ||
|
|
6f419f0138 | ||
|
|
c72dc0bed2 | ||
|
|
3a700b0862 | ||
|
|
ac38ea5127 | ||
|
|
063857915c | ||
|
|
752e681b52 | ||
|
|
97f7976b82 | ||
|
|
b606b18e1a | ||
|
|
08eadace47 | ||
|
|
01b4ca0fab | ||
|
|
d78278317c | ||
|
|
6f60d62ab6 | ||
|
|
2151b65303 | ||
|
|
03eaaca9e2 | ||
|
|
f200f2c2d8 | ||
|
|
82fd799139 | ||
|
|
d645382501 | ||
|
|
dcf70f3732 | ||
|
|
361371903c | ||
|
|
f3ba6487c6 | ||
|
|
01b73fea9d | ||
|
|
a10f688b46 | ||
|
|
434c65f237 | ||
|
|
1b80f7674f | ||
|
|
d5fc5c31e4 | ||
|
|
8551f2f61f | ||
|
|
da67b22c04 | ||
|
|
a6a61bd4a8 | ||
|
|
59f6abe492 | ||
|
|
836080b69a | ||
|
|
a437f0bbdb | ||
|
|
538c052de2 | ||
|
|
e6e9ec6858 | ||
|
|
d9b4afaa7e | ||
|
|
b085b32542 | ||
|
|
e492c7028d | ||
|
|
a5f1f9af47 | ||
|
|
cd6f91b1b6 | ||
|
|
8a1636b8c9 | ||
|
|
c25da68c47 | ||
|
|
5f2b4a0f92 | ||
|
|
702f7726f6 | ||
|
|
f3e5e3fa3e | ||
|
|
6e12623ad3 | ||
|
|
0d8f55c8ff | ||
|
|
733cab6b19 | ||
|
|
1678b45bd6 | ||
|
|
f8fc297f9e | ||
|
|
5931a4184b | ||
|
|
4cdf475600 | ||
|
|
b0f80ff896 | ||
|
|
8ecf8279b5 | ||
|
|
c5f2ba2898 | ||
|
|
b76f27bceb | ||
|
|
2ff7440089 | ||
|
|
593c3fdd1c | ||
|
|
7cd41244b1 | ||
|
|
4a1832c708 | ||
|
|
fd5e450cfb | ||
|
|
29533c95e8 | ||
|
|
68afaa694e | ||
|
|
83793a0cc6 | ||
|
|
02bc0b22e9 | ||
|
|
b8d207500c | ||
|
|
f633071926 | ||
|
|
c2afa9544a | ||
|
|
0ed184c719 | ||
|
|
c46c527c80 | ||
|
|
d035dddc04 | ||
|
|
5bba51579f | ||
|
|
e323a96b27 | ||
|
|
809151c3cc | ||
|
|
1d3d933e01 | ||
|
|
c444d1715d | ||
|
|
c837c3ab07 | ||
|
|
0dee5e6062 | ||
|
|
6907aaac68 | ||
|
|
2dc6b055bc | ||
|
|
3dfcb522ca | ||
|
|
7b96a7d244 | ||
|
|
c838569d4b | ||
|
|
8cbbf8d76d | ||
|
|
04d811fa9b | ||
|
|
310477749f | ||
|
|
d805734286 | ||
|
|
1fb3849127 | ||
|
|
378bcd4175 | ||
|
|
d91979d0c5 | ||
|
|
71783c2257 | ||
|
|
5ca9e761ad | ||
|
|
5f4c5fa637 | ||
|
|
65f2b419a0 | ||
|
|
325498cc54 | ||
|
|
aefb12e1e1 | ||
|
|
8aa0daaf94 | ||
|
|
bbe138f586 | ||
|
|
cc3a765a2b | ||
|
|
fbfbb7cfb9 | ||
|
|
b6ee9afd37 | ||
|
|
705910cc0f | ||
|
|
6087b542d8 | ||
|
|
5b86e422e0 | ||
|
|
f941f2cb2c | ||
|
|
e5f1a6368d | ||
|
|
06179f3571 | ||
|
|
652a494e4a | ||
|
|
b8aef4601c | ||
|
|
f97d3384fe | ||
|
|
c15090a303 | ||
|
|
780a78904e | ||
|
|
f7c5c62e4f | ||
|
|
d390dcb4c5 | ||
|
|
e227cf5929 | ||
|
|
8ff136b22b | ||
|
|
a0ab014e96 | ||
|
|
34f625313c | ||
|
|
fc76c92659 | ||
|
|
7343d08475 | ||
|
|
2ed7c7fec4 | ||
|
|
f2512f5316 | ||
|
|
30bb6562c0 | ||
|
|
db4e6dc340 | ||
|
|
1031be0d2f | ||
|
|
de6da9daba | ||
|
|
3732f917ae | ||
|
|
fd03e77751 | ||
|
|
d1bcdc591f | ||
|
|
0e4966443b | ||
|
|
4f4fce8635 | ||
|
|
38ad65a251 | ||
|
|
d294627ba9 | ||
|
|
73415837c4 | ||
|
|
68d2477f4f | ||
|
|
e11db82dd9 | ||
|
|
57b2018f66 | ||
|
|
cd39c56ca0 | ||
|
|
47dbe81e48 | ||
|
|
f1e05a442a | ||
|
|
10906e8494 | ||
|
|
3458a529af | ||
|
|
2583c83afb | ||
|
|
246e4449f8 | ||
|
|
b90b2f4460 | ||
|
|
716d6bcedb | ||
|
|
34543a0162 | ||
|
|
9b56d2ae20 | ||
|
|
089c96bf14 | ||
|
|
1e3db617db | ||
|
|
6d4417c125 | ||
|
|
1f82d54009 | ||
|
|
47146228e5 | ||
|
|
f0eb46b85d | ||
|
|
b23aba8116 | ||
|
|
6ff95297b7 | ||
|
|
bba76f5704 | ||
|
|
2a50557df1 | ||
|
|
b3a1599f5d | ||
|
|
58f585d694 | ||
|
|
5fd6835d03 | ||
|
|
40904f92cc | ||
|
|
7e83c61176 | ||
|
|
b9e84d99f3 | ||
|
|
6ac0a8cfea | ||
|
|
9faae5dbbd | ||
|
|
39a085bb9d | ||
|
|
b87fa34f6a | ||
|
|
53564bb8bc | ||
|
|
a208f77d16 | ||
|
|
1658be7ad4 | ||
|
|
3b4e9d602b | ||
|
|
7cf670627b | ||
|
|
9e6bb9269f | ||
|
|
2c71f9aa42 | ||
|
|
631c01438d | ||
|
|
a0bd420890 | ||
|
|
368e822b6f | ||
|
|
5dbb948c85 | ||
|
|
b1a3b97514 | ||
|
|
5419381faf | ||
|
|
e2215b7fad | ||
|
|
502d0e5d0a | ||
|
|
bd4f98d21f | ||
|
|
ef6ca7d457 | ||
|
|
6a9a281cf7 | ||
|
|
75ec616e2a | ||
|
|
a3ec37a3f2 | ||
|
|
52a192526e | ||
|
|
de15603ce3 | ||
|
|
3e9d03a953 | ||
|
|
b2c9bbf7c4 | ||
|
|
7e83b99676 | ||
|
|
03a20d0755 | ||
|
|
e11d73f4ea | ||
|
|
983fe9f2c9 | ||
|
|
4fd3fc48e7 | ||
|
|
5ae223bbd9 | ||
|
|
03785a0880 | ||
|
|
5ae58e7add | ||
|
|
eeb2f7448a | ||
|
|
086ab428fd | ||
|
|
b42a252538 | ||
|
|
9fc2ebe23c | ||
|
|
75124014ec | ||
|
|
5a0649ffbd | ||
|
|
759bb71d28 | ||
|
|
b2adcb9d6d | ||
|
|
006f834609 | ||
|
|
69a7918376 | ||
|
|
e5db879127 | ||
|
|
17b0d05eb8 | ||
|
|
b835d56587 | ||
|
|
1d353a28a3 | ||
|
|
4907be4346 | ||
|
|
1368f655c9 | ||
|
|
b71684734c | ||
|
|
1f78957aa6 | ||
|
|
17963dfb78 | ||
|
|
1513eb8390 | ||
|
|
44c560e6f4 | ||
|
|
5f7bcc3f90 | ||
|
|
d5ea573319 | ||
|
|
9f6e9ba151 | ||
|
|
cc4eff89b4 | ||
|
|
34fd08958f | ||
|
|
8215b23fab | ||
|
|
2fc5b1267f | ||
|
|
b7dd0456b0 | ||
|
|
b49b0ad02b | ||
|
|
80f51b38af | ||
|
|
f7227e5c9f | ||
|
|
272b998d5e | ||
|
|
7a14f444c1 | ||
|
|
bb275cc6d9 | ||
|
|
d4d51504cc | ||
|
|
5fce31c44a | ||
|
|
7ff248d6c9 | ||
|
|
dce29bffe6 | ||
|
|
86ea27194f | ||
|
|
960f6b6ae7 | ||
|
|
82b9a03ccb | ||
|
|
06364a839e | ||
|
|
83f625cc32 | ||
|
|
4a43da04c2 | ||
|
|
b81116b00f | ||
|
|
eb981b8cdc | ||
|
|
f58e534fb9 | ||
|
|
3d9fa98667 | ||
|
|
8b7c8f719d | ||
|
|
7d752357a5 | ||
|
|
9db430fabd | ||
|
|
74def21234 | ||
|
|
8fbbc8da58 | ||
|
|
081e0245c3 | ||
|
|
e9f162bd47 | ||
|
|
6d7370ad80 | ||
|
|
8c3f5deb44 | ||
|
|
4e08912507 | ||
|
|
918711e6b6 | ||
|
|
d5f8ae8310 | ||
|
|
935a88947b | ||
|
|
975ba144df | ||
|
|
8544d2eb36 | ||
|
|
d01d30fdfe | ||
|
|
e6b2db47c4 | ||
|
|
0422b6c19f | ||
|
|
f9ee1c414a | ||
|
|
4716fcd5d9 | ||
|
|
c357e53244 | ||
|
|
f1b3350aa5 | ||
|
|
debf254680 | ||
|
|
69ebf850c4 | ||
|
|
c0851b6c05 | ||
|
|
bb8a647d28 | ||
|
|
53863e693e | ||
|
|
54ea19fae2 | ||
|
|
c4302d2301 | ||
|
|
9a8ce920a7 | ||
|
|
64e5eb4a38 | ||
|
|
db0f5af0e0 | ||
|
|
178c7cdc0a | ||
|
|
0c33995ecd | ||
|
|
7c045a71c4 | ||
|
|
dd3e191e4c | ||
|
|
983f45d480 | ||
|
|
4f1efd062c | ||
|
|
b5f4c3cfe3 | ||
|
|
92d038c598 | ||
|
|
ac23c79703 | ||
|
|
0ccb577574 | ||
|
|
4becd9055c | ||
|
|
9c91c6ab52 | ||
|
|
f00b5c8e15 | ||
|
|
097dd861b4 | ||
|
|
e3d6b9ddb2 | ||
|
|
1e9b3e490d | ||
|
|
1d69371a8e | ||
|
|
665b6b09d5 | ||
|
|
874e13589b | ||
|
|
417517f0cd | ||
|
|
a91defbd66 | ||
|
|
722dddb467 | ||
|
|
70a4073db6 | ||
|
|
ad3b5be5c4 | ||
|
|
b8d339a92b | ||
|
|
b6afdfde59 | ||
|
|
31114a860c | ||
|
|
1de9299ba6 | ||
|
|
e574217e61 | ||
|
|
30446eab75 | ||
|
|
53ce647b18 | ||
|
|
ef36934feb | ||
|
|
9ccd2e576e | ||
|
|
ba79cf68fa | ||
|
|
5c16e6f4cc | ||
|
|
563ba7f77c | ||
|
|
e84d7c003b | ||
|
|
78ecb7e831 | ||
|
|
f38ee901bb | ||
|
|
469a2fa2a9 | ||
|
|
6b03186f4e | ||
|
|
4d502670a0 | ||
|
|
77eb297c81 | ||
|
|
caa342176b | ||
|
|
ec0bc4467c | ||
|
|
3a2bfeb203 | ||
|
|
ee644646d7 | ||
|
|
8db4f3b53b | ||
|
|
c7a688682a | ||
|
|
24470d88d4 | ||
|
|
5d7ca2a9be | ||
|
|
46d95d16c6 | ||
|
|
c642a0e4e5 | ||
|
|
ae69c27ece | ||
|
|
172cd601bc | ||
|
|
525578c20d | ||
|
|
dc3758536b | ||
|
|
b18ed6c36a | ||
|
|
79aae2d31f | ||
|
|
cfb0975fbe | ||
|
|
12d0685e1a | ||
|
|
e25de85396 | ||
|
|
4d9a231617 | ||
|
|
ef8226da8f | ||
|
|
8c1214be60 | ||
|
|
98c0a98a11 | ||
|
|
9e5face23d | ||
|
|
ad43ff0f73 | ||
|
|
fd1d2b61e2 | ||
|
|
3157cf3476 | ||
|
|
74f3146137 | ||
|
|
d9c6320492 | ||
|
|
9d1ced6beb | ||
|
|
a47a95dcef | ||
|
|
0aee1b0893 | ||
|
|
1e449cb9ad | ||
|
|
9f2433a967 | ||
|
|
689970aa8a | ||
|
|
ad6efae447 | ||
|
|
d101ea10f7 | ||
|
|
0fe9d15d30 | ||
|
|
d2f834f253 | ||
|
|
6b600d9c1f | ||
|
|
0aa1c430aa | ||
|
|
40a2481789 | ||
|
|
6116080f13 | ||
|
|
66e7478e60 | ||
|
|
357d709828 | ||
|
|
cd10488618 | ||
|
|
48cba4a6b6 | ||
|
|
223245bae0 | ||
|
|
1c95af8d0a | ||
|
|
e81155b41a | ||
|
|
3a587267ee | ||
|
|
2340550488 | ||
|
|
110f6d2197 | ||
|
|
dd5003f51a | ||
|
|
d3f9df828f | ||
|
|
f602401442 | ||
|
|
0f45aee3d0 | ||
|
|
db197cdfea | ||
|
|
8929a50a03 | ||
|
|
baae46efc2 | ||
|
|
5ec442ea11 | ||
|
|
51e6886687 | ||
|
|
0010f3c7b7 | ||
|
|
2fe2a80c61 | ||
|
|
8801c87c02 | ||
|
|
9e42df4617 | ||
|
|
ac52c80ed5 | ||
|
|
b6cbe880f6 | ||
|
|
9b677d6854 | ||
|
|
d1288d0997 | ||
|
|
0b10ffef38 | ||
|
|
b0763492ab | ||
|
|
52f0e2065d | ||
|
|
bc6f11bcaa | ||
|
|
2337954a15 | ||
|
|
626e9ccc3f | ||
|
|
84632cc148 | ||
|
|
f954f63071 | ||
|
|
39ded2f75b | ||
|
|
6a08bb12c7 | ||
|
|
9f22956d89 | ||
|
|
348623b7c9 | ||
|
|
0a1e18fbc5 | ||
|
|
e906601830 | ||
|
|
ad53c56b96 | ||
|
|
391ee24e76 | ||
|
|
bd354453f1 | ||
|
|
816e652268 | ||
|
|
c90cb8e457 | ||
|
|
e45c4d59f4 | ||
|
|
d70f9bc3fc |
@@ -0,0 +1,8 @@
|
||||
[run]
|
||||
source = src/python
|
||||
concurrency = multiprocessing,thread
|
||||
disable_warnings = no-data-collected
|
||||
omit = **/__main__.py
|
||||
|
||||
[combine]
|
||||
disable_warnings = no-data-collected
|
||||
@@ -0,0 +1,69 @@
|
||||
# GitHub Actions build workflow
|
||||
name: build
|
||||
|
||||
on: ["push", "pull_request"]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||
|
||||
timeout-minutes: 60
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Install Python - Linux
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: 3.8
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
|
||||
- name: Install Python - macOS/Windows
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: 3.9
|
||||
if: matrix.os != 'ubuntu-latest'
|
||||
|
||||
- name: Install Java
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
distribution: "zulu"
|
||||
java-version: "8"
|
||||
|
||||
- name: Install dependencies - Linux
|
||||
run: sudo apt-get update && sudo apt-get install libsndfile1
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
|
||||
- name: Install dependencies - macOS
|
||||
run: |
|
||||
echo "OMP_NUM_THREADS=1" >> $GITHUB_ENV
|
||||
echo "PYTORCH_MPS_DISABLE=1" >> $GITHUB_ENV
|
||||
echo "LLAMA_NO_METAL=1" >> $GITHUB_ENV
|
||||
echo "ACCELERATE_USE_CPU=1" >> $GITHUB_ENV
|
||||
echo "TIKA_STARTUP_SLEEP=30" >> $GITHUB_ENV
|
||||
echo "TIKA_STARTUP_MAX_RETRY=10" >> $GITHUB_ENV
|
||||
if: matrix.os == 'macos-latest'
|
||||
|
||||
- name: Install dependencies - Windows
|
||||
run: choco install wget
|
||||
if: matrix.os == 'windows-latest'
|
||||
|
||||
- name: Build
|
||||
run: |
|
||||
pip install -U wheel
|
||||
pip install .[all,dev]
|
||||
python -c "import nltk; nltk.download('punkt')"
|
||||
python --version
|
||||
make data coverage
|
||||
|
||||
- uses: pre-commit/[email protected]
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
|
||||
- name: Test Coverage
|
||||
run: coveralls --service=github
|
||||
if: matrix.os == 'ubuntu-latest'
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -0,0 +1,18 @@
|
||||
name: docs
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: 3.8
|
||||
- run: |
|
||||
pip install -U pip wheel
|
||||
pip install .[all,dev]
|
||||
- run: mkdocs gh-deploy --force
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
build/
|
||||
dist/
|
||||
docker/**/*.yml
|
||||
htmlcov/
|
||||
*egg-info/
|
||||
__pycache__/
|
||||
.coverage
|
||||
.coverage.*
|
||||
*.pyc
|
||||
.vscode/
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
repos:
|
||||
- repo: https://github.com/pycqa/pylint
|
||||
rev: v2.16.2
|
||||
hooks:
|
||||
- id: pylint
|
||||
args:
|
||||
- -d import-error
|
||||
- -d duplicate-code
|
||||
- repo: https://github.com/ambv/black
|
||||
rev: 23.1.0
|
||||
hooks:
|
||||
- id: black
|
||||
language_version: python3
|
||||
@@ -15,6 +15,3 @@ min-public-methods=0
|
||||
|
||||
[FORMAT]
|
||||
max-line-length=150
|
||||
|
||||
[MESSAGES CONTROL]
|
||||
disable=I0011,R0201,W0105,W0108,W0110,W0141,W0621,W0640
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
# Travis CI build script - test on all supported platforms
|
||||
os: linux
|
||||
dist: xenial
|
||||
language: python
|
||||
jobs:
|
||||
include:
|
||||
- name: "Linux"
|
||||
script:
|
||||
- make coverage
|
||||
after_success:
|
||||
- coveralls
|
||||
- name: "macOS"
|
||||
os: osx
|
||||
osx_image: xcode11.4
|
||||
language: shell
|
||||
script:
|
||||
- make PYTHON=python3 test
|
||||
- name: "Windows"
|
||||
os: windows
|
||||
language: shell
|
||||
env: PATH=/c/Python36:/c/Python36/Scripts:$PATH
|
||||
before_install:
|
||||
- choco install make
|
||||
- choco install python --version 3.6.8
|
||||
- python -m pip install -U pip wheel
|
||||
- python -m pip install torch==1.6.0+cpu torchvision==0.7.0+cpu -f https://download.pytorch.org/whl/torch_stable.html
|
||||
install:
|
||||
- pip3 install -U pip wheel coverage coveralls
|
||||
- pip3 install .
|
||||
- python3 --version || python --version
|
||||
script:
|
||||
- make test
|
||||
@@ -0,0 +1,11 @@
|
||||
cff-version: 1.2.0
|
||||
date-released: 2020-08-11
|
||||
message: "If you use this software, please cite it as below."
|
||||
title: "txtai: the all-in-one embeddings database"
|
||||
abstract: "txtai is an all-in-one open-source embeddings database for semantic search, LLM orchestration and language model workflows"
|
||||
url: "https://github.com/neuml/txtai"
|
||||
authors:
|
||||
- family-names: "Mezzetti"
|
||||
given-names: "David"
|
||||
affiliation: NeuML
|
||||
license: Apache-2.0
|
||||
@@ -175,7 +175,7 @@
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
Copyright 2020 NeuML LLC
|
||||
Copyright 2020- NeuML LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
||||
@@ -8,13 +8,44 @@ export PYTHONPATH := ${SRC_DIR}:${TEST_DIR}:${PYTHONPATH}
|
||||
export PATH := ${TEST_DIR}:${PATH}
|
||||
export PYTHONWARNINGS := ignore
|
||||
|
||||
# Disable tokenizer parallelism for tests
|
||||
export TOKENIZERS_PARALLELISM := false
|
||||
|
||||
# Default python executable if not provided
|
||||
PYTHON ?= python
|
||||
|
||||
# Check for wget
|
||||
WGET := $(shell wget --version 2> /dev/null)
|
||||
ifndef WGET
|
||||
$(error "Required binary `wget` not found, please install wget OS package")
|
||||
endif
|
||||
|
||||
# Download test data
|
||||
data:
|
||||
mkdir -p /tmp/txtai
|
||||
wget -N https://github.com/neuml/txtai/releases/download/v6.2.0/tests.tar.gz -P /tmp
|
||||
tar -xvzf /tmp/tests.tar.gz -C /tmp
|
||||
|
||||
# Unit tests
|
||||
test:
|
||||
${PYTHON} -m unittest discover -v -s ${TEST_DIR}
|
||||
|
||||
# Run tests while calculating code coverage
|
||||
coverage:
|
||||
coverage run --source=${SRC_DIR} -m unittest discover -v -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testann -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testapi.testauthorization -k testapi.testcluster -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testapi.testencoding -k testapi.testextension -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testapp -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testarchive -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testcloud -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testconsole -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testdatabase -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testembeddings -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testgraph -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testmodels -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testoptional -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testpipeline -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testscoring -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testvectors -s ${TEST_DIR}
|
||||
coverage run -m unittest discover -v -k testworkflow -s ${TEST_DIR}
|
||||
coverage combine
|
||||
|
||||
@@ -1,175 +1,233 @@
|
||||
# txtai: AI-powered search engine
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/neuml/txtai/master/logo.png"/>
|
||||
</p>
|
||||
|
||||
[](https://github.com/neuml/txtai/releases)
|
||||
[](https://github.com/neuml/txtai/releases)
|
||||
[](https://github.com/neuml/txtai/issues)
|
||||
[](https://github.com/neuml/txtai)
|
||||
[](https://travis-ci.org/neuml/txtai)
|
||||
[](https://coveralls.io/github/neuml/txtai?branch=master)
|
||||
<p align="center">
|
||||
<b>All-in-one embeddings database</b>
|
||||
</p>
|
||||
|
||||
txtai builds an AI-powered index over sections of text. txtai supports building text indices to perform similarity searches and create extractive question-answering based systems.
|
||||
<p align="center">
|
||||
<a href="https://github.com/neuml/txtai/releases">
|
||||
<img src="https://img.shields.io/github/release/neuml/txtai.svg?style=flat&color=success" alt="Version"/>
|
||||
</a>
|
||||
<a href="https://github.com/neuml/txtai">
|
||||
<img src="https://img.shields.io/github/last-commit/neuml/txtai.svg?style=flat&color=blue" alt="GitHub last commit"/>
|
||||
</a>
|
||||
<a href="https://github.com/neuml/txtai/issues">
|
||||
<img src="https://img.shields.io/github/issues/neuml/txtai.svg?style=flat&color=success" alt="GitHub issues"/>
|
||||
</a>
|
||||
<a href="https://join.slack.com/t/txtai/shared_invite/zt-1cagya4yf-DQeuZbd~aMwH5pckBU4vPg">
|
||||
<img src="https://img.shields.io/badge/slack-join-blue?style=flat&logo=slack&logocolor=white" alt="Join Slack"/>
|
||||
</a>
|
||||
<a href="https://github.com/neuml/txtai/actions?query=workflow%3Abuild">
|
||||
<img src="https://github.com/neuml/txtai/workflows/build/badge.svg" alt="Build Status"/>
|
||||
</a>
|
||||
<a href="https://coveralls.io/github/neuml/txtai?branch=master">
|
||||
<img src="https://img.shields.io/coverallsCoverage/github/neuml/txtai" alt="Coverage Status">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
txtai is an all-in-one embeddings database for semantic search, LLM orchestration and language model workflows.
|
||||
|
||||

|
||||

|
||||
|
||||
Embeddings databases are a union of vector indexes (sparse and dense), graph networks and relational databases. This enables vector search with SQL, topic modeling, retrieval augmented generation and more.
|
||||
|
||||
Embeddings databases can stand on their own and/or serve as a powerful knowledge source for large language model (LLM) prompts.
|
||||
|
||||
Summary of txtai features:
|
||||
|
||||
- 🔎 Vector search with SQL, object storage, topic modeling, graph analysis and multimodal indexing
|
||||
- 📄 Create embeddings for text, documents, audio, images and video
|
||||
- 💡 Pipelines powered by language models that run LLM prompts, question-answering, labeling, transcription, translation, summarization and more
|
||||
- ↪️️ Workflows to join pipelines together and aggregate business logic. txtai processes can be simple microservices or multi-model workflows.
|
||||
- ⚙️ Build with Python or YAML. API bindings available for [JavaScript](https://github.com/neuml/txtai.js), [Java](https://github.com/neuml/txtai.java), [Rust](https://github.com/neuml/txtai.rs) and [Go](https://github.com/neuml/txtai.go).
|
||||
- ☁️ Run local or scale out with container orchestration
|
||||
|
||||
txtai is built with Python 3.8+, [Hugging Face Transformers](https://github.com/huggingface/transformers), [Sentence Transformers](https://github.com/UKPLab/sentence-transformers) and [FastAPI](https://github.com/tiangolo/fastapi). txtai is open-source under an Apache 2.0 license.
|
||||
|
||||
*Interested in an easy and secure way to run hosted txtai applications? Then join the [txtai.cloud](https://txtai.cloud) preview to learn more.*
|
||||
|
||||
## Why txtai?
|
||||
|
||||

|
||||

|
||||
|
||||
New vector databases, LLM frameworks and everything in between are sprouting up daily. Why build with txtai?
|
||||
|
||||
- Up and running in minutes with [pip](https://neuml.github.io/txtai/install/) or [Docker](https://neuml.github.io/txtai/cloud/)
|
||||
```python
|
||||
# Get started in a couple lines
|
||||
import txtai
|
||||
|
||||
embeddings = txtai.Embeddings()
|
||||
embeddings.index(["Correct", "Not what we hoped"])
|
||||
embeddings.search("positive", 1)
|
||||
#[(0, 0.29862046241760254)]
|
||||
```
|
||||
- Built-in API makes it easy to develop applications using your programming language of choice
|
||||
```yaml
|
||||
# app.yml
|
||||
embeddings:
|
||||
path: sentence-transformers/all-MiniLM-L6-v2
|
||||
```
|
||||
```bash
|
||||
CONFIG=app.yml uvicorn "txtai.api:app"
|
||||
curl -X GET "http://localhost:8000/search?query=positive"
|
||||
```
|
||||
- Run local - no need to ship data off to disparate remote services
|
||||
- Work with micromodels all the way up to large language models (LLMs)
|
||||
- Low footprint - install additional dependencies and scale up when needed
|
||||
- [Learn by example](https://neuml.github.io/txtai/examples) - notebooks cover all available functionality
|
||||
|
||||
## Use Cases
|
||||
|
||||
The following sections introduce common txtai use cases. A comprehensive set of over 50 [example notebooks and applications](https://neuml.github.io/txtai/examples) are also available.
|
||||
|
||||
### Semantic Search
|
||||
|
||||
Build semantic/similarity/vector/neural search applications.
|
||||
|
||||

|
||||
|
||||
NeuML uses txtai and/or the concepts behind it to power all of our Natural Language Processing (NLP) applications. Example applications:
|
||||
Traditional search systems use keywords to find data. Semantic search has an understanding of natural language and identifies results that have the same meaning, not necessarily the same keywords.
|
||||
|
||||
- [cord19q](https://github.com/neuml/cord19q) - COVID-19 literature analysis
|
||||
- [paperai](https://github.com/neuml/paperai) - AI-powered literature discovery and review engine for medical/scientific papers
|
||||
- [neuspo](https://neuspo.com) - a fact-driven, real-time sports event and news site
|
||||
- [codequestion](https://github.com/neuml/codequestion) - Ask coding questions directly from the terminal
|
||||

|
||||

|
||||
|
||||
txtai is built on the following stack:
|
||||
Get started with the following examples.
|
||||
|
||||
- [sentence-transformers](https://github.com/UKPLab/sentence-transformers)
|
||||
- [transformers](https://github.com/huggingface/transformers)
|
||||
- [faiss](https://github.com/facebookresearch/faiss)
|
||||
- Python 3.6+
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [Introducing txtai](https://github.com/neuml/txtai/blob/master/examples/01_Introducing_txtai.ipynb) [▶️](https://www.youtube.com/watch?v=SIezMnVdmMs) | Overview of the functionality provided by txtai | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/01_Introducing_txtai.ipynb) |
|
||||
| [Similarity search with images](https://github.com/neuml/txtai/blob/master/examples/13_Similarity_search_with_images.ipynb) | Embed images and text into the same space for search | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/13_Similarity_search_with_images.ipynb) |
|
||||
| [Build a QA database](https://github.com/neuml/txtai/blob/master/examples/34_Build_a_QA_database.ipynb) | Question matching with semantic search | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/34_Build_a_QA_database.ipynb) |
|
||||
| [Semantic Graphs](https://github.com/neuml/txtai/blob/master/examples/38_Introducing_the_Semantic_Graph.ipynb) | Explore topics, data connectivity and run network analysis| [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/38_Introducing_the_Semantic_Graph.ipynb) |
|
||||
|
||||
### LLM Orchestration
|
||||
|
||||
LLM chains, retrieval augmented generation (RAG), chat with your data, pipelines and workflows that interface with large language models (LLMs).
|
||||
|
||||
#### Chains
|
||||
|
||||
Integrate LLM chains (known as workflows in txtai), multiple LLM agents and self-critique.
|
||||
|
||||

|
||||
|
||||
See below to learn more.
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [Prompt templates and task chains](https://github.com/neuml/txtai/blob/master/examples/44_Prompt_templates_and_task_chains.ipynb) | Build model prompts and connect tasks together with workflows | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/44_Prompt_templates_and_task_chains.ipynb) |
|
||||
| [Integrate LLM frameworks](https://github.com/neuml/txtai/blob/master/examples/53_Integrate_LLM_Frameworks.ipynb) | Integrate llama.cpp, LiteLLM and custom generation frameworks | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/53_Integrate_LLM_Frameworks.ipynb) |
|
||||
| [Build knowledge graphs with LLMs](https://github.com/neuml/txtai/blob/master/examples/57_Build_knowledge_graphs_with_LLM_driven_entity_extraction.ipynb) | Build knowledge graphs with LLM-driven entity extraction | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/57_Build_knowledge_graphs_with_LLM_driven_entity_extraction.ipynb) |
|
||||
|
||||
#### Retrieval augmented generation
|
||||
|
||||
Retrieval augmented generation (RAG) reduces the risk of LLM hallucinations by constraining the output with a knowledge base as context. RAG is commonly used to "chat with your data".
|
||||
|
||||

|
||||

|
||||
|
||||
A novel feature of txtai is that it can provide both an answer and source citation.
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [Build RAG pipelines with txtai](https://github.com/neuml/txtai/blob/master/examples/52_Build_RAG_pipelines_with_txtai.ipynb) | Guide on retrieval augmented generation including how to create citations | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/52_Build_RAG_pipelines_with_txtai.ipynb) |
|
||||
| [Advanced RAG with graph path traversal](https://github.com/neuml/txtai/blob/master/examples/58_Advanced_RAG_with_graph_path_traversal.ipynb) | Graph path traversal to collect complex sets of data for advanced RAG | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/58_Advanced_RAG_with_graph_path_traversal.ipynb) |
|
||||
| [Advanced RAG with guided generation](https://github.com/neuml/txtai/blob/master/examples/60_Advanced_RAG_with_guided_generation.ipynb) | Retrieval Augmented and Guided Generation | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/60_Advanced_RAG_with_guided_generation.ipynb) |
|
||||
| [RAG with llama.cpp and external API services](https://github.com/neuml/txtai/blob/master/examples/62_RAG_with_llama_cpp_and_external_API_services.ipynb) | RAG with additional vector and LLM frameworks | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/62_RAG_with_llama_cpp_and_external_API_services.ipynb) |
|
||||
|
||||
### Language Model Workflows
|
||||
|
||||
Language model workflows, also known as semantic workflows, connect language models together to build intelligent applications.
|
||||
|
||||

|
||||

|
||||
|
||||
While LLMs are powerful, there are plenty of smaller, more specialized models that work better and faster for specific tasks. This includes models for extractive question-answering, automatic summarization, text-to-speech, transcription and translation.
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [Run pipeline workflows](https://github.com/neuml/txtai/blob/master/examples/14_Run_pipeline_workflows.ipynb) [▶️](https://www.youtube.com/watch?v=UBMPDCn1gEU) | Simple yet powerful constructs to efficiently process data | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/14_Run_pipeline_workflows.ipynb) |
|
||||
| [Building abstractive text summaries](https://github.com/neuml/txtai/blob/master/examples/09_Building_abstractive_text_summaries.ipynb) | Run abstractive text summarization | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/09_Building_abstractive_text_summaries.ipynb) |
|
||||
| [Transcribe audio to text](https://github.com/neuml/txtai/blob/master/examples/11_Transcribe_audio_to_text.ipynb) | Convert audio files to text | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/11_Transcribe_audio_to_text.ipynb) |
|
||||
| [Translate text between languages](https://github.com/neuml/txtai/blob/master/examples/12_Translate_text_between_languages.ipynb) | Streamline machine translation and language detection | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/12_Translate_text_between_languages.ipynb) |
|
||||
|
||||
## Installation
|
||||
|
||||

|
||||

|
||||
|
||||
The easiest way to install is via pip and PyPI
|
||||
|
||||
pip install txtai
|
||||
|
||||
You can also install txtai directly from GitHub. Using a Python Virtual Environment is recommended.
|
||||
|
||||
pip install git+https://github.com/neuml/txtai
|
||||
|
||||
Python 3.6+ is supported
|
||||
|
||||
### Troubleshooting
|
||||
This project has dependencies that require compiling native code. Windows and macOS systems require the following additional steps. Most Linux environments will install without any additional steps.
|
||||
|
||||
#### Windows
|
||||
|
||||
- Install C++ Build Tools - https://visualstudio.microsoft.com/visual-cpp-build-tools/
|
||||
- PyTorch Windows binaries are not on PyPI, the following url link must be added when installing
|
||||
|
||||
```
|
||||
pip install txtai -f https://download.pytorch.org/whl/torch_stable.html
|
||||
```
|
||||
|
||||
See [pytorch.org](https://pytorch.org) for more information.
|
||||
|
||||
#### macOS
|
||||
|
||||
- Run the following before installing
|
||||
|
||||
```
|
||||
brew install libomp
|
||||
```
|
||||
|
||||
See [this link](https://github.com/kyamagu/faiss-wheels#prerequisite) for more information.
|
||||
|
||||
## Examples
|
||||
|
||||
The examples directory has a series of examples and notebooks giving an overview of txtai. See the list of notebooks below.
|
||||
|
||||
### Notebooks
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [Introducing txtai](https://github.com/neuml/txtai/blob/master/examples/01_Introducing_txtai.ipynb) | Overview of the functionality provided by txtai |[](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/01_Introducing_txtai.ipynb) |
|
||||
| [Extractive QA with txtai](https://github.com/neuml/txtai/blob/master/examples/02_Extractive_QA_with_txtai.ipynb) | Extractive question-answering with txtai |[](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/02_Extractive_QA_with_txtai.ipynb) |
|
||||
| [Build an Embeddings index from a data source](https://github.com/neuml/txtai/blob/master/examples/03_Build_an_Embeddings_index_from_a_data_source.ipynb) | Embeddings index from a data source backed by word embeddings |[](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/03_Build_an_Embeddings_index_from_a_data_source.ipynb) |
|
||||
| [Extractive QA with Elasticsearch](https://github.com/neuml/txtai/blob/master/examples/04_Extractive_QA_with_Elasticsearch.ipynb) | Extractive question-answering with Elasticsearch |[](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/04_Extractive_QA_with_Elasticsearch.ipynb) |
|
||||
|
||||
## Configuration
|
||||
|
||||
The following section goes over available settings for Embeddings and Extractor instances.
|
||||
|
||||
### Embeddings
|
||||
|
||||
Embeddings methods are set through the constructor. Examples below.
|
||||
|
||||
```python
|
||||
# Transformers embeddings model
|
||||
Embeddings({"method": "transformers",
|
||||
"path": "sentence-transformers/bert-base-nli-mean-tokens"})
|
||||
|
||||
# Word embeddings model
|
||||
Embeddings({"path": vectors,
|
||||
"storevectors": True,
|
||||
"scoring": "bm25",
|
||||
"pca": 3,
|
||||
"quantize": True})
|
||||
```
|
||||
pip install txtai
|
||||
```
|
||||
|
||||
#### method
|
||||
```yaml
|
||||
method: transformers|words
|
||||
```
|
||||
Python 3.8+ is supported. Using a Python [virtual environment](https://docs.python.org/3/library/venv.html) is recommended.
|
||||
|
||||
Sets the sentence embeddings method to use. When set to _transformers_, the embeddings object builds sentence embeddings using the sentence transformers. Otherwise a word embeddings model is used. Defaults to words.
|
||||
See the detailed [install instructions](https://neuml.github.io/txtai/install) for more information covering [optional dependencies](https://neuml.github.io/txtai/install/#optional-dependencies), [environment specific prerequisites](https://neuml.github.io/txtai/install/#environment-specific-prerequisites), [installing from source](https://neuml.github.io/txtai/install/#install-from-source), [conda support](https://neuml.github.io/txtai/install/#conda) and how to [run with containers](https://neuml.github.io/txtai/cloud).
|
||||
|
||||
#### path
|
||||
```yaml
|
||||
path: string
|
||||
```
|
||||
## Model guide
|
||||
|
||||
Required field that sets the path for a vectors model. When method set to _transformers_, this must be a path to a Hugging Face transformers model. Otherwise,
|
||||
it must be a path to a local word embeddings model.
|
||||

|
||||
|
||||
#### storevectors
|
||||
```yaml
|
||||
storevectors: boolean
|
||||
```
|
||||
See the table below for the current recommended models. These models all allow commercial use and offer a blend of speed and performance.
|
||||
|
||||
Enables copying of a vectors model set in path into the embeddings models output directory on save. This option enables a fully encapsulated index with no external file dependencies.
|
||||
| Component | Model(s) |
|
||||
| ----------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
|
||||
| [Embeddings](https://neuml.github.io/txtai/embeddings) | [all-MiniLM-L6-v2](https://hf.co/sentence-transformers/all-MiniLM-L6-v2) |
|
||||
| [Image Captions](https://neuml.github.io/txtai/pipeline/image/caption) | [BLIP](https://hf.co/Salesforce/blip-image-captioning-base) |
|
||||
| [Labels - Zero Shot](https://neuml.github.io/txtai/pipeline/text/labels) | [BART-Large-MNLI](https://hf.co/facebook/bart-large) |
|
||||
| [Labels - Fixed](https://neuml.github.io/txtai/pipeline/text/labels) | Fine-tune with [training pipeline](https://neuml.github.io/txtai/pipeline/train/trainer) |
|
||||
| [Large Language Model (LLM)](https://neuml.github.io/txtai/pipeline/text/llm) | [Mistral 7B OpenOrca](https://hf.co/Open-Orca/Mistral-7B-OpenOrca) |
|
||||
| [Summarization](https://neuml.github.io/txtai/pipeline/text/summary) | [DistilBART](https://hf.co/sshleifer/distilbart-cnn-12-6) |
|
||||
| [Text-to-Speech](https://neuml.github.io/txtai/pipeline/audio/texttospeech) | [ESPnet JETS](https://hf.co/NeuML/ljspeech-jets-onnx) |
|
||||
| [Transcription](https://neuml.github.io/txtai/pipeline/audio/transcription) | [Whisper](https://hf.co/openai/whisper-base) |
|
||||
| [Translation](https://neuml.github.io/txtai/pipeline/text/translation) | [OPUS Model Series](https://hf.co/Helsinki-NLP) |
|
||||
|
||||
#### scoring
|
||||
```yaml
|
||||
scoring: bm25|tfidf|sif
|
||||
```
|
||||
Models can be loaded as either a path from the Hugging Face Hub or a local directory. Model paths are optional, defaults are loaded when not specified. For tasks with no recommended model, txtai uses the default models as shown in the Hugging Face Tasks guide.
|
||||
|
||||
For word embedding models, a scoring model allows building weighted averages of word vectors for a given sentence. Supports BM25, tf-idf and SIF (smooth inverse frequency) methods. If a scoring method is not provided, mean sentence embeddings are built.
|
||||
See the following links to learn more.
|
||||
|
||||
#### pca
|
||||
```yaml
|
||||
pca: int
|
||||
```
|
||||
- [Hugging Face Tasks](https://hf.co/tasks)
|
||||
- [Hugging Face Model Hub](https://hf.co/models)
|
||||
- [MTEB Leaderboard](https://hf.co/spaces/mteb/leaderboard)
|
||||
- [LMSYS LLM Leaderboard](https://chat.lmsys.org/?leaderboard)
|
||||
- [Open LLM Leaderboard](https://hf.co/spaces/HuggingFaceH4/open_llm_leaderboard)
|
||||
|
||||
Removes _n_ principal components from generated sentence embeddings. When enabled, a TruncatedSVD model is built to help with dimensionality reduction. After pooling of vectors creates a single sentence embedding, this method is applied.
|
||||
## Powered by txtai
|
||||
|
||||
#### backend
|
||||
```yaml
|
||||
backend: annoy|faiss|hnsw
|
||||
```
|
||||
The following applications are powered by txtai.
|
||||
|
||||
Approximate Nearest Neighbor (ANN) index backend for storing generated sentence embeddings. Defaults to Faiss for Linux/macOS and Annoy for Windows. Faiss currently is not supported on Windows.
|
||||

|
||||
|
||||
#### quantize
|
||||
```yaml
|
||||
quantize: boolean
|
||||
```
|
||||
| Application | Description |
|
||||
|:------------ |:-------------|
|
||||
| [txtchat](https://github.com/neuml/txtchat) | Retrieval Augmented Generation (RAG) powered search |
|
||||
| [paperai](https://github.com/neuml/paperai) | Semantic search and workflows for medical/scientific papers |
|
||||
| [codequestion](https://github.com/neuml/codequestion) | Semantic search for developers |
|
||||
| [tldrstory](https://github.com/neuml/tldrstory) | Semantic search for headlines and story text |
|
||||
|
||||
Enables quanitization of generated sentence embeddings. If the index backend supports it, sentence embeddings will be stored with 8-bit precision vs 32-bit.
|
||||
Only Faiss currently supports quantization.
|
||||
In addition to this list, there are also many other [open-source projects](https://github.com/neuml/txtai/network/dependents), [published research](https://scholar.google.com/scholar?q=txtai&hl=en&as_ylo=2022) and closed proprietary/commercial projects that have built on txtai in production.
|
||||
|
||||
### Extractor
|
||||
## Further Reading
|
||||
|
||||
Extractor methods are set as constructor arguments. Examples below.
|
||||

|
||||

|
||||
|
||||
```python
|
||||
Extractor(embeddings, path, quantize)
|
||||
```
|
||||
- [Introducing txtai, the all-in-one embeddings database](https://medium.com/neuml/introducing-txtai-the-all-in-one-embeddings-database-c721f4ff91ad)
|
||||
- [Tutorial series on Hashnode](https://neuml.hashnode.dev/series/txtai-tutorial) | [dev.to](https://dev.to/neuml/tutorial-series-on-txtai-ibg)
|
||||
- [What's new in txtai 7.0](https://medium.com/neuml/whats-new-in-txtai-7-0-855ad6a55440) | [6.0](https://medium.com/neuml/whats-new-in-txtai-6-0-7d93eeedf804) | [5.0](https://medium.com/neuml/whats-new-in-txtai-5-0-e5c75a13b101) | [4.0](https://medium.com/neuml/whats-new-in-txtai-4-0-bbc3a65c3d1c)
|
||||
- [Getting started with semantic search](https://medium.com/neuml/getting-started-with-semantic-search-a9fd9d8a48cf) | [workflows](https://medium.com/neuml/getting-started-with-semantic-workflows-2fefda6165d9)
|
||||
- [Running txtai at scale](https://medium.com/neuml/running-at-scale-with-txtai-71196cdd99f9)
|
||||
|
||||
#### embeddings
|
||||
```yaml
|
||||
embeddings: Embeddings object instance
|
||||
```
|
||||
## Documentation
|
||||
|
||||
Embeddings object instance. Used to query and find candidate text snippets to run the question-answer model against.
|
||||
[Full documentation on txtai](https://neuml.github.io/txtai) including configuration settings for embeddings, pipelines, workflows, API and a FAQ with common questions/issues is available.
|
||||
|
||||
#### path
|
||||
```yaml
|
||||
path: string
|
||||
```
|
||||
## Contributing
|
||||
|
||||
Required path to a Hugging Face SQuAD fine-tuned model. Used to answer questions.
|
||||
|
||||
#### quantize
|
||||
```yaml
|
||||
quantize: boolean
|
||||
```
|
||||
|
||||
Enables dynamic quantization of the Hugging Face model. This is a runtime setting and doesn't save space. It is used to improve the inference time performance of the QA model.
|
||||
For those who would like to contribute to txtai, please see [this guide](https://github.com/neuml/.github/blob/master/CONTRIBUTING.md).
|
||||
|
||||
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 41 KiB |
@@ -0,0 +1,13 @@
|
||||
# Set base image
|
||||
ARG BASE_IMAGE=neuml/txtai-cpu
|
||||
FROM $BASE_IMAGE
|
||||
|
||||
# Copy configuration
|
||||
COPY config.yml .
|
||||
|
||||
# Run local API instance to cache models in container
|
||||
RUN python -c "from txtai.api import API; API('config.yml', False)"
|
||||
|
||||
# Start server and listen on all interfaces
|
||||
ENV CONFIG "config.yml"
|
||||
ENTRYPOINT ["uvicorn", "--host", "0.0.0.0", "txtai.api:app"]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Set base image
|
||||
ARG BASE_IMAGE=neuml/txtai-cpu
|
||||
FROM $BASE_IMAGE
|
||||
|
||||
# Application script to copy into image
|
||||
ARG APP=api.py
|
||||
|
||||
# Install Lambda Runtime Interface Client and Mangum ASGI bindings
|
||||
RUN pip install awslambdaric mangum
|
||||
|
||||
# Copy configuration
|
||||
COPY config.yml .
|
||||
|
||||
# Run local API instance to cache models in container
|
||||
RUN python -c "from txtai.api import API; API('config.yml', False)"
|
||||
|
||||
# Copy application
|
||||
COPY $APP ./app.py
|
||||
|
||||
# Start runtime client using default application handler
|
||||
ENV CONFIG "config.yml"
|
||||
ENTRYPOINT ["python", "-m", "awslambdaric"]
|
||||
CMD ["app.handler"]
|
||||
@@ -0,0 +1,17 @@
|
||||
"""
|
||||
Lambda handler for a txtai API instance
|
||||
"""
|
||||
|
||||
from mangum import Mangum
|
||||
|
||||
from txtai.api import app, start
|
||||
|
||||
# pylint: disable=C0103
|
||||
# Create FastAPI application instance wrapped by Mangum
|
||||
handler = None
|
||||
if not handler:
|
||||
# Start application
|
||||
start()
|
||||
|
||||
# Create handler
|
||||
handler = Mangum(app, lifespan="off")
|
||||
@@ -0,0 +1,33 @@
|
||||
"""
|
||||
Lambda handler for txtai workflows
|
||||
"""
|
||||
|
||||
import json
|
||||
|
||||
from txtai.api import API
|
||||
|
||||
APP = None
|
||||
|
||||
|
||||
# pylint: disable=W0603,W0613
|
||||
def handler(event, context):
|
||||
"""
|
||||
Runs a workflow using input event parameters.
|
||||
|
||||
Args:
|
||||
event: input event
|
||||
context: input context
|
||||
|
||||
Returns:
|
||||
Workflow results
|
||||
"""
|
||||
|
||||
# Create (or get) global app instance
|
||||
global APP
|
||||
APP = APP if APP else API("config.yml")
|
||||
|
||||
# Get parameters from event body
|
||||
event = json.loads(event["body"])
|
||||
|
||||
# Run workflow and return results
|
||||
return {"statusCode": 200, "headers": {"Content-Type": "application/json"}, "body": list(APP.workflow(event["name"], event["elements"]))}
|
||||
@@ -0,0 +1,38 @@
|
||||
# Set base image
|
||||
ARG BASE_IMAGE=ubuntu:20.04
|
||||
FROM $BASE_IMAGE
|
||||
|
||||
# Install GPU-enabled version of PyTorch if set
|
||||
ARG GPU
|
||||
|
||||
# Target CPU architecture
|
||||
ARG TARGETARCH
|
||||
|
||||
# Set Python version (i.e. 3, 3.8)
|
||||
ARG PYTHON_VERSION=3
|
||||
|
||||
# List of txtai components to install
|
||||
ARG COMPONENTS=[all]
|
||||
|
||||
# Locale environment variables
|
||||
ENV LC_ALL=C.UTF-8
|
||||
ENV LANG=C.UTF-8
|
||||
|
||||
RUN \
|
||||
# Install required packages
|
||||
apt-get update && \
|
||||
apt-get -y --no-install-recommends install libgomp1 libsndfile1 gcc g++ python${PYTHON_VERSION} python${PYTHON_VERSION}-dev python3-pip && \
|
||||
rm -rf /var/lib/apt/lists && \
|
||||
\
|
||||
# Install txtai project and dependencies
|
||||
ln -s /usr/bin/python${PYTHON_VERSION} /usr/bin/python && \
|
||||
python -m pip install --no-cache-dir -U pip wheel setuptools && \
|
||||
if [ -z ${GPU} ] && { [ -z ${TARGETARCH} ] || [ ${TARGETARCH} = "amd64" ] ;}; then pip install --no-cache-dir torch==2.2.2+cpu torchvision==0.17.2+cpu -f https://download.pytorch.org/whl/torch_stable.html; fi && \
|
||||
python -m pip install --no-cache-dir txtai${COMPONENTS} && \
|
||||
python -c "import sys, importlib.util as util; 1 if util.find_spec('nltk') else sys.exit(); import nltk; nltk.download('punkt')" && \
|
||||
\
|
||||
# Cleanup build packages
|
||||
apt-get -y purge gcc g++ python${PYTHON_VERSION}-dev && apt-get -y autoremove
|
||||
|
||||
# Set default working directory
|
||||
WORKDIR /app
|
||||
@@ -0,0 +1,12 @@
|
||||
# Set base image
|
||||
ARG BASE_IMAGE=neuml/txtai-cpu
|
||||
FROM $BASE_IMAGE
|
||||
|
||||
# Copy configuration
|
||||
COPY config.yml .
|
||||
|
||||
# Run local API instance to cache models in container
|
||||
RUN python -c "from txtai.api import API; API('config.yml', False)"
|
||||
|
||||
# Start application and wait for completion. Scheduled workflows can run indefinitely.
|
||||
ENTRYPOINT ["python", "-c", "from txtai.api import API; API('config.yml').wait()"]
|
||||
@@ -0,0 +1,13 @@
|
||||
# Set base image
|
||||
ARG BASE_IMAGE=neuml/txtai-cpu
|
||||
FROM $BASE_IMAGE
|
||||
|
||||
# Copy configuration
|
||||
COPY config.yml .
|
||||
|
||||
# Run local API instance to cache models in container
|
||||
RUN python -c "from txtai.api import API; API('config.yml', False)"
|
||||
|
||||
# Run workflow. Requires two command line arguments: name of workflow and input elements
|
||||
ENTRYPOINT ["python", "-c", "import sys; from txtai.api import API\nfor _ in API('config.yml').workflow(sys.argv[1], sys.argv[2:]): pass"]
|
||||
CMD ["workflow"]
|
||||
@@ -0,0 +1,20 @@
|
||||
# Distributed embeddings clusters
|
||||
|
||||
The API supports combining multiple API instances into a single logical embeddings index. An example configuration is shown below.
|
||||
|
||||
```yaml
|
||||
cluster:
|
||||
shards:
|
||||
- http://127.0.0.1:8002
|
||||
- http://127.0.0.1:8003
|
||||
```
|
||||
|
||||
This configuration aggregates the API instances above as index shards. Data is evenly split among each of the shards at index time. Queries are run in parallel against each shard and the results are joined together. This method allows horizontal scaling and supports very large index clusters.
|
||||
|
||||
This method is only recommended for data sets in the 1 billion+ records. The ANN libraries can easily support smaller data sizes and this method is not worth the additional complexity. At this time, new shards can not be added after building the initial index.
|
||||
|
||||
See the link below for a detailed example covering distributed embeddings clusters.
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [Distributed embeddings cluster](https://github.com/neuml/txtai/blob/master/examples/15_Distributed_embeddings_cluster.ipynb) | Distribute an embeddings index across multiple data nodes | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/15_Distributed_embeddings_cluster.ipynb) |
|
||||
@@ -0,0 +1,140 @@
|
||||
# Configuration
|
||||
|
||||
Configuration is set through YAML. In most cases, YAML keys map to fields names in Python. The [example in the previous section](../) gave a full-featured example covering a wide array of configuration options.
|
||||
|
||||
Each section below describes the available configuration settings.
|
||||
|
||||
## Embeddings
|
||||
|
||||
The configuration parser expects a top level `embeddings` key to be present in the YAML. All [embeddings configuration](../../embeddings/configuration) is supported.
|
||||
|
||||
The following example defines an embeddings index.
|
||||
|
||||
```yaml
|
||||
path: index path
|
||||
writable: true
|
||||
|
||||
embeddings:
|
||||
path: vector model
|
||||
content: true
|
||||
```
|
||||
|
||||
Three top level settings are available to control where indexes are saved and if an index is a read-only index.
|
||||
|
||||
### path
|
||||
```yaml
|
||||
path: string
|
||||
```
|
||||
|
||||
Path to save and load the embeddings index. Each API instance can only access a single index at a time.
|
||||
|
||||
### writable
|
||||
```yaml
|
||||
writable: boolean
|
||||
```
|
||||
|
||||
Determines if the input embeddings index is writable (true) or read-only (false). This allows serving a read-only index.
|
||||
|
||||
### cloud
|
||||
[Cloud storage settings](../../embeddings/configuration/cloud) can be set under a `cloud` top level configuration group.
|
||||
|
||||
## Pipeline
|
||||
|
||||
Pipelines are loaded as top level configuration parameters. Pipeline names are automatically detected in the YAML configuration and created upon startup. All [pipelines](../../pipeline) are supported.
|
||||
|
||||
The following example defines a series of pipelines. Note that entries below are the lower-case names of the pipeline class.
|
||||
|
||||
```yaml
|
||||
caption:
|
||||
|
||||
extractor:
|
||||
path: model path
|
||||
|
||||
labels:
|
||||
|
||||
summary:
|
||||
|
||||
tabular:
|
||||
|
||||
translation:
|
||||
```
|
||||
|
||||
Under each pipeline name, configuration settings for the pipeline can be set.
|
||||
|
||||
## Workflow
|
||||
|
||||
Workflows are defined under a top level `workflow` key. Each key under the `workflow` key is the name of the workflow. Under that is a `tasks` key with each task definition.
|
||||
|
||||
The following example defines a workflow.
|
||||
|
||||
```yaml
|
||||
workflow:
|
||||
sumtranslate:
|
||||
tasks:
|
||||
- action: summary
|
||||
- action: translation
|
||||
```
|
||||
|
||||
### schedule
|
||||
|
||||
Schedules a workflow using a [cron expression](../../workflow/schedule).
|
||||
|
||||
```yaml
|
||||
workflow:
|
||||
index:
|
||||
schedule:
|
||||
cron: 0/10 * * * * *
|
||||
elements: ["api params"]
|
||||
tasks:
|
||||
- task: service
|
||||
url: api url
|
||||
- action: index
|
||||
```
|
||||
|
||||
### tasks
|
||||
```yaml
|
||||
tasks: list
|
||||
```
|
||||
|
||||
Expects a list of workflow tasks. Each element defines a single workflow task. All [task configuration](../../workflow/task) is supported.
|
||||
|
||||
A shorthand syntax for creating tasks is supported. This syntax will automatically map task strings to an `action:value` pair.
|
||||
|
||||
Example below.
|
||||
|
||||
```yaml
|
||||
workflow:
|
||||
index:
|
||||
tasks:
|
||||
- action1
|
||||
- action2
|
||||
```
|
||||
|
||||
Each task element supports the following additional arguments.
|
||||
|
||||
#### action
|
||||
```yaml
|
||||
action: string|list
|
||||
```
|
||||
|
||||
Both single and multi-action tasks are supported.
|
||||
|
||||
The action parameter works slightly different when passed via configuration. The parameter(s) needs to be converted into callable method(s). If action is a pipeline that has been defined in the current configuration, it will use that pipeline as the action.
|
||||
|
||||
There are three special action names `index`, `upsert` and `search`. If `index` or `upsert` are used as the action, the task will collect workflow data elements and load them into defined the embeddings index. If `search` is used, the task will execute embeddings queries for each input data element.
|
||||
|
||||
Otherwise, the action must be a path to a callable object or function. The configuration parser will resolve the function name and use that as the task action.
|
||||
|
||||
#### task
|
||||
```yaml
|
||||
task: string
|
||||
```
|
||||
|
||||
Optionally sets the type of task to create. For example, this could be a `file` task or a `retrieve` task. If this is not specified, a generic task is created. [The list of workflow tasks can be found here](../../workflow).
|
||||
|
||||
#### args
|
||||
```yaml
|
||||
args: list
|
||||
```
|
||||
|
||||
Optional list of static arguments to pass to the workflow task. These are combined with workflow data to pass to each `__call__`.
|
||||
@@ -0,0 +1,25 @@
|
||||
# Customization
|
||||
|
||||
The txtai API has a number of features out of the box that are designed to help get started quickly. API services can also be augmented with custom code and functionality. The two main ways to do this are with extensions and dependencies.
|
||||
|
||||
Extensions add a custom endpoint. Dependencies add middleware that executes with each request. See the sections below for more.
|
||||
|
||||
## Extensions
|
||||
|
||||
While the API is extremely flexible and complex logic can be executed through YAML-driven workflows, some may prefer to create an endpoint in Python. API extensions define custom Python endpoints that interact with txtai applications.
|
||||
|
||||
See the link below for a detailed example.
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [Custom API Endpoints](https://github.com/neuml/txtai/blob/master/examples/51_Custom_API_Endpoints.ipynb) | Extend the API with custom endpoints | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/51_Custom_API_Endpoints.ipynb) |
|
||||
|
||||
## Dependencies
|
||||
|
||||
txtai has a default API token authorization method that works well in many cases. Dependencies can also add custom logic with each request. This could be an additional authorization step and/or an authentication method.
|
||||
|
||||
See the link below for a detailed example.
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [API Authorization and Authentication](https://github.com/neuml/txtai/blob/master/examples/54_API_Authorization_and_Authentication.ipynb) | Add authorization, authentication and middleware dependencies to the API | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/54_API_Authorization_and_Authentication.ipynb) |
|
||||
@@ -0,0 +1,127 @@
|
||||
# API
|
||||
|
||||

|
||||

|
||||
|
||||
txtai has a full-featured API, backed by [FastAPI](https://github.com/tiangolo/fastapi), that can optionally be enabled for any txtai process. All functionality found in txtai can be accessed via the API.
|
||||
|
||||
The following is an example configuration and startup script for the API.
|
||||
|
||||
Note: This configuration file enables all functionality. For memory-bound systems, splitting pipelines into multiple instances is a best practice.
|
||||
|
||||
```yaml
|
||||
# Index file path
|
||||
path: /tmp/index
|
||||
|
||||
# Allow indexing of documents
|
||||
writable: True
|
||||
|
||||
# Enbeddings index
|
||||
embeddings:
|
||||
path: sentence-transformers/nli-mpnet-base-v2
|
||||
|
||||
# Extractive QA
|
||||
extractor:
|
||||
path: distilbert-base-cased-distilled-squad
|
||||
|
||||
# Zero-shot labeling
|
||||
labels:
|
||||
|
||||
# Similarity
|
||||
similarity:
|
||||
|
||||
# Text segmentation
|
||||
segmentation:
|
||||
sentences: true
|
||||
|
||||
# Text summarization
|
||||
summary:
|
||||
|
||||
# Text extraction
|
||||
textractor:
|
||||
paragraphs: true
|
||||
minlength: 100
|
||||
join: true
|
||||
|
||||
# Transcribe audio to text
|
||||
transcription:
|
||||
|
||||
# Translate text between languages
|
||||
translation:
|
||||
|
||||
# Workflow definitions
|
||||
workflow:
|
||||
sumfrench:
|
||||
tasks:
|
||||
- action: textractor
|
||||
task: url
|
||||
- action: summary
|
||||
- action: translation
|
||||
args: ["fr"]
|
||||
sumspanish:
|
||||
tasks:
|
||||
- action: textractor
|
||||
task: url
|
||||
- action: summary
|
||||
- action: translation
|
||||
args: ["es"]
|
||||
```
|
||||
|
||||
Assuming this YAML content is stored in a file named config.yml, the following command starts the API process.
|
||||
|
||||
```bash
|
||||
CONFIG=config.yml uvicorn "txtai.api:app"
|
||||
```
|
||||
|
||||
Uvicorn is a full-featured production-ready server. See the [Uvicorn deployment guide](https://www.uvicorn.org/deployment/) for more on configuration options.
|
||||
|
||||
## Connect to API
|
||||
|
||||
The default port for the API is 8000. See the uvicorn link above to change this.
|
||||
|
||||
txtai has a number of language bindings which abstract the API (see links below). Alternatively, code can be written to connect directly to the API. Documentation for a live running instance can be found at the `/docs` url (i.e. http://localhost:8000/docs). The following example runs a workflow using cURL.
|
||||
|
||||
```bash
|
||||
curl \
|
||||
-X POST "http://localhost:8000/workflow" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name":"sumfrench", "elements": ["https://github.com/neuml/txtai"]}'
|
||||
```
|
||||
|
||||
## Local instance
|
||||
|
||||
A local instance can be instantiated. In this case, a txtai application runs internally, without any network connections, providing the same consolidated functionality. This enables running txtai in Python with configuration.
|
||||
|
||||
The configuration above can be run in Python with:
|
||||
|
||||
```python
|
||||
from txtai.app import Application
|
||||
|
||||
# Load and run workflow
|
||||
app = Application(config.yml)
|
||||
app.workflow("sumfrench", ["https://github.com/neuml/txtai"])
|
||||
```
|
||||
|
||||
See this [link for a full list of methods](./methods).
|
||||
|
||||
## Run with containers
|
||||
|
||||
The API can be containerized and run. This will bring up an API instance without having to install Python, txtai or any dependencies on your machine!
|
||||
|
||||
[See this section for more information](../cloud/#api).
|
||||
|
||||
## Supported language bindings
|
||||
|
||||
The following programming languages have bindings with the txtai API:
|
||||
|
||||
- [Python](https://github.com/neuml/txtai.py)
|
||||
- [JavaScript](https://github.com/neuml/txtai.js)
|
||||
- [Java](https://github.com/neuml/txtai.java)
|
||||
- [Rust](https://github.com/neuml/txtai.rs)
|
||||
- [Go](https://github.com/neuml/txtai.go)
|
||||
|
||||
See the link below for a detailed example covering how to use the API.
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [API Gallery](https://github.com/neuml/txtai/blob/master/examples/08_API_Gallery.ipynb) | Using txtai in JavaScript, Java, Rust and Go | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/08_API_Gallery.ipynb) |
|
||||
@@ -0,0 +1,15 @@
|
||||
# Methods
|
||||
|
||||
::: txtai.api.API
|
||||
options:
|
||||
inherited_members: true
|
||||
filters:
|
||||
- "!__del__"
|
||||
- "!flows"
|
||||
- "!function"
|
||||
- "!indexes"
|
||||
- "!limit"
|
||||
- "!pipes"
|
||||
- "!read"
|
||||
- "!resolve"
|
||||
- "!weights"
|
||||
@@ -0,0 +1,33 @@
|
||||
# Security
|
||||
|
||||
The default implementation of an API service runs via HTTP and is fully open. If the service is being run as a prototype on an internal network, that may be fine. In most scenarios, the connection should at least be encrypted. Authorization is another built-in feature that requires a valid API token with each request. See below for more.
|
||||
|
||||
## HTTPS
|
||||
|
||||
The default API service command starts a Uvicorn server as a HTTP service on port 8000. To run a HTTPS service, consider the following options.
|
||||
|
||||
- [TLS Proxy Server](https://fastapi.tiangolo.com/deployment/https/). *Recommended choice*. With this configuration, the txtai API service runs as a HTTP service only accessible on the localhost/local network. The proxy server handles all encryption and redirects requests to local services. See this [example configuration](https://www.uvicorn.org/deployment/#running-behind-nginx) for more.
|
||||
|
||||
- [Uvicorn SSL Certificate](https://www.uvicorn.org/deployment/). Another option is setting the SSL certificate on the Uvicorn service. This works in simple situations but gets complex when hosting multiple txtai or other related services.
|
||||
|
||||
## Authorization
|
||||
|
||||
Authorization requires a valid API token with each API request. This token is sent as a HTTP `Authorization` header.
|
||||
|
||||
*Server*
|
||||
```bash
|
||||
CONFIG=config.yml TOKEN=<sha256 encoded token> uvicorn "txtai.api:app"
|
||||
```
|
||||
|
||||
*Client*
|
||||
```bash
|
||||
curl \
|
||||
-X POST "http://localhost:8000/workflow" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: Bearer <token>" \
|
||||
-d '{"name":"sumfrench", "elements": ["https://github.com/neuml/txtai"]}'
|
||||
```
|
||||
|
||||
It's important to note that HTTPS **must** be enabled using one of the methods mentioned above. Otherwise, tokens will be exchanged as clear text.
|
||||
|
||||
Authentication and Authorization can be fully customized. See the [dependencies](../customization#dependencies) section for more.
|
||||
@@ -0,0 +1,182 @@
|
||||
# Cloud
|
||||
|
||||

|
||||

|
||||
|
||||
Scalable cloud-native applications can be built with txtai. The following cloud runtimes are supported.
|
||||
|
||||
- Container Orchestration Systems (i.e. Kubernetes)
|
||||
- Docker Engine
|
||||
- Serverless Compute
|
||||
- txtai.cloud (coming in 2024)
|
||||
|
||||
Images for txtai are available on Docker Hub for [CPU](https://hub.docker.com/r/neuml/txtai-cpu) and [GPU](https://hub.docker.com/r/neuml/txtai-gpu) installs. The CPU install is recommended when GPUs aren't available given the image is half the size.
|
||||
|
||||
The base txtai images have no models installed and models will be downloaded each time the container starts. Caching the models is recommended as that will significantly reduce container start times. This can be done a couple different ways.
|
||||
|
||||
- Create a container with the [models cached](#container-image-model-caching)
|
||||
- Set the transformers cache environment variable and mount that volume when starting the image
|
||||
```bash
|
||||
docker run -v <local dir>:/models -e TRANSFORMERS_CACHE=/models --rm -it <docker image>
|
||||
```
|
||||
|
||||
## Build txtai images
|
||||
|
||||
The txtai images found on Docker Hub are configured to support most situations. This image can be locally built with different options as desired.
|
||||
|
||||
Examples build commands below.
|
||||
|
||||
```bash
|
||||
# Get Dockerfile
|
||||
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/base/Dockerfile
|
||||
|
||||
# Build Ubuntu 20.04 image running Python 3.8
|
||||
docker build -t txtai --build-arg BASE_IMAGE=ubuntu:20.04 --build-arg PYTHON_VERSION=3.8 .
|
||||
|
||||
# Build image with GPU support
|
||||
docker build -t txtai --build-arg GPU=1 .
|
||||
|
||||
# Build minimal image with the base txtai components
|
||||
docker build -t txtai --build-arg COMPONENTS= .
|
||||
```
|
||||
|
||||
## Container image model caching
|
||||
|
||||
As mentioned previously, model caching is recommended to reduce container start times. The following commands demonstrate this. In all cases, it is assumed a config.yml file is present in the local directory with the desired configuration set.
|
||||
|
||||
### API
|
||||
This section builds an image that caches models and starts an API service. The config.yml file should be configured with the desired components to expose via the API.
|
||||
|
||||
The following is a sample config.yml file that creates an Embeddings API service.
|
||||
|
||||
```yaml
|
||||
# config.yml
|
||||
writable: true
|
||||
|
||||
embeddings:
|
||||
path: sentence-transformers/nli-mpnet-base-v2
|
||||
content: true
|
||||
```
|
||||
|
||||
The next section builds the image and starts an instance.
|
||||
|
||||
```bash
|
||||
# Get Dockerfile
|
||||
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/api/Dockerfile
|
||||
|
||||
# CPU build
|
||||
docker build -t txtai-api .
|
||||
|
||||
# GPU build
|
||||
docker build -t txtai-api --build-arg BASE_IMAGE=neuml/txtai-gpu .
|
||||
|
||||
# Run
|
||||
docker run -p 8000:8000 --rm -it txtai-api
|
||||
```
|
||||
|
||||
### Service
|
||||
This section builds a scheduled workflow service. [More on scheduled workflows can be found here.](../workflow/schedule)
|
||||
|
||||
```bash
|
||||
# Get Dockerfile
|
||||
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/service/Dockerfile
|
||||
|
||||
# CPU build
|
||||
docker build -t txtai-service .
|
||||
|
||||
# GPU build
|
||||
docker build -t txtai-service --build-arg BASE_IMAGE=neuml/txtai-gpu .
|
||||
|
||||
# Run
|
||||
docker run --rm -it txtai-service
|
||||
```
|
||||
|
||||
### Workflow
|
||||
This section builds a single run workflow. [Example workflows can be found here.](../examples/#workflows)
|
||||
|
||||
```bash
|
||||
# Get Dockerfile
|
||||
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/workflow/Dockerfile
|
||||
|
||||
# CPU build
|
||||
docker build -t txtai-workflow .
|
||||
|
||||
# GPU build
|
||||
docker build -t txtai-workflow --build-arg BASE_IMAGE=neuml/txtai-gpu .
|
||||
|
||||
# Run
|
||||
docker run --rm -it txtai-workflow <workflow name> <workflow parameters>
|
||||
```
|
||||
|
||||
## Serverless Compute
|
||||
|
||||
One of the most powerful features of txtai is building YAML-configured applications with the "build once, run anywhere" approach. API instances and workflows can run locally, on a server, on a cluster or serverless.
|
||||
|
||||
Serverless instances of txtai are supported on frameworks such as [AWS Lambda](https://aws.amazon.com/lambda/), [Google Cloud Functions](https://cloud.google.com/functions), [Azure Cloud Functions](https://azure.microsoft.com/en-us/services/functions/) and [Kubernetes](https://kubernetes.io/) with [Knative](https://knative.dev/docs/).
|
||||
|
||||
### AWS Lambda
|
||||
|
||||
The following steps show a basic example of how to build a serverless API instance with [AWS SAM](https://github.com/aws/serverless-application-model).
|
||||
|
||||
- Create config.yml and template.yml
|
||||
|
||||
```yaml
|
||||
# config.yml
|
||||
writable: true
|
||||
|
||||
embeddings:
|
||||
path: sentence-transformers/nli-mpnet-base-v2
|
||||
content: true
|
||||
```
|
||||
|
||||
```yaml
|
||||
# template.yml
|
||||
Resources:
|
||||
txtai:
|
||||
Type: AWS::Serverless::Function
|
||||
Properties:
|
||||
PackageType: Image
|
||||
MemorySize: 3000
|
||||
Timeout: 20
|
||||
Events:
|
||||
Api:
|
||||
Type: Api
|
||||
Properties:
|
||||
Path: "/{proxy+}"
|
||||
Method: ANY
|
||||
Metadata:
|
||||
Dockerfile: Dockerfile
|
||||
DockerContext: ./
|
||||
DockerTag: api
|
||||
```
|
||||
|
||||
- Install [AWS SAM](https://pypi.org/project/aws-sam-cli/)
|
||||
|
||||
- Run following
|
||||
|
||||
```bash
|
||||
# Get Dockerfile and application
|
||||
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/aws/api.py
|
||||
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/aws/Dockerfile
|
||||
|
||||
# Build the docker image
|
||||
sam build
|
||||
|
||||
# Start API gateway and Lambda instance locally
|
||||
sam local start-api -p 8000 --warm-containers LAZY
|
||||
|
||||
# Verify instance running (should return 0)
|
||||
curl http://localhost:8080/count
|
||||
```
|
||||
|
||||
If successful, a local API instance is now running in a "serverless" fashion. This configuration can be deployed to AWS using SAM. [See this link for more information.](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-deploy.html)
|
||||
|
||||
### Kubernetes with Knative
|
||||
|
||||
txtai scales with container orchestration systems. This can be self-hosted or with a cloud provider such as [Amazon Elastic Kubernetes Service](https://aws.amazon.com/eks/), [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine) and [Azure Kubernetes Service](https://azure.microsoft.com/en-us/services/kubernetes-service/). There are also other smaller providers with a managed Kubernetes offering.
|
||||
|
||||
A full example covering how to build a serverless txtai application on Kubernetes with Knative [can be found here](https://medium.com/neuml/serverless-vector-search-with-txtai-96f6163ab972).
|
||||
|
||||
## txtai.cloud
|
||||
|
||||
[txtai.cloud](https://txtai.cloud) is a planned effort that will offer an easy and secure way to run hosted txtai applications.
|
||||
@@ -0,0 +1,83 @@
|
||||
# ANN
|
||||
|
||||
Approximate Nearest Neighbor (ANN) index configuration for storing vector embeddings.
|
||||
|
||||
## backend
|
||||
```yaml
|
||||
backend: faiss|hnsw|annoy|numpy|torch|pgvector|custom
|
||||
```
|
||||
|
||||
Sets the ANN backend. Defaults to `faiss`. Additional backends are available via the [ann](../../../install/#ann) extras package. Set custom backends via setting this parameter to the fully resolvable class string.
|
||||
|
||||
Backend-specific settings are set with a corresponding configuration object having the same name as the backend (i.e. annoy, faiss, or hnsw). These are optional and set to defaults if omitted.
|
||||
|
||||
### faiss
|
||||
```yaml
|
||||
faiss:
|
||||
components: comma separated list of components - defaults to "IDMap,Flat" for small
|
||||
indices and "IVFx,Flat" for larger indexes where
|
||||
x = min(4 * sqrt(embeddings count), embeddings count / 39)
|
||||
automatically calculates number of IVF cells when omitted (supports "IVF,Flat")
|
||||
nprobe: search probe setting (int) - defaults to x/16 (as defined above)
|
||||
for larger indexes
|
||||
nflip: same as nprobe - only used with binary hash indexes
|
||||
quantize: store vectors with x-bit precision vs 32-bit (boolean|int)
|
||||
true sets 8-bit precision, false disables, int sets specified
|
||||
precision
|
||||
mmap: load as on-disk index (boolean) - trade query response time for a
|
||||
smaller RAM footprint, defaults to false
|
||||
sample: percent of data to use for model training (0.0 - 1.0)
|
||||
reduces indexing time for larger (>1M+ row) indexes, defaults to 1.0
|
||||
```
|
||||
|
||||
Faiss supports both floating point and binary indexes. Floating point indexes are the default. Binary indexes are used when indexing scalar-quantized datasets.
|
||||
|
||||
See the following Faiss documentation links for more information.
|
||||
|
||||
- [Guidelines for choosing an index](https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index)
|
||||
- [Index configuration summary](https://github.com/facebookresearch/faiss/wiki/Faiss-indexes)
|
||||
- [Index Factory](https://github.com/facebookresearch/faiss/wiki/The-index-factory)
|
||||
- [Binary Indexes](https://github.com/facebookresearch/faiss/wiki/Binary-indexes)
|
||||
- [Search Tuning](https://github.com/facebookresearch/faiss/wiki/Faster-search)
|
||||
|
||||
### hnsw
|
||||
```yaml
|
||||
hnsw:
|
||||
efconstruction: ef_construction param for init_index (int) - defaults to 200
|
||||
m: M param for init_index (int) - defaults to 16
|
||||
randomseed: random-seed param for init_index (int) - defaults to 100
|
||||
efsearch: ef search param (int) - defaults to None and not set
|
||||
```
|
||||
|
||||
See [Hnswlib documentation](https://github.com/nmslib/hnswlib/blob/master/ALGO_PARAMS.md) for more information on these parameters.
|
||||
|
||||
### annoy
|
||||
```yaml
|
||||
annoy:
|
||||
ntrees: number of trees (int) - defaults to 10
|
||||
searchk: search_k search setting (int) - defaults to -1
|
||||
```
|
||||
|
||||
See [Annoy documentation](https://github.com/spotify/annoy#full-python-api) for more information on these parameters. Note that annoy indexes can not be modified after creation, upserts/deletes and other modifications are not supported.
|
||||
|
||||
### numpy
|
||||
```yaml
|
||||
numpy:
|
||||
quantize: number of quantized bits when working with quantized vectors (int)
|
||||
```
|
||||
|
||||
The NumPy backend is a k-nearest neighbors backend. It's designed for simplicity and works well with smaller datasets.
|
||||
|
||||
The `torch` backend supports the same options. The only difference is that the vectors can be search using GPUs.
|
||||
|
||||
### pgvector
|
||||
```yaml
|
||||
pgvector:
|
||||
url: database url connection string, alternatively can be set via
|
||||
ANN_URL environment variable
|
||||
table: database table to store vectors - defaults to `vectors`
|
||||
efconstruction: ef_construction param (int) - defaults to 200
|
||||
m: M param for init_index (int) - defaults to 16
|
||||
```
|
||||
|
||||
The pgvector backend stores embeddings in a Postgres database. See the [pgvector documentation](https://github.com/pgvector/pgvector-python?tab=readme-ov-file#sqlalchemy) for more information on these parameters. See the [SQLAlchemy](https://docs.sqlalchemy.org/en/20/core/engines.html#database-urls) documentation for more information on how to construct url connection strings.
|
||||
@@ -0,0 +1,98 @@
|
||||
# Cloud
|
||||
|
||||
The following describes parameters used to sync indexes with cloud storage. Cloud object storage, the [Hugging Face Hub](https://huggingface.co/models) and custom providers are all supported.
|
||||
|
||||
Parameters are set via the [embeddings.load](../../methods/#txtai.embeddings.base.Embeddings.load) and [embeddings.save](../../methods/#txtai.embeddings.base.Embeddings.save) methods.
|
||||
|
||||
## provider
|
||||
```yaml
|
||||
provider: string
|
||||
```
|
||||
|
||||
Cloud provider. Can be one of the following:
|
||||
|
||||
- Cloud object storage. Set to one of these [providers](https://libcloud.readthedocs.io/en/stable/storage/supported_providers.html).
|
||||
|
||||
- Hugging Face Hub. Set to `huggingface-hub`.
|
||||
|
||||
- Custom providers. Set to the full class path of the custom provider.
|
||||
|
||||
## container
|
||||
```yaml
|
||||
container: string
|
||||
```
|
||||
|
||||
Container/bucket/directory/repository name. Embeddings will be stored in the container with the filename specified by the `path` configuration.
|
||||
|
||||
## Cloud object storage configuration
|
||||
|
||||
In addition to the above common configuration, the cloud object storage provider has the following additional configuration parameters. Note that some cloud providers do not need any of these parameters and can use implicit authentication with service accounts.
|
||||
|
||||
See the [libcloud documentation](https://libcloud.readthedocs.io/en/stable/apidocs/libcloud.common.html#module-libcloud.common.base) for more information on these parameters.
|
||||
|
||||
### key
|
||||
```yaml
|
||||
key: string
|
||||
```
|
||||
|
||||
Provider-specific access key. Can also be set via `ACCESS_KEY` environment variable. Ensure the configuration file is secured if added to the file. When using implicit authentication, set this to a value such as 'using-implicit-auth'.
|
||||
|
||||
### secret
|
||||
```yaml
|
||||
secret: string
|
||||
```
|
||||
|
||||
Provider-specific access secret. Can also be set via `ACCESS_SECRET` environment variable. Ensure the configuration file is secured if added to the file. When using implicit authentication, this option is not required.
|
||||
|
||||
### host
|
||||
```yaml
|
||||
host: string
|
||||
```
|
||||
|
||||
Optional server host name. Set when using a local cloud storage server.
|
||||
|
||||
### port
|
||||
```yaml
|
||||
port: int
|
||||
```
|
||||
|
||||
Optional server port. Set when using a local cloud storage server.
|
||||
|
||||
### token
|
||||
```yaml
|
||||
token: string
|
||||
```
|
||||
|
||||
Optional temporary session token
|
||||
|
||||
### region
|
||||
```yaml
|
||||
region: string
|
||||
```
|
||||
|
||||
Optional parameter to specify the storage region, provider-specific.
|
||||
|
||||
## Hugging Face Hub configuration
|
||||
|
||||
The huggingface-hub provider supports the following additional configuration parameters. More on these parameters can be found in the [Hugging Face Hub's documentation](https://huggingface.co/docs/huggingface_hub/main/en/package_reference/overview).
|
||||
|
||||
### revision
|
||||
```yaml
|
||||
revision: string
|
||||
```
|
||||
|
||||
Optional Git revision id which can be a branch name, a tag, or a commit hash
|
||||
|
||||
### cache
|
||||
```yaml
|
||||
cache: string
|
||||
```
|
||||
|
||||
Path to the folder where cached files are stored
|
||||
|
||||
### token
|
||||
```yaml
|
||||
token: string|boolean
|
||||
```
|
||||
|
||||
Token to be used for the download. If set to True, the token will be read from the Hugging Face config folder.
|
||||
@@ -0,0 +1,60 @@
|
||||
# Database
|
||||
|
||||
Databases store metadata, text and binary content.
|
||||
|
||||
## content
|
||||
```yaml
|
||||
content: boolean|sqlite|duckdb|client|url|custom
|
||||
```
|
||||
|
||||
Enables content storage. When true, the default storage engine, `sqlite` will be used to save metadata.
|
||||
|
||||
Client-server connections are supported with either `client` or a full connection URL. When set to `client`, the CLIENT_URL environment variable must be set to the full connection URL. See the [SQLAlchemy](https://docs.sqlalchemy.org/en/20/core/engines.html#database-urls) documentation for more information on how to construct connection strings for client-server databases.
|
||||
|
||||
Add custom storage engines via setting this parameter to the fully resolvable class string.
|
||||
|
||||
Content storage specific settings are set with a corresponding configuration object having the same name as the content storage engine (i.e. duckdb or sqlite). These are optional and set to defaults if omitted.
|
||||
|
||||
### sqlite
|
||||
```yaml
|
||||
sqlite:
|
||||
wal: enable write-ahead logging - allows concurrent read/write operations,
|
||||
defaults to false
|
||||
```
|
||||
|
||||
## objects
|
||||
```yaml
|
||||
objects: boolean|image|pickle
|
||||
```
|
||||
|
||||
Enables object storage. Supports storing binary content. Requires content storage to also be enabled.
|
||||
|
||||
Object encoding options are:
|
||||
|
||||
- `standard`: Default encoder when boolean set. Encodes and decodes objects as byte arrays.
|
||||
- `image`: Image encoder. Encodes and decodes objects as image objects.
|
||||
- `pickle`: Pickle encoder. Encodes and decodes objects with the pickle module. Supports arbitrary objects.
|
||||
|
||||
## functions
|
||||
```yaml
|
||||
functions: list
|
||||
```
|
||||
|
||||
List of functions with user-defined SQL functions, only used when [content](#content) is enabled. Each list element must be one of the following:
|
||||
|
||||
- function
|
||||
- callable object
|
||||
- dict with fields for name, argcount and function
|
||||
|
||||
[An example can be found here](../../query#custom-sql-functions).
|
||||
|
||||
## query
|
||||
```yaml
|
||||
query:
|
||||
path: sets the path for the query model - this can be any model on the
|
||||
Hugging Face Model Hub or a local file path.
|
||||
prefix: text prefix to prepend to all inputs
|
||||
maxlength: maximum generated sequence length
|
||||
```
|
||||
|
||||
Query translation model. Translates natural language queries to txtai compatible SQL statements.
|
||||
@@ -0,0 +1,47 @@
|
||||
# General
|
||||
|
||||
General configuration options that don't fit elsewhere.
|
||||
|
||||
## keyword
|
||||
```yaml
|
||||
keyword: boolean
|
||||
```
|
||||
|
||||
Enables sparse keyword indexing for this embeddings.
|
||||
|
||||
## hybrid
|
||||
```yaml
|
||||
hybrid: boolean
|
||||
```
|
||||
|
||||
Enables hybrid (sparse + dense) indexing for this embeddings.
|
||||
|
||||
## indexes
|
||||
```yaml
|
||||
indexes: dict
|
||||
```
|
||||
|
||||
Key value pairs defining subindexes for this embeddings. Each key is the index name and the value is the full configuration. This configuration can use any of the available configurations in a standard embeddings instance.
|
||||
|
||||
## autoid
|
||||
```yaml
|
||||
format: int|uuid function
|
||||
```
|
||||
|
||||
Sets the auto id generation method. When this is not set, an autogenerated numeric sequence is used. This also supports [UUID generation functions](https://docs.python.org/3/library/uuid.html#uuid.uuid1). For example, setting this value to `uuid4` will generate random UUIDs. Setting this to `uuid5` will generate deterministic UUIDs for each input data row.
|
||||
|
||||
## columns
|
||||
```yaml
|
||||
columns:
|
||||
text: name of the text column
|
||||
object: name of the object column
|
||||
```
|
||||
|
||||
Sets the `text` and `object` column names. Defaults to `text` and `object` if not provided.
|
||||
|
||||
## format
|
||||
```yaml
|
||||
format: json|pickle
|
||||
```
|
||||
|
||||
Sets the configuration storage format. Defaults to `json`.
|
||||
@@ -0,0 +1,70 @@
|
||||
# Graph
|
||||
|
||||
Enable graph storage via the `graph` parameter. This component requires the [graph](../../../install/#graph) extras package.
|
||||
|
||||
When enabled, a graph network is built using the embeddings index. Graph nodes are synced with each embeddings index operation (index/upsert/delete). Graph edges are created using the embeddings index upon completion of each index/upsert/delete embeddings index call.
|
||||
|
||||
## backend
|
||||
```yaml
|
||||
backend: networkx|rdbms|custom
|
||||
```
|
||||
|
||||
Sets the graph backend. Defaults to `networkx`.
|
||||
|
||||
Add custom graph storage engines via setting this parameter to the fully resolvable class string.
|
||||
|
||||
The `rdbms` backend has the following additional settings.
|
||||
|
||||
### rdbms
|
||||
```yaml
|
||||
url: database url connection string, alternatively can be set via the
|
||||
GRAPH_URL environment variable
|
||||
nodes: table to store node data, defaults to `nodes`
|
||||
edges: table to store edge data, defaults to `edges`
|
||||
```
|
||||
|
||||
## batchsize
|
||||
```yaml
|
||||
batchsize: int
|
||||
```
|
||||
|
||||
Batch query size, used to query embeddings index - defaults to 256.
|
||||
|
||||
## limit
|
||||
```yaml
|
||||
limit: int
|
||||
```
|
||||
|
||||
Maximum number of results to return per embeddings query - defaults to 15.
|
||||
|
||||
## minscore
|
||||
```yaml
|
||||
minscore: float
|
||||
```
|
||||
|
||||
Minimum score required to consider embeddings query matches - defaults to 0.1.
|
||||
|
||||
## approximate
|
||||
```yaml
|
||||
approximate: boolean
|
||||
```
|
||||
|
||||
When true, queries only run for nodes without edges - defaults to true.
|
||||
|
||||
## topics
|
||||
```yaml
|
||||
topics:
|
||||
algorithm: community detection algorithm (string), options are
|
||||
louvain (default), greedy, lpa
|
||||
level: controls number of topics (string), options are best (default) or first
|
||||
resolution: controls number of topics (int), larger values create more
|
||||
topics (int), defaults to 100
|
||||
labels: scoring index method used to build topic labels (string)
|
||||
options are bm25 (default), tfidf, sif
|
||||
terms: number of frequent terms to use for topic labels (int), defaults to 4
|
||||
stopwords: optional list of stop words to exclude from topic labels
|
||||
categories: optional list of categories used to group topics, allows
|
||||
granular topics with broad categories grouping topics
|
||||
```
|
||||
|
||||
Enables topic modeling. Defaults are tuned so that in most cases these values don't need to be changed (except for categories). These parameters are available for advanced use cases where one wants full control over the community detection process.
|
||||
@@ -0,0 +1,51 @@
|
||||
# Configuration
|
||||
|
||||
The following describes available embeddings configuration. These parameters are set in the [Embeddings constructor](../methods#txtai.embeddings.base.Embeddings.__init__) via either the `config` parameter or as keyword arguments.
|
||||
|
||||
Configuration is designed to be optional and set only when needed. Out of the box, sensible defaults are picked to get up and running fast. For example:
|
||||
|
||||
```python
|
||||
from txtai.embeddings import Embeddings
|
||||
|
||||
embeddings = Embeddings()
|
||||
```
|
||||
|
||||
Creates a new embeddings instance, using [all-MiniLM-L6-v2](https://hf.co/sentence-transformers/all-MiniLM-L6-v2) as the vector model, [Faiss](https://faiss.ai/) as the ANN index backend and content disabled.
|
||||
|
||||
```python
|
||||
from txtai.embeddings import Embeddings
|
||||
|
||||
embeddings = Embeddings(content=True)
|
||||
```
|
||||
|
||||
Is the same as above except it adds in [SQLite](https://www.sqlite.org/index.html) for content storage.
|
||||
|
||||
The following sections link to all the available configuration options.
|
||||
|
||||
## [ANN](./ann)
|
||||
|
||||
The default vector index backend is Faiss.
|
||||
|
||||
## [Cloud](./cloud)
|
||||
|
||||
Embeddings databases can optionally be synced with cloud storage.
|
||||
|
||||
## [Database](./database)
|
||||
|
||||
Content storage is disabled by default. When enabled, SQLite is the default storage engine.
|
||||
|
||||
## [General](./general)
|
||||
|
||||
General configuration that doesn't fit elsewhere.
|
||||
|
||||
## [Graph](./graph)
|
||||
|
||||
An accomplying graph index can be created with an embeddings database. This enables topic modeling, path traversal and more. [NetworkX](https://github.com/networkx/networkx) is the default graph index.
|
||||
|
||||
## [Scoring](./scoring)
|
||||
|
||||
Sparse keyword indexing and word vectors term weighting.
|
||||
|
||||
## [Vectors](./vectors)
|
||||
|
||||
Vector search is enabled by converting text and other binary data into embeddings vectors. These vectors are then stored in an ANN index. The vector model is optional and a default model is used when not provided.
|
||||
@@ -0,0 +1,32 @@
|
||||
# Scoring
|
||||
|
||||
Enable scoring support via the `scoring` parameter.
|
||||
|
||||
This scoring instance can serve two purposes, depending on the settings.
|
||||
|
||||
One use case is building sparse/keyword indexes. This occurs when the `terms` parameter is set to `True`.
|
||||
|
||||
The other use case is with word vector term weighting. This feature has been available since the initial version but isn't quite as common anymore.
|
||||
|
||||
The following covers the available options.
|
||||
|
||||
## method
|
||||
```yaml
|
||||
method: bm25|tfidf|sif|custom
|
||||
```
|
||||
|
||||
Sets the scoring method. Add custom scoring via setting this parameter to the fully resolvable class string.
|
||||
|
||||
## terms
|
||||
```yaml
|
||||
terms: boolean
|
||||
```
|
||||
|
||||
Enables term frequency sparse arrays for a scoring instance. This is the backend for sparse keyword indexes.
|
||||
|
||||
## normalize
|
||||
```yaml
|
||||
normalize: boolean
|
||||
```
|
||||
|
||||
Enables normalized scoring (ranging from 0 to 1). When enabled, statistics from the index will be used to calculate normalized scores.
|
||||
@@ -0,0 +1,139 @@
|
||||
# Vectors
|
||||
|
||||
The following covers available vector model configuration options.
|
||||
|
||||
## path
|
||||
```yaml
|
||||
path: string
|
||||
```
|
||||
|
||||
Sets the path for a vectors model. When using a transformers/sentence-transformers model, this can be any model on the
|
||||
[Hugging Face Hub](https://huggingface.co/models) or a local file path. Otherwise, it must be a local file path to a word embeddings model.
|
||||
|
||||
## method
|
||||
```yaml
|
||||
method: transformers|sentence-transformers|llama.cpp|litellm|external|words
|
||||
```
|
||||
|
||||
Embeddings method to use. If the method is not provided, it is inferred using the `path`.
|
||||
|
||||
`sentence-transformers`, `llama.cpp`, `litellm` and `words` require the [vectors](../../../install/#vectors) extras package to be installed.
|
||||
|
||||
### transformers
|
||||
|
||||
Builds embeddings using a transformers model. While this can be any transformers model, it works best with
|
||||
[models trained](https://huggingface.co/models?pipeline_tag=sentence-similarity) to build embeddings.
|
||||
|
||||
Both `mean` and `cls` pooling are supported and automatically infered from the model. The pooling method can be overwritten by changing the method
|
||||
from `transformers` to `meanpooling` or `clspooling` respectively.
|
||||
|
||||
### sentence-transformers
|
||||
|
||||
Same as transformers but loads models with the [sentence-transformers](https://github.com/UKPLab/sentence-transformers) library.
|
||||
|
||||
### llama.cpp
|
||||
|
||||
Builds embeddings using a llama.cpp model. Supports both local and remote GGUF paths on the HF Hub.
|
||||
|
||||
### litellm
|
||||
|
||||
Builds embeddings using a LiteLLM model. See the [LiteLLM documentation](https://litellm.vercel.app/docs/providers) for the options available with LiteLLM models.
|
||||
|
||||
### words
|
||||
|
||||
Builds embeddings using a word embeddings model. Transformers models are the preferred vector backend in most cases. Word embeddings models may be deprecated in the future.
|
||||
|
||||
#### storevectors
|
||||
```yaml
|
||||
storevectors: boolean
|
||||
```
|
||||
|
||||
Enables copying of a vectors model set in path into the embeddings models output directory on save. This option enables a fully encapsulated index with no external file dependencies.
|
||||
|
||||
#### pca
|
||||
```yaml
|
||||
pca: int
|
||||
```
|
||||
|
||||
Removes _n_ principal components from generated embeddings. When enabled, a TruncatedSVD model is built to help with dimensionality reduction. After pooling of vectors creates a single embedding, this method is applied.
|
||||
|
||||
### external
|
||||
|
||||
Embeddings are created via an external model or API. Requires setting the [transform](#transform) parameter to a function that translates data into embeddings.
|
||||
|
||||
#### transform
|
||||
```yaml
|
||||
transform: function
|
||||
```
|
||||
|
||||
When method is `external`, this function transforms input content into embeddings. The input to this function is a list of data. This method must return either a numpy array or list of numpy arrays.
|
||||
|
||||
## gpu
|
||||
```yaml
|
||||
gpu: boolean|int|string|device
|
||||
```
|
||||
|
||||
Set the target device. Supports true/false, device id, device string and torch device instance. This is automatically derived if omitted.
|
||||
|
||||
## batch
|
||||
```yaml
|
||||
batch: int
|
||||
```
|
||||
|
||||
Sets the transform batch size. This parameter controls how input streams are chunked and vectorized.
|
||||
|
||||
## encodebatch
|
||||
```yaml
|
||||
encodebatch: int
|
||||
```
|
||||
|
||||
Sets the encode batch size. This parameter controls the underlying vector model batch size. This often corresponds to a GPU batch size, which controls GPU memory usage.
|
||||
|
||||
## dimensionality
|
||||
```yaml
|
||||
dimensionality: int
|
||||
```
|
||||
|
||||
Enables truncation of vectors to this dimensionality. This is only useful for models trained to store more important information in earlier dimensions such as [Matryoshka Representation Learning (MRL)](https://huggingface.co/blog/matryoshka).
|
||||
|
||||
## quantize
|
||||
```yaml
|
||||
quantize: int|boolean
|
||||
```
|
||||
|
||||
Enables scalar quantization at the specified precision. Supports 1-bit through 8-bit quantization. Scalar quantization transforms continuous floating point values
|
||||
to discrete unsigned integers. Quantized data storage is only supported by the `faiss`, `numpy` and `torch` ANN backends.
|
||||
|
||||
This parameter supports booleans for backwards compatability. When set to true/false, this flag sets [faiss.quantize](../ann/#faiss).
|
||||
|
||||
## instructions
|
||||
```yaml
|
||||
instructions:
|
||||
query: prefix for queries
|
||||
data: prefix for indexing
|
||||
```
|
||||
|
||||
Instruction-based models use prefixes to modify how embeddings are computed. This is especially useful with asymmetric search, which is when the query and indexed data are of vastly different lengths. In other words, short queries with long documents.
|
||||
|
||||
[E5-base](https://huggingface.co/intfloat/e5-base) is an example of a model that accepts instructions. It takes `query: ` and `passage: ` prefixes and uses those to generate embeddings that work well for asymmetric search.
|
||||
|
||||
## models
|
||||
```yaml
|
||||
models: dict
|
||||
```
|
||||
|
||||
Loads and stores vector models in this cache. This is primarily used with subindexes but can be set on any embeddings instance. This prevents the same model from being loaded multiple times when working with multiple embeddings instances.
|
||||
|
||||
## tokenize
|
||||
```yaml
|
||||
tokenize: boolean
|
||||
```
|
||||
|
||||
Enables string tokenization (defaults to false). This method applies tokenization rules that only work with English language text. It's not recommended for use with recent vector models.
|
||||
|
||||
## vectors
|
||||
```yaml
|
||||
vectors: dict
|
||||
```
|
||||
|
||||
Passes these additional parameters to the underlying vector model.
|
||||
@@ -0,0 +1,105 @@
|
||||
# Embeddings
|
||||
|
||||

|
||||

|
||||
|
||||
Embeddings databases are the engine that delivers semantic search. Data is transformed into embeddings vectors where similar concepts will produce similar vectors. Indexes both large and small are built with these vectors. The indexes are used to find results that have the same meaning, not necessarily the same keywords.
|
||||
|
||||
The following code snippet shows how to build and search an embeddings index.
|
||||
|
||||
```python
|
||||
from txtai.embeddings import Embeddings
|
||||
|
||||
# Create embeddings model, backed by sentence-transformers & transformers
|
||||
embeddings = Embeddings(path="sentence-transformers/nli-mpnet-base-v2")
|
||||
|
||||
data = [
|
||||
"US tops 5 million confirmed virus cases",
|
||||
"Canada's last fully intact ice shelf has suddenly collapsed, " +
|
||||
"forming a Manhattan-sized iceberg",
|
||||
"Beijing mobilises invasion craft along coast as Taiwan tensions escalate",
|
||||
"The National Park Service warns against sacrificing slower friends " +
|
||||
"in a bear attack",
|
||||
"Maine man wins $1M from $25 lottery ticket",
|
||||
"Make huge profits without work, earn up to $100,000 a day"
|
||||
]
|
||||
|
||||
# Index the list of text
|
||||
embeddings.index(data)
|
||||
|
||||
print(f"{'Query':20} Best Match")
|
||||
print("-" * 50)
|
||||
|
||||
# Run an embeddings search for each query
|
||||
for query in ("feel good story", "climate change", "public health story", "war",
|
||||
"wildlife", "asia", "lucky", "dishonest junk"):
|
||||
# Extract uid of first result
|
||||
# search result format: (uid, score)
|
||||
uid = embeddings.search(query, 1)[0][0]
|
||||
|
||||
# Print text
|
||||
print(f"{query:20} {data[uid]}")
|
||||
```
|
||||
|
||||
## Build
|
||||
|
||||
An embeddings instance is [configuration-driven](configuration) based on what is passed in the constructor. Vectors are stored with the option to also [store content](configuration/database#content). Content storage enables additional filtering and data retrieval options.
|
||||
|
||||
The example above sets a specific embeddings vector model via the [path](configuration/vectors/#path) parameter. An embeddings instance with no configuration can also be created.
|
||||
|
||||
```python
|
||||
embeddings = Embeddings()
|
||||
```
|
||||
|
||||
In this case, when loading and searching for data, the [default transformers vector model](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2) is used to vectorize data. See the [model guide](../models) for current model recommentations.
|
||||
|
||||
## Index
|
||||
|
||||
After creating a new embeddings instance, the next step is adding data to it.
|
||||
|
||||
```python
|
||||
embeddings.index(rows)
|
||||
```
|
||||
|
||||
The index method takes an iterable and supports the following formats for each element.
|
||||
|
||||
- `(id, data, tags)` - default processing format
|
||||
|
||||
| Element | Description |
|
||||
| ----------- | ------------------------------------------------------------- |
|
||||
| id | unique record id |
|
||||
| data | input data to index, can be text, a dictionary or object |
|
||||
| tags | optional tags string, used to mark/label data as it's indexed |
|
||||
|
||||
- `(id, data)`
|
||||
|
||||
Same as above but without tags.
|
||||
|
||||
- `data`
|
||||
|
||||
Single element to index. In this case, unique id's will automatically be generated. Note that for generated id's, [upsert](methods/#txtai.embeddings.base.Embeddings.upsert) and [delete](methods/#txtai.embeddings.base.Embeddings.delete) calls require a separate search to get the target ids.
|
||||
|
||||
When the data field is a dictionary, text is passed via the `text` key, binary objects via the `object` key. Note that [content](configuration/database#content) must be enabled to store metadata and [objects](configuration/database#objects) to store binary object data. The `id` and `tags` keys will be extracted, if provided.
|
||||
|
||||
The input iterable can be a list or generator. [Generators](https://wiki.python.org/moin/Generators) help with indexing very large datasets as only portions of the data is in memory at any given time.
|
||||
|
||||
More information on indexing can be found in the [index guide](indexing).
|
||||
|
||||
## Search
|
||||
|
||||
Once data is indexed, it is ready for search.
|
||||
|
||||
```python
|
||||
embeddings.search(query, limit)
|
||||
```
|
||||
|
||||
The search method takes two parameters, the query and query limit. The results format is different based on whether [content](configuration/database#content) is stored or not.
|
||||
|
||||
- List of `(id, score)` when content is _not_ stored
|
||||
- List of `{**query columns}` when content is stored
|
||||
|
||||
Both natural language and SQL queries are supported. More information can be found in the [query guide](query).
|
||||
|
||||
## More examples
|
||||
|
||||
See [this link](../examples/#semantic-search) for a full list of embeddings examples.
|
||||
@@ -0,0 +1,130 @@
|
||||
# Index guide
|
||||
|
||||

|
||||

|
||||
|
||||
This section gives an in-depth overview on how to index data with txtai. We'll cover vectorization, indexing/updating/deleting data and the various components of an embeddings database.
|
||||
|
||||
## Vectorization
|
||||
|
||||
The most compute intensive step in building an index is vectorization. The [path](../configuration/vectors#path) parameter sets the path to the vector model. There is logic to automatically detect the vector model [method](../configuration/vectors#method) but it can also be set directly.
|
||||
|
||||
The [batch](../configuration/vectors#batch) and [encodebatch](../configuration/vectors#encodebatch) parameters control the vectorization process. Larger values for `batch` will pass larger batches to the vectorization method. Larger values for `encodebatch` will pass larger batches for each vector encode call. In the case of GPU vector models, larger values will consume more GPU memory.
|
||||
|
||||
Data is buffered to temporary storage during indexing as embeddings vectors can be quite large (for example 768 dimensions of float32 is 768 * 4 = 3072 bytes per vector). Once vectorization is complete, a mmapped array is created with all vectors for [Approximate Nearest Neighbor (ANN)](../configuration/vectors#backend) indexing.
|
||||
|
||||
The terms `ANN` and `dense vector index` are used interchangeably throughout txtai's documentation.
|
||||
|
||||
## Setting a backend
|
||||
|
||||
As mentioned above, computed vectors are stored in an ANN. There are various index [backends](../configuration/ann#backend) that can be configured. Faiss is the default backend.
|
||||
|
||||
## Content storage
|
||||
|
||||
Embeddings indexes can optionally [store content](../configuration/database#content). When this is enabled, the input content is saved in a database alongside the computed vectors. This enables filtering on additional fields and content retrieval.
|
||||
|
||||
## Index vs Upsert
|
||||
|
||||
Data is loaded into an index with either an [index](../methods#txtai.embeddings.base.Embeddings.index) or [upsert](../methods#txtai.embeddings.base.Embeddings.upsert) call.
|
||||
|
||||
```python
|
||||
embeddings.index([(uid, text, None) for uid, text in enumerate(data)])
|
||||
embeddings.upsert([(uid, text, None) for uid, text in enumerate(data)])
|
||||
```
|
||||
|
||||
The `index` call will build a brand new index replacing an existing one. `upsert` will insert or update records. `upsert` ops do _not_ require a full index rebuild.
|
||||
|
||||
## Save
|
||||
|
||||
Indexes can be stored in a directory using the [save](../methods/#txtai.embeddings.base.Embeddings.save) method.
|
||||
|
||||
```python
|
||||
embeddings.save("/path/to/save")
|
||||
```
|
||||
|
||||
Compressed indexes are also supported.
|
||||
|
||||
```python
|
||||
embeddings.save("/path/to/save/index.tar.gz")
|
||||
```
|
||||
|
||||
In addition to saving indexes locally, they can also be persisted to [cloud storage](../configuration/cloud).
|
||||
|
||||
```python
|
||||
embeddings.save("/path/to/save/index.tar.gz", cloud={...})
|
||||
```
|
||||
|
||||
This is especially useful when running in a serverless context or otherwise running on temporary compute. Cloud storage is only supported with compressed indexes.
|
||||
|
||||
Embeddings indexes can be restored using the [load](../methods/#txtai.embeddings.base.Embeddings.load) method.
|
||||
|
||||
```python
|
||||
embeddings.load("/path/to/load")
|
||||
```
|
||||
|
||||
## Delete
|
||||
|
||||
Content can be removed from the index with the [delete](../methods#txtai.embeddings.base.Embeddings.delete) method. This method takes a list of ids to delete.
|
||||
|
||||
```python
|
||||
embeddings.delete(ids)
|
||||
```
|
||||
|
||||
## Reindex
|
||||
|
||||
When [content storage](../configuration/database#content) is enabled, [reindex](../methods#txtai.embeddings.base.Embeddings.reindex) can be called to rebuild the index with new settings. For example, the backend can be switched from faiss to hnsw or the vector model can be updated. This prevents having to go back to the original raw data.
|
||||
|
||||
```python
|
||||
embeddings.reindex(path="sentence-transformers/all-MiniLM-L6-v2", backend="hnsw")
|
||||
```
|
||||
|
||||
## Graph
|
||||
|
||||
Dimensionality reduction with UMAP combined with HDBSCAN is a popular topic modeling method found in a number of libraries. txtai takes a different approach with a semantic graph.
|
||||
|
||||
Enabling a [graph network](../configuration/graph) adds a semantic graph at index time as data is being vectorized. Vector embeddings are used to create relationships in the graph. Finally, community detection algorithms build topic clusters. Semantic graphs can also be used to analyze data connectivity.
|
||||
|
||||
This approach has the advantage of only having to vectorize data once. It also has the advantage of better topic precision given there isn't a dimensionality reduction operation (UMAP). Semantic graph examples are shown below.
|
||||
|
||||
Get a mapping of discovered topics to associated ids.
|
||||
|
||||
```python
|
||||
embeddings.graph.topics
|
||||
```
|
||||
|
||||
Show the most central nodes in the index.
|
||||
|
||||
```python
|
||||
embeddings.graph.centrality()
|
||||
```
|
||||
|
||||
Show how node 1 and node 2 are connected in the graph.
|
||||
|
||||
```python
|
||||
embeddings.graph.showpath(id1, id2)
|
||||
```
|
||||
|
||||
Graphs are persisted alongside an embeddings index. Each save and load will also save and load the graph.
|
||||
|
||||
## Sparse vectors
|
||||
|
||||
Scoring instances can create a standalone [keyword](../configuration/general#keyword) or sparse index (BM25, TF-IDF). This enables [hybrid](../configuration/general/#hybrid) search when there is an available dense vector index.
|
||||
|
||||
The terms `sparse vector index`, `keyword index`, `terms index` and `scoring index` are used interchangeably throughout txtai's documentation.
|
||||
|
||||
See [this link](../../examples/#semantic-search) to learn more.
|
||||
|
||||
## Subindexes
|
||||
|
||||
An embeddings instance can optionally have associated [subindexes](../configuration/general/#indexes), which are also embeddings databases. This enables indexing additional fields, vector models and much more.
|
||||
|
||||
## Word vectors
|
||||
|
||||
When using [word vector backed models](../configuration/vectors#words) with scoring set, a separate call is required before calling `index` as follows:
|
||||
|
||||
```python
|
||||
embeddings.score(rows)
|
||||
embeddings.index(rows)
|
||||
```
|
||||
|
||||
Both calls are required to support generator-backed iteration of data with word vectors models.
|
||||
@@ -0,0 +1,22 @@
|
||||
# Methods
|
||||
|
||||
::: txtai.embeddings.Embeddings
|
||||
options:
|
||||
filters:
|
||||
- "!columns"
|
||||
- "!createann"
|
||||
- "!createcloud"
|
||||
- "!createdatabase"
|
||||
- "!creategraph"
|
||||
- "!createids"
|
||||
- "!createindexes"
|
||||
- "!createscoring"
|
||||
- "!checkarchive"
|
||||
- "!configure"
|
||||
- "!defaultallowed"
|
||||
- "!defaults"
|
||||
- "!initindex"
|
||||
- "!loadconfig"
|
||||
- "!loadquery"
|
||||
- "!loadvectors"
|
||||
- "!saveconfig"
|
||||
@@ -0,0 +1,236 @@
|
||||
# Query guide
|
||||
|
||||

|
||||

|
||||
|
||||
This section covers how to query data with txtai. The simplest way to search for data is building a natural language string with the desired content to find. txtai also supports querying with SQL. We'll cover both methods here.
|
||||
|
||||
## Natural language queries
|
||||
|
||||
In the simplest case, the query is text and the results are index text that is most similar to the query text.
|
||||
|
||||
```python
|
||||
embeddings.search("feel good story")
|
||||
embeddings.search("wildlife")
|
||||
```
|
||||
|
||||
The queries above [search](../methods#txtai.embeddings.base.Embeddings.search) the index for similarity matches on `feel good story` and `wildlife`. If content storage is enabled, a list of `{**query columns}` is returned. Otherwise, a list of `(id, score)` tuples are returned.
|
||||
|
||||
## SQL
|
||||
|
||||
txtai supports more complex queries with SQL. This is only supported if [content storage](../configuration/database#content) is enabled. txtai has a translation layer that analyzes input SQL statements and combines similarity results with content stored in a relational database.
|
||||
|
||||
SQL queries are run through `embeddings.search` like natural language queries but the examples below only show the SQL query for conciseness.
|
||||
|
||||
```python
|
||||
embeddings.search("SQL query")
|
||||
```
|
||||
|
||||
### Similar clause
|
||||
|
||||
The similar clause is a txtai function that enables similarity searches with SQL.
|
||||
|
||||
```sql
|
||||
SELECT id, text, score FROM txtai WHERE similar('feel good story')
|
||||
```
|
||||
|
||||
The similar clause takes the following arguments:
|
||||
|
||||
```sql
|
||||
similar("query", "number of candidates", "index", "weights")
|
||||
```
|
||||
|
||||
| Argument | Description |
|
||||
| --------------------- | ---------------------------------------|
|
||||
| query | natural language query to run |
|
||||
| number of candidates | number of candidate results to return |
|
||||
| index | target index name |
|
||||
| weights | hybrid score weights |
|
||||
|
||||
The txtai query layer joins results from two separate components, a relational store and a similarity index. With a similar clause, a similarity search is run and those ids are fed to the underlying database query.
|
||||
|
||||
The number of candidates should be larger than the desired number of results when applying additional filter clauses. This ensures that `limit` results are still returned after applying additional filters. If the number of candidates is not specified, it is defaulted as follows:
|
||||
|
||||
- For a single query filter clause, the default is the query limit
|
||||
- With multiple filtering clauses, the default is 10x the query limit
|
||||
|
||||
The index name is only applicable when [subindexes](../configuration/general/#indexes) are enabled. This specifies the index to use for the query.
|
||||
|
||||
Weights sets the hybrid score weights when an index has both a sparse and dense index.
|
||||
|
||||
### Dynamic columns
|
||||
|
||||
Content can be indexed in multiple ways when content storage is enabled. [Remember that input documents](../#index) take the form of `(id, data, tags)` tuples. If data is a string or binary content, it's indexed and searchable with `similar()` clauses.
|
||||
|
||||
If data is a dictionary, then all fields in the dictionary are stored and available via SQL. The `text` field or [field specified in the index configuration](../configuration/general/#columns) is indexed and searchable with `similar()` clauses.
|
||||
|
||||
For example:
|
||||
|
||||
```python
|
||||
embeddings.index([{"text": "text to index", "flag": True,
|
||||
"actiondate": "2022-01-01"}])
|
||||
```
|
||||
|
||||
With the above input data, queries can now have more complex filters.
|
||||
|
||||
```sql
|
||||
SELECT text, flag, actiondate FROM txtai WHERE similar('query') AND flag = 1
|
||||
AND actiondate >= '2022-01-01'
|
||||
```
|
||||
|
||||
txtai's query layer automatically detects columns and translates queries into a format that can be understood by the underlying database.
|
||||
|
||||
Nested dictionaries/JSON is supported and can be escaped with bracket statements.
|
||||
|
||||
```python
|
||||
embeddings.index([{"text": "text to index",
|
||||
"parent": {"child element": "abc"}}])
|
||||
```
|
||||
|
||||
```sql
|
||||
SELECT text FROM txtai WHERE [parent.child element] = 'abc'
|
||||
```
|
||||
|
||||
Note the bracket statement escaping the nested column with spaces in the name.
|
||||
|
||||
### Bind parameters
|
||||
|
||||
txtai has support for SQL bind parameters.
|
||||
|
||||
```python
|
||||
# Query with a bind parameter for similar clause
|
||||
query = "SELECT id, text, score FROM txtai WHERE similar(:x)"
|
||||
results = embeddings.search(query, parameters={"x": "feel good story"})
|
||||
|
||||
# Query with a bind parameter for column filter
|
||||
query = "SELECT text, flag, actiondate FROM txtai WHERE flag = :x"
|
||||
results = embeddings.search(query, parameters={"x": 1})
|
||||
```
|
||||
|
||||
### Aggregation queries
|
||||
|
||||
The goal of txtai's query language is to closely support all functions in the underlying database engine. The main challenge is ensuring dynamic columns are properly escaped into the engines native query function.
|
||||
|
||||
Aggregation query examples.
|
||||
|
||||
```sql
|
||||
SELECT count(*) FROM txtai WHERE similar('feel good story') AND score >= 0.15
|
||||
SELECT max(length(text)) FROM txtai WHERE similar('feel good story')
|
||||
AND score >= 0.15
|
||||
SELECT count(*), flag FROM txtai GROUP BY flag ORDER BY count(*) DESC
|
||||
```
|
||||
|
||||
## Binary objects
|
||||
|
||||
txtai has support for storing and retrieving binary objects. Binary objects can be retrieved as shown in the example below.
|
||||
|
||||
```python
|
||||
# Create embeddings index with content and object storage enabled
|
||||
embeddings = Embeddings(content=True, objects=True)
|
||||
|
||||
# Get an image
|
||||
request = open("demo.gif", "rb")
|
||||
|
||||
# Insert record
|
||||
embeddings.index([("txtai", {"text": "txtai executes machine-learning workflows.",
|
||||
"object": request.read()})])
|
||||
|
||||
# Query txtai and get associated object
|
||||
query = "SELECT object FROM txtai WHERE similar('machine learning') LIMIT 1"
|
||||
result = embeddings.search(query)[0]["object"]
|
||||
|
||||
# Query binary content with a bind parameter
|
||||
query = "SELECT object FROM txtai WHERE similar(:x) LIMIT 1"
|
||||
results = embeddings.search(query, parameters={"x": request.read()})
|
||||
```
|
||||
|
||||
## Custom SQL functions
|
||||
|
||||
Custom, user-defined SQL functions extend selection, filtering and ordering clauses with additional logic. For example, the following snippet defines a function that translates text using a translation pipeline.
|
||||
|
||||
```python
|
||||
# Translation pipeline
|
||||
translate = Translation()
|
||||
|
||||
# Create embeddings index
|
||||
embeddings = Embeddings(path="sentence-transformers/nli-mpnet-base-v2",
|
||||
content=True,
|
||||
functions=[translate]})
|
||||
|
||||
# Run a search using a custom SQL function
|
||||
embeddings.search("""
|
||||
SELECT
|
||||
text,
|
||||
translation(text, 'de', null) 'text (DE)',
|
||||
translation(text, 'es', null) 'text (ES)',
|
||||
translation(text, 'fr', null) 'text (FR)'
|
||||
FROM txtai WHERE similar('feel good story')
|
||||
LIMIT 1
|
||||
""")
|
||||
```
|
||||
|
||||
## Query translation
|
||||
|
||||
Natural language queries with filters can be converted to txtai-compatible SQL statements with query translation. For example:
|
||||
|
||||
```python
|
||||
embeddings.search("feel good story since yesterday")
|
||||
```
|
||||
|
||||
can be converted to a SQL statement with a similar clause and date filter.
|
||||
|
||||
```sql
|
||||
select id, text, score from txtai where similar('feel good story') and
|
||||
entry >= date('now', '-1 day')
|
||||
```
|
||||
|
||||
This requires setting a [query translation model](../configuration/database#query). The default query translation model is [t5-small-txtsql](https://huggingface.co/NeuML/t5-small-txtsql) but this can easily be finetuned to handle different use cases.
|
||||
|
||||
## Hybrid search
|
||||
|
||||
When an embeddings database has both a sparse and dense index, both indexes will be queried and the results will be equally weighted unless otherwise specified.
|
||||
|
||||
```python
|
||||
embeddings.search("query", weights=0.5)
|
||||
embeddings.search("SELECT id, text, score FROM txtai WHERE similar('query', 0.5)")
|
||||
```
|
||||
|
||||
## Graph search
|
||||
|
||||
If an embeddings database has an associated graph network, graph searches can be run. The search syntax below uses [openCypher](https://github.com/opencypher/openCypher). Follow the preceding link to learn more about this syntax.
|
||||
|
||||
Additionally, standard embeddings searches can be returned as graphs.
|
||||
|
||||
```python
|
||||
# Find all paths between id: 0 and id: 5 between 1 and 3 hops away
|
||||
embeddings.graph.search("""
|
||||
MATCH P=({id: 0})-[*1..3]->({id: 5})
|
||||
RETURN P
|
||||
""")
|
||||
|
||||
# Standard embeddings search as graph
|
||||
embeddings.search("query", graph=True)
|
||||
```
|
||||
|
||||
## Subindexes
|
||||
|
||||
Subindexes can be queried as follows:
|
||||
|
||||
```python
|
||||
# Query with index parameter
|
||||
embeddings.search("query", index="subindex1")
|
||||
|
||||
# Specify with SQL
|
||||
embeddings.search("""
|
||||
SELECT id, text, score FROM txtai
|
||||
WHERE similar('query', 'subindex1')
|
||||
""")
|
||||
```
|
||||
|
||||
## Combined index architecture
|
||||
|
||||
txtai has multiple storage and indexing components. Content is stored in an underlying database along with an approximate nearest neighbor (ANN) index, keyword index and graph network. These components combine to deliver similarity search alongside traditional structured search.
|
||||
|
||||
The ANN index stores ids and vectors for each input element. When a natural language query is run, the query is translated into a vector and a similarity query finds the best matching ids. When a database is added into the mix, an additional step is executed. This step takes those ids and effectively inserts them as part of the underlying database query. The same steps apply with keyword indexes except a term frequency index is used to find the best matching ids.
|
||||
|
||||
Dynamic columns are supported via the underlying engine. For SQLite, data is stored as JSON and dynamic columns are converted into `json_extract` clauses. Client-server databases are supported via [SQLAlchemy](https://docs.sqlalchemy.org/en/20/dialects/) and dynamic columns are supported provided the underlying engine has [JSON](https://docs.sqlalchemy.org/en/20/core/type_basics.html#sqlalchemy.types.JSON) support.
|
||||
@@ -0,0 +1,139 @@
|
||||
# Examples
|
||||
|
||||

|
||||

|
||||
|
||||
See below for a comprehensive series of example notebooks and applications covering txtai.
|
||||
|
||||
## Semantic Search
|
||||
|
||||
Build semantic/similarity/vector/neural search applications.
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [Introducing txtai](https://github.com/neuml/txtai/blob/master/examples/01_Introducing_txtai.ipynb) [▶️](https://www.youtube.com/watch?v=SIezMnVdmMs) | Overview of the functionality provided by txtai | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/01_Introducing_txtai.ipynb) |
|
||||
| [Build an Embeddings index with Hugging Face Datasets](https://github.com/neuml/txtai/blob/master/examples/02_Build_an_Embeddings_index_with_Hugging_Face_Datasets.ipynb) | Index and search Hugging Face Datasets | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/02_Build_an_Embeddings_index_with_Hugging_Face_Datasets.ipynb) |
|
||||
| [Build an Embeddings index from a data source](https://github.com/neuml/txtai/blob/master/examples/03_Build_an_Embeddings_index_from_a_data_source.ipynb) | Index and search a data source with word embeddings | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/03_Build_an_Embeddings_index_from_a_data_source.ipynb) |
|
||||
| [Add semantic search to Elasticsearch](https://github.com/neuml/txtai/blob/master/examples/04_Add_semantic_search_to_Elasticsearch.ipynb) | Add semantic search to existing search systems | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/04_Add_semantic_search_to_Elasticsearch.ipynb) |
|
||||
| [Similarity search with images](https://github.com/neuml/txtai/blob/master/examples/13_Similarity_search_with_images.ipynb) | Embed images and text into the same space for search | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/13_Similarity_search_with_images.ipynb) |
|
||||
| [Custom Embeddings SQL functions](https://github.com/neuml/txtai/blob/master/examples/30_Embeddings_SQL_custom_functions.ipynb) | Add user-defined functions to Embeddings SQL | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/30_Embeddings_SQL_custom_functions.ipynb) |
|
||||
| [Model explainability](https://github.com/neuml/txtai/blob/master/examples/32_Model_explainability.ipynb) | Explainability for semantic search | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/32_Model_explainability.ipynb) |
|
||||
| [Query translation](https://github.com/neuml/txtai/blob/master/examples/33_Query_translation.ipynb) | Domain-specific natural language queries with query translation | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/33_Query_translation.ipynb) |
|
||||
| [Build a QA database](https://github.com/neuml/txtai/blob/master/examples/34_Build_a_QA_database.ipynb) | Question matching with semantic search | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/34_Build_a_QA_database.ipynb) |
|
||||
| [Semantic Graphs](https://github.com/neuml/txtai/blob/master/examples/38_Introducing_the_Semantic_Graph.ipynb) | Explore topics, data connectivity and run network analysis| [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/38_Introducing_the_Semantic_Graph.ipynb) |
|
||||
| [Topic Modeling with BM25](https://github.com/neuml/txtai/blob/master/examples/39_Classic_Topic_Modeling_with_BM25.ipynb) | Topic modeling backed by a BM25 index | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/39_Classic_Topic_Modeling_with_BM25.ipynb) |
|
||||
|
||||
## LLM
|
||||
|
||||
LLM chains, retrieval augmented generation (RAG), chat with your data, pipelines and workflows that interface with large language models (LLMs).
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [Prompt-driven search with LLMs](https://github.com/neuml/txtai/blob/master/examples/42_Prompt_driven_search_with_LLMs.ipynb) | Embeddings-guided and Prompt-driven search with Large Language Models (LLMs) | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/42_Prompt_driven_search_with_LLMs.ipynb) |
|
||||
| [Prompt templates and task chains](https://github.com/neuml/txtai/blob/master/examples/44_Prompt_templates_and_task_chains.ipynb) | Build model prompts and connect tasks together with workflows | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/44_Prompt_templates_and_task_chains.ipynb) |
|
||||
| [Build RAG pipelines with txtai](https://github.com/neuml/txtai/blob/master/examples/52_Build_RAG_pipelines_with_txtai.ipynb) | Guide on retrieval augmented generation including how to create citations | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/52_Build_RAG_pipelines_with_txtai.ipynb) |
|
||||
| [Integrate LLM frameworks](https://github.com/neuml/txtai/blob/master/examples/53_Integrate_LLM_Frameworks.ipynb) | Integrate llama.cpp, LiteLLM and custom generation frameworks | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/53_Integrate_LLM_Frameworks.ipynb) |
|
||||
| [Generate knowledge with Semantic Graphs and RAG](https://github.com/neuml/txtai/blob/master/examples/55_Generate_knowledge_with_Semantic_Graphs_and_RAG.ipynb) | Knowledge exploration and discovery with Semantic Graphs and RAG | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/55_Generate_knowledge_with_Semantic_Graphs_and_RAG.ipynb) |
|
||||
| [Build knowledge graphs with LLMs](https://github.com/neuml/txtai/blob/master/examples/57_Build_knowledge_graphs_with_LLM_driven_entity_extraction.ipynb) | Build knowledge graphs with LLM-driven entity extraction | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/57_Build_knowledge_graphs_with_LLM_driven_entity_extraction.ipynb) |
|
||||
| [Advanced RAG with graph path traversal](https://github.com/neuml/txtai/blob/master/examples/58_Advanced_RAG_with_graph_path_traversal.ipynb) | Graph path traversal to collect complex sets of data for advanced RAG | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/58_Advanced_RAG_with_graph_path_traversal.ipynb) |
|
||||
| [Advanced RAG with guided generation](https://github.com/neuml/txtai/blob/master/examples/60_Advanced_RAG_with_guided_generation.ipynb) | Retrieval Augmented and Guided Generation | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/60_Advanced_RAG_with_guided_generation.ipynb) |
|
||||
| [RAG with llama.cpp and external API services](https://github.com/neuml/txtai/blob/master/examples/62_RAG_with_llama_cpp_and_external_API_services.ipynb) | RAG with additional vector and LLM frameworks | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/62_RAG_with_llama_cpp_and_external_API_services.ipynb) |
|
||||
|
||||
## Pipelines
|
||||
|
||||
Transform data with language model backed pipelines.
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [Extractive QA with txtai](https://github.com/neuml/txtai/blob/master/examples/05_Extractive_QA_with_txtai.ipynb) | Introduction to extractive question-answering with txtai | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/05_Extractive_QA_with_txtai.ipynb) |
|
||||
| [Extractive QA with Elasticsearch](https://github.com/neuml/txtai/blob/master/examples/06_Extractive_QA_with_Elasticsearch.ipynb) | Run extractive question-answering queries with Elasticsearch | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/06_Extractive_QA_with_Elasticsearch.ipynb) |
|
||||
| [Extractive QA to build structured data](https://github.com/neuml/txtai/blob/master/examples/20_Extractive_QA_to_build_structured_data.ipynb) | Build structured datasets using extractive question-answering | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/20_Extractive_QA_to_build_structured_data.ipynb) |
|
||||
| [Apply labels with zero shot classification](https://github.com/neuml/txtai/blob/master/examples/07_Apply_labels_with_zero_shot_classification.ipynb) | Use zero shot learning for labeling, classification and topic modeling | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/07_Apply_labels_with_zero_shot_classification.ipynb) |
|
||||
| [Building abstractive text summaries](https://github.com/neuml/txtai/blob/master/examples/09_Building_abstractive_text_summaries.ipynb) | Run abstractive text summarization | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/09_Building_abstractive_text_summaries.ipynb) |
|
||||
| [Extract text from documents](https://github.com/neuml/txtai/blob/master/examples/10_Extract_text_from_documents.ipynb) | Extract text from PDF, Office, HTML and more | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/10_Extract_text_from_documents.ipynb) |
|
||||
| [Text to speech generation](https://github.com/neuml/txtai/blob/master/examples/40_Text_to_Speech_Generation.ipynb) | Generate speech from text | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/40_Text_to_Speech_Generation.ipynb) |
|
||||
| [Transcribe audio to text](https://github.com/neuml/txtai/blob/master/examples/11_Transcribe_audio_to_text.ipynb) | Convert audio files to text | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/11_Transcribe_audio_to_text.ipynb) |
|
||||
| [Translate text between languages](https://github.com/neuml/txtai/blob/master/examples/12_Translate_text_between_languages.ipynb) | Streamline machine translation and language detection | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/12_Translate_text_between_languages.ipynb) |
|
||||
| [Generate image captions and detect objects](https://github.com/neuml/txtai/blob/master/examples/25_Generate_image_captions_and_detect_objects.ipynb) | Captions and object detection for images | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/25_Generate_image_captions_and_detect_objects.ipynb) |
|
||||
| [Near duplicate image detection](https://github.com/neuml/txtai/blob/master/examples/31_Near_duplicate_image_detection.ipynb) | Identify duplicate and near-duplicate images | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/31_Near_duplicate_image_detection.ipynb) |
|
||||
|
||||
## Workflows
|
||||
|
||||
Efficiently process data at scale.
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [Run pipeline workflows](https://github.com/neuml/txtai/blob/master/examples/14_Run_pipeline_workflows.ipynb) [▶️](https://www.youtube.com/watch?v=UBMPDCn1gEU) | Simple yet powerful constructs to efficiently process data | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/14_Run_pipeline_workflows.ipynb) |
|
||||
| [Transform tabular data with composable workflows](https://github.com/neuml/txtai/blob/master/examples/22_Transform_tabular_data_with_composable_workflows.ipynb) | Transform, index and search tabular data | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/22_Transform_tabular_data_with_composable_workflows.ipynb) |
|
||||
| [Tensor workflows](https://github.com/neuml/txtai/blob/master/examples/23_Tensor_workflows.ipynb) | Performant processing of large tensor arrays | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/23_Tensor_workflows.ipynb) |
|
||||
| [Entity extraction workflows](https://github.com/neuml/txtai/blob/master/examples/26_Entity_extraction_workflows.ipynb) | Identify entity/label combinations | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/26_Entity_extraction_workflows.ipynb) |
|
||||
| [Workflow Scheduling](https://github.com/neuml/txtai/blob/master/examples/27_Workflow_scheduling.ipynb) | Schedule workflows with cron expressions | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/27_Workflow_scheduling.ipynb) |
|
||||
| [Push notifications with workflows](https://github.com/neuml/txtai/blob/master/examples/28_Push_notifications_with_workflows.ipynb) | Generate and push notifications with workflows | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/28_Push_notifications_with_workflows.ipynb) |
|
||||
| [Pictures are a worth a thousand words](https://github.com/neuml/txtai/blob/master/examples/35_Pictures_are_worth_a_thousand_words.ipynb) | Generate webpage summary images with DALL-E mini | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/35_Pictures_are_worth_a_thousand_words.ipynb) |
|
||||
| [Run txtai with native code](https://github.com/neuml/txtai/blob/master/examples/36_Run_txtai_in_native_code.ipynb) | Execute workflows in native code with the Python C API | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/36_Run_txtai_in_native_code.ipynb) |
|
||||
|
||||
## Model Training
|
||||
|
||||
Train NLP models.
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [Train a text labeler](https://github.com/neuml/txtai/blob/master/examples/16_Train_a_text_labeler.ipynb) | Build text sequence classification models | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/16_Train_a_text_labeler.ipynb) |
|
||||
| [Train without labels](https://github.com/neuml/txtai/blob/master/examples/17_Train_without_labels.ipynb) | Use zero-shot classifiers to train new models | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/17_Train_without_labels.ipynb) |
|
||||
| [Train a QA model](https://github.com/neuml/txtai/blob/master/examples/19_Train_a_QA_model.ipynb) | Build and fine-tune question-answering models | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/19_Train_a_QA_model.ipynb) |
|
||||
| [Train a language model from scratch](https://github.com/neuml/txtai/blob/master/examples/41_Train_a_language_model_from_scratch.ipynb) | Build new language models | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/41_Train_a_language_model_from_scratch.ipynb) |
|
||||
| [Export and run models with ONNX](https://github.com/neuml/txtai/blob/master/examples/18_Export_and_run_models_with_ONNX.ipynb) | Export models with ONNX, run natively in JavaScript, Java and Rust | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/18_Export_and_run_models_with_ONNX.ipynb) |
|
||||
| [Export and run other machine learning models](https://github.com/neuml/txtai/blob/master/examples/21_Export_and_run_other_machine_learning_models.ipynb) | Export and run models from scikit-learn, PyTorch and more | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/21_Export_and_run_other_machine_learning_models.ipynb) |
|
||||
|
||||
## API
|
||||
|
||||
Run distributed txtai, integrate with the API and cloud endpoints.
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [API Gallery](https://github.com/neuml/txtai/blob/master/examples/08_API_Gallery.ipynb) | Using txtai in JavaScript, Java, Rust and Go | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/08_API_Gallery.ipynb) |
|
||||
| [Distributed embeddings cluster](https://github.com/neuml/txtai/blob/master/examples/15_Distributed_embeddings_cluster.ipynb) | Distribute an embeddings index across multiple data nodes | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/15_Distributed_embeddings_cluster.ipynb) |
|
||||
| [Embeddings in the Cloud](https://github.com/neuml/txtai/blob/master/examples/43_Embeddings_in_the_Cloud.ipynb) | Load and use an embeddings index from the Hugging Face Hub | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/43_Embeddings_in_the_Cloud.ipynb) |
|
||||
| [Custom API Endpoints](https://github.com/neuml/txtai/blob/master/examples/51_Custom_API_Endpoints.ipynb) | Extend the API with custom endpoints | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/51_Custom_API_Endpoints.ipynb) |
|
||||
| [API Authorization and Authentication](https://github.com/neuml/txtai/blob/master/examples/54_API_Authorization_and_Authentication.ipynb) | Add authorization, authentication and middleware dependencies to the API | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/54_API_Authorization_and_Authentication.ipynb) |
|
||||
|
||||
## Architecture
|
||||
|
||||
Project architecture, data formats, external integrations, scale to production, benchmarks, and performance.
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [Anatomy of a txtai index](https://github.com/neuml/txtai/blob/master/examples/29_Anatomy_of_a_txtai_index.ipynb) | Deep dive into the file formats behind a txtai embeddings index | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/29_Anatomy_of_a_txtai_index.ipynb) |
|
||||
| [Embeddings components](https://github.com/neuml/txtai/blob/master/examples/37_Embeddings_index_components.ipynb) | Composable search with vector, SQL and scoring components | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/37_Embeddings_index_components.ipynb) |
|
||||
| [Customize your own embeddings database](https://github.com/neuml/txtai/blob/master/examples/45_Customize_your_own_embeddings_database.ipynb) | Ways to combine vector indexes with relational databases | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/45_Customize_your_own_embeddings_database.ipynb) |
|
||||
| [Building an efficient sparse keyword index in Python](https://github.com/neuml/txtai/blob/master/examples/47_Building_an_efficient_sparse_keyword_index_in_Python.ipynb) | Fast and accurate sparse keyword indexing | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/48_Benefits_of_hybrid_search.ipynb) |
|
||||
| [Benefits of hybrid search](https://github.com/neuml/txtai/blob/master/examples/48_Benefits_of_hybrid_search.ipynb) | Improve accuracy with a combination of semantic and keyword search | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/48_Benefits_of_hybrid_search.ipynb) |
|
||||
| [External database integration](https://github.com/neuml/txtai/blob/master/examples/49_External_database_integration.ipynb) | Store metadata in PostgreSQL, MariaDB, MySQL and more | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/49_External_database_integration.ipynb) |
|
||||
| [All about vector quantization](https://github.com/neuml/txtai/blob/master/examples/50_All_about_vector_quantization.ipynb) | Benchmarking scalar and product quantization methods | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/50_All_about_vector_quantization.ipynb) |
|
||||
| [External vectorization](https://github.com/neuml/txtai/blob/master/examples/56_External_vectorization.ipynb) | Vectorization with precomputed embeddings datasets and APIs | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/56_External_vectorization.ipynb) |
|
||||
| [Integrate txtai with Postgres](https://github.com/neuml/txtai/blob/master/examples/61_Integrate_txtai_with_Postgres.ipynb) | Persist content, vectors and graph data in Postgres | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/61_Integrate_txtai_with_Postgres.ipynb) |
|
||||
|
||||
## Releases
|
||||
|
||||
New functionality added in major releases.
|
||||
|
||||
| Notebook | Description | |
|
||||
|:----------|:-------------|------:|
|
||||
| [What's new in txtai 4.0](https://github.com/neuml/txtai/blob/master/examples/24_Whats_new_in_txtai_4_0.ipynb) | Content storage, SQL, object storage, reindex and compressed indexes | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/24_Whats_new_in_txtai_4_0.ipynb) |
|
||||
| [What's new in txtai 6.0](https://github.com/neuml/txtai/blob/master/examples/46_Whats_new_in_txtai_6_0.ipynb) | Sparse, hybrid and subindexes for embeddings, LLM improvements | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/46_Whats_new_in_txtai_6_0.ipynb) |
|
||||
| [What's new in txtai 7.0](https://github.com/neuml/txtai/blob/master/examples/59_Whats_new_in_txtai_7_0.ipynb) | Semantic graph 2.0, LoRA/QLoRA training and binary API support | [](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/59_Whats_new_in_txtai_7_0.ipynb) |
|
||||
|
||||
## Applications
|
||||
|
||||
Series of example applications with txtai. Links to hosted versions on [Hugging Face Spaces](https://hf.co/spaces) are also provided, when available.
|
||||
|
||||
| Application | Description | |
|
||||
|:-------------|:-------------|------:|
|
||||
| [Basic similarity search](https://github.com/neuml/txtai/blob/master/examples/similarity.py) | Basic similarity search example. Data from the original txtai demo. |[🤗](https://hf.co/spaces/NeuML/similarity)|
|
||||
| [Baseball stats](https://github.com/neuml/txtai/blob/master/examples/baseball.py) | Match historical baseball player stats using vector search. |[🤗](https://hf.co/spaces/NeuML/baseball)|
|
||||
| [Benchmarks](https://github.com/neuml/txtai/blob/master/examples/benchmarks.py) | Calculate performance metrics for the BEIR datasets. |*Local run only*|
|
||||
| [Book search](https://github.com/neuml/txtai/blob/master/examples/books.py) | Book similarity search application. Index book descriptions and query using natural language statements. |*Local run only*|
|
||||
| [Image search](https://github.com/neuml/txtai/blob/master/examples/images.py) | Image similarity search application. Index a directory of images and run searches to identify images similar to the input query. |[🤗](https://hf.co/spaces/NeuML/imagesearch)|
|
||||
| [Summarize an article](https://github.com/neuml/txtai/blob/master/examples/article.py) | Summarize an article. Workflow that extracts text from a webpage and builds a summary. |[🤗](https://hf.co/spaces/NeuML/articlesummary)|
|
||||
| [Wiki search](https://github.com/neuml/txtai/blob/master/examples/wiki.py) | Wikipedia search application. Queries Wikipedia API and summarizes the top result. |[🤗](https://hf.co/spaces/NeuML/wikisummary)|
|
||||
| [Workflow builder](https://github.com/neuml/txtai/blob/master/examples/workflows.py) | Build and execute txtai workflows. Connect summarization, text extraction, transcription, translation and similarity search pipelines together to run unified workflows. |[🤗](https://hf.co/spaces/NeuML/txtai)|
|
||||
@@ -0,0 +1,128 @@
|
||||
# FAQ
|
||||
|
||||

|
||||
|
||||
Below is a list of frequently asked questions and common issues encountered.
|
||||
|
||||
## Questions
|
||||
|
||||
----------
|
||||
|
||||
__Question__
|
||||
|
||||
What models are recommended?
|
||||
|
||||
__Answer__
|
||||
|
||||
See the [model guide](../models).
|
||||
|
||||
----------
|
||||
|
||||
__Question__
|
||||
|
||||
What is the best way to track the progress of an `embeddings.index` call?
|
||||
|
||||
__Answer__
|
||||
|
||||
Wrap the list or generator passed to the index call with tqdm. See [#478](https://github.com/neuml/txtai/issues/478) for more.
|
||||
|
||||
----------
|
||||
|
||||
__Question__
|
||||
|
||||
What is the best way to analyze the content of a txtai index?
|
||||
|
||||
__Answer__
|
||||
|
||||
txtai has a console application that makes this easy. Read [this article](https://medium.com/neuml/insights-from-the-txtai-console-d307c28e149e) to learn more.
|
||||
|
||||
----------
|
||||
|
||||
__Question__
|
||||
|
||||
How can models be externally loaded and passed to embeddings and pipelines?
|
||||
|
||||
__Answer__
|
||||
|
||||
Embeddings example.
|
||||
|
||||
```python
|
||||
from transformers import AutoModel, AutoTokenizer
|
||||
from txtai.embeddings import Embeddings
|
||||
|
||||
# Load model externally
|
||||
model = AutoModel.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")
|
||||
tokenizer = AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")
|
||||
|
||||
# Pass to embeddings instance
|
||||
embeddings = Embeddings(path=model, tokenizer=tokenizer)
|
||||
```
|
||||
|
||||
LLM pipeline example.
|
||||
|
||||
```python
|
||||
import torch
|
||||
|
||||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||||
from txtai.pipeline import LLM
|
||||
|
||||
# Load Mistral-7B-OpenOrca
|
||||
path = "Open-Orca/Mistral-7B-OpenOrca"
|
||||
model = AutoModelForCausalLM.from_pretrained(
|
||||
path,
|
||||
torch_dtype=torch.bfloat16,
|
||||
)
|
||||
tokenizer = AutoTokenizer.from_pretrained(path)
|
||||
|
||||
llm = LLM((model, tokenizer))
|
||||
```
|
||||
|
||||
## Common issues
|
||||
|
||||
----------
|
||||
|
||||
__Issue__
|
||||
|
||||
Embeddings query errors like this:
|
||||
|
||||
```
|
||||
SQLError: no such function: json_extract
|
||||
```
|
||||
|
||||
__Solution__
|
||||
|
||||
Upgrade Python version as it doesn't have SQLite support for json_extract
|
||||
|
||||
----------
|
||||
|
||||
__Issue__
|
||||
|
||||
Segmentation faults and similar errors on macOS
|
||||
|
||||
__Solution__
|
||||
|
||||
Disable OpenMP threading via the environment variable `export OMP_NUM_THREADS=1` or downgrade PyTorch to <= 1.12. See issue [#377](https://github.com/neuml/txtai/issues/377) for more.
|
||||
|
||||
----------
|
||||
|
||||
__Issue__
|
||||
|
||||
`ContextualVersionConflict` and/or package METADATA exception while running one of the [examples](../examples) notebooks on Google Colab
|
||||
|
||||
__Solution__
|
||||
|
||||
Restart the kernel. See issue [#409](https://github.com/neuml/txtai/issues/409) for more on this issue.
|
||||
|
||||
----------
|
||||
|
||||
__Issue__
|
||||
|
||||
Error installing optional/extra dependencies such as `pipeline`
|
||||
|
||||
__Solution__
|
||||
|
||||
The default MacOS shell (zsh) and Windows PowerShell require escaping square brackets
|
||||
|
||||
```
|
||||
pip install 'txtai[pipeline]'
|
||||
```
|
||||
@@ -0,0 +1,10 @@
|
||||
# Further reading
|
||||
|
||||

|
||||

|
||||
|
||||
- [Introducing txtai, the all-in-one embeddings database](https://medium.com/neuml/introducing-txtai-the-all-in-one-embeddings-database-c721f4ff91ad)
|
||||
- [Tutorial series on Hashnode](https://neuml.hashnode.dev/series/txtai-tutorial) | [dev.to](https://dev.to/neuml/tutorial-series-on-txtai-ibg)
|
||||
- [What's new in txtai 7.0](https://medium.com/neuml/whats-new-in-txtai-7-0-855ad6a55440) | [6.0](https://medium.com/neuml/whats-new-in-txtai-6-0-7d93eeedf804) | [5.0](https://medium.com/neuml/whats-new-in-txtai-5-0-e5c75a13b101) | [4.0](https://medium.com/neuml/whats-new-in-txtai-4-0-bbc3a65c3d1c)
|
||||
- [Getting started with semantic search](https://medium.com/neuml/getting-started-with-semantic-search-a9fd9d8a48cf) | [workflows](https://medium.com/neuml/getting-started-with-semantic-workflows-2fefda6165d9)
|
||||
- [Running txtai at scale](https://medium.com/neuml/running-at-scale-with-txtai-71196cdd99f9)
|
||||
|
After Width: | Height: | Size: 337 KiB |
|
After Width: | Height: | Size: 338 KiB |
|
After Width: | Height: | Size: 420 KiB |
@@ -0,0 +1,996 @@
|
||||
{
|
||||
"type": "excalidraw",
|
||||
"version": 2,
|
||||
"source": "https://excalidraw.com",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 4858,
|
||||
"versionNonce": 83494474,
|
||||
"isDeleted": false,
|
||||
"id": "1iE4X4trkcbtJpCDC5ajY",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 27.525089187647836,
|
||||
"y": -558.1200877100962,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 227.65938859429855,
|
||||
"height": 57.830603028426594,
|
||||
"seed": 1321467630,
|
||||
"groupIds": [
|
||||
"MnVd9k06uFuFRzqXmnEvR",
|
||||
"NFKrTdLl_zy4zOvDGWVBD"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "qROQdhT3FWGzgS0JOQXlg",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1691411991785,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 5224,
|
||||
"versionNonce": 1682430806,
|
||||
"isDeleted": false,
|
||||
"id": "ZiUda1q4lvcNM9G2Or_d7",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 39.103253497881326,
|
||||
"y": -548.6024245205953,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "#343a40",
|
||||
"width": 210.71665954589844,
|
||||
"height": 40,
|
||||
"seed": 2050033394,
|
||||
"groupIds": [
|
||||
"NFKrTdLl_zy4zOvDGWVBD"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "qROQdhT3FWGzgS0JOQXlg",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1691411991785,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": "- Semantic, Keyword, Hybrid\n- Search with SQL",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "- Semantic, Keyword, Hybrid\n- Search with SQL",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 35
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 2527,
|
||||
"versionNonce": 2136048394,
|
||||
"isDeleted": false,
|
||||
"id": "i9TRMGNTF_ckjPiI7BrdL",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 358.6031681551546,
|
||||
"y": -598.4332496538902,
|
||||
"strokeColor": "#868e96",
|
||||
"backgroundColor": "#e9ecef",
|
||||
"width": 348.08489527005264,
|
||||
"height": 200.0037909410919,
|
||||
"seed": 1867912238,
|
||||
"groupIds": [
|
||||
"cNL6-_r-I9wctWvuw8DqS"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "viSfAjT-8KRTYvsrunjfn",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"id": "CJaOip-NXs_WGJ3YnzrzX",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"id": "sf5i6bxPYE2ykeh2wWm8m",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1691411996548,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1915,
|
||||
"versionNonce": 211681430,
|
||||
"isDeleted": false,
|
||||
"id": "F1r0Plm7hDaeNndIwZAuf",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 368.61999967371725,
|
||||
"y": -538.0801566026939,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 160.26930429700263,
|
||||
"height": 62.605196991016655,
|
||||
"seed": 436869746,
|
||||
"groupIds": [
|
||||
"cNL6-_r-I9wctWvuw8DqS"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "gw7zjxlDiAjodT1x1_fv_"
|
||||
},
|
||||
{
|
||||
"id": "qROQdhT3FWGzgS0JOQXlg",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"id": "viSfAjT-8KRTYvsrunjfn",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1691411991785,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 1897,
|
||||
"versionNonce": 347110346,
|
||||
"isDeleted": false,
|
||||
"id": "gw7zjxlDiAjodT1x1_fv_",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 406.8879869357439,
|
||||
"y": -522.695916613224,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 83.73332977294922,
|
||||
"height": 31.836717012076832,
|
||||
"seed": 1023300530,
|
||||
"groupIds": [
|
||||
"cNL6-_r-I9wctWvuw8DqS"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1691411991785,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 25.469373609661467,
|
||||
"fontFamily": 1,
|
||||
"text": "Sparse",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "F1r0Plm7hDaeNndIwZAuf",
|
||||
"originalText": "Sparse",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 22
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 2272,
|
||||
"versionNonce": 696090070,
|
||||
"isDeleted": false,
|
||||
"id": "55xWndBPWTiyUuLIS_J8b",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 369.8721036135376,
|
||||
"y": -469.46654385239594,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 157.76509641736197,
|
||||
"height": 57.59678123173532,
|
||||
"seed": 1317384558,
|
||||
"groupIds": [
|
||||
"cNL6-_r-I9wctWvuw8DqS"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "Qaeh-leNa7YgcPsQbfBcq"
|
||||
},
|
||||
{
|
||||
"id": "qROQdhT3FWGzgS0JOQXlg",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"id": "viSfAjT-8KRTYvsrunjfn",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"id": "CJaOip-NXs_WGJ3YnzrzX",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1691411991785,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 2210,
|
||||
"versionNonce": 1434612362,
|
||||
"isDeleted": false,
|
||||
"id": "Qaeh-leNa7YgcPsQbfBcq",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 412.012986935744,
|
||||
"y": -456.59111621253714,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 73.48332977294922,
|
||||
"height": 31.84592595201767,
|
||||
"seed": 1661259762,
|
||||
"groupIds": [
|
||||
"cNL6-_r-I9wctWvuw8DqS"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1691411991785,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 25.476740761614135,
|
||||
"fontFamily": 1,
|
||||
"text": "Dense",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "55xWndBPWTiyUuLIS_J8b",
|
||||
"originalText": "Dense",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 22
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 2356,
|
||||
"versionNonce": 268129046,
|
||||
"isDeleted": false,
|
||||
"id": "KSf88Asx9gne1WsRdsx6-",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 535.1498236698217,
|
||||
"y": -469.46654385239594,
|
||||
"strokeColor": "#ffeb3b",
|
||||
"backgroundColor": "#ffeb3b",
|
||||
"width": 156.51299247754164,
|
||||
"height": 57.59678123173532,
|
||||
"seed": 1016194418,
|
||||
"groupIds": [
|
||||
"cNL6-_r-I9wctWvuw8DqS"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "7RaoYDeBRuz16CJo7jaVO"
|
||||
},
|
||||
{
|
||||
"id": "CJaOip-NXs_WGJ3YnzrzX",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1691411991785,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 2343,
|
||||
"versionNonce": 2120716618,
|
||||
"isDeleted": false,
|
||||
"id": "7RaoYDeBRuz16CJo7jaVO",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 576.8063214344714,
|
||||
"y": -456.5934785058263,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 73.19999694824219,
|
||||
"height": 31.850650538596007,
|
||||
"seed": 1307924782,
|
||||
"groupIds": [
|
||||
"cNL6-_r-I9wctWvuw8DqS"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1691411991785,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 25.480520430876805,
|
||||
"fontFamily": 1,
|
||||
"text": "Graph",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "KSf88Asx9gne1WsRdsx6-",
|
||||
"originalText": "Graph",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 22
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 1738,
|
||||
"versionNonce": 713850966,
|
||||
"isDeleted": false,
|
||||
"id": "gAcYCRjD6VZUsDZce-atm",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 439.98992424347625,
|
||||
"y": -595.9290417742495,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "#ffeb3b",
|
||||
"width": 183.39999389648438,
|
||||
"height": 43.823637893711656,
|
||||
"seed": 1369566386,
|
||||
"groupIds": [
|
||||
"cNL6-_r-I9wctWvuw8DqS"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1691411991786,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 35.058910314969324,
|
||||
"fontFamily": 1,
|
||||
"text": "Embeddings",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "Embeddings",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 31
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 2094,
|
||||
"versionNonce": 704590410,
|
||||
"isDeleted": false,
|
||||
"id": "UEE-Z2YT9Y5YvVCJefbd0",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 533.8977197300013,
|
||||
"y": -535.8280526628736,
|
||||
"strokeColor": "#7950f2",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 160.26930429700263,
|
||||
"height": 60.10098911137599,
|
||||
"seed": 1015954930,
|
||||
"groupIds": [
|
||||
"cNL6-_r-I9wctWvuw8DqS"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "Y1uf_NH7fI6arCSGiICiX"
|
||||
},
|
||||
{
|
||||
"id": "CJaOip-NXs_WGJ3YnzrzX",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1691412007529,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 2084,
|
||||
"versionNonce": 1292240278,
|
||||
"isDeleted": false,
|
||||
"id": "Y1uf_NH7fI6arCSGiICiX",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 551.0823711155632,
|
||||
"y": -521.695916613224,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 125.9000015258789,
|
||||
"height": 31.836717012076832,
|
||||
"seed": 867545010,
|
||||
"groupIds": [
|
||||
"cNL6-_r-I9wctWvuw8DqS"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1691411991786,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 25.469373609661467,
|
||||
"fontFamily": 1,
|
||||
"text": "Database",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "UEE-Z2YT9Y5YvVCJefbd0",
|
||||
"originalText": "Database",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 22
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 4488,
|
||||
"versionNonce": 1920419530,
|
||||
"isDeleted": false,
|
||||
"id": "uV8iktEBp-zvkGceO0YNj",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 28.400291679657585,
|
||||
"y": -482.37846781152234,
|
||||
"strokeColor": "#ffeb3b",
|
||||
"backgroundColor": "#ffeb3b",
|
||||
"width": 226.65938859429855,
|
||||
"height": 53.830603028426594,
|
||||
"seed": 511161586,
|
||||
"groupIds": [
|
||||
"lsnRF8t7e-8bA4k7ZMtQs",
|
||||
"XOEGmXNmM0vVhFi_aLf0h"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "viSfAjT-8KRTYvsrunjfn",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1691411991786,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 4865,
|
||||
"versionNonce": 144499414,
|
||||
"isDeleted": false,
|
||||
"id": "VU0ZFGV4tB5pR_8AMPehi",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 38.17389738827433,
|
||||
"y": -477.32443222094344,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "#343a40",
|
||||
"width": 190.39999389648438,
|
||||
"height": 40,
|
||||
"seed": 660096690,
|
||||
"groupIds": [
|
||||
"XOEGmXNmM0vVhFi_aLf0h"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1691411991786,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": "- Topics + Relationships\n- Multimodal Indexes",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "- Topics + Relationships\n- Multimodal Indexes",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 35
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 3140,
|
||||
"versionNonce": 1465895050,
|
||||
"isDeleted": false,
|
||||
"id": "qROQdhT3FWGzgS0JOQXlg",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 0,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 357.5459819116054,
|
||||
"y": -474.380420640035,
|
||||
"strokeColor": "#868e96",
|
||||
"backgroundColor": "#e9ecef",
|
||||
"width": 101.91733646013165,
|
||||
"height": 51.182713481535075,
|
||||
"seed": 1412373166,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1691412001500,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": {
|
||||
"elementId": "55xWndBPWTiyUuLIS_J8b",
|
||||
"focus": -0.17593583244727756,
|
||||
"gap": 13.269493633705139
|
||||
},
|
||||
"endBinding": {
|
||||
"elementId": "ZiUda1q4lvcNM9G2Or_d7",
|
||||
"focus": -0.7240167179756973,
|
||||
"gap": 5.808732407693981
|
||||
},
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
-101.91733646013165,
|
||||
-51.182713481535075
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 2221,
|
||||
"versionNonce": 297446922,
|
||||
"isDeleted": false,
|
||||
"id": "viSfAjT-8KRTYvsrunjfn",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 0,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 355.69072075221885,
|
||||
"y": -473.6934438187176,
|
||||
"strokeColor": "#868e96",
|
||||
"backgroundColor": "#e9ecef",
|
||||
"width": 99.11528692741001,
|
||||
"height": 28.941684185339795,
|
||||
"seed": 769791342,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1691412005709,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": {
|
||||
"elementId": "55xWndBPWTiyUuLIS_J8b",
|
||||
"focus": 1.1614221413579826,
|
||||
"gap": 14.797915501333051
|
||||
},
|
||||
"endBinding": {
|
||||
"elementId": "uV8iktEBp-zvkGceO0YNj",
|
||||
"focus": 0.737345008582056,
|
||||
"gap": 1.5157535508527076
|
||||
},
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
-99.11528692741001,
|
||||
28.941684185339795
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 5939,
|
||||
"versionNonce": 1648005846,
|
||||
"isDeleted": false,
|
||||
"id": "CJaOip-NXs_WGJ3YnzrzX",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 0,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 780.2644916835155,
|
||||
"y": -444.3627069906215,
|
||||
"strokeColor": "#868e96",
|
||||
"backgroundColor": "#e9ecef",
|
||||
"width": 71.1891690063859,
|
||||
"height": 28.06038115974593,
|
||||
"seed": 1923467222,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1691411901454,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": {
|
||||
"elementId": "SKqPLoIsGXgDL5mhOTqLv",
|
||||
"focus": -0.634641820715333,
|
||||
"gap": 5.063962132776453
|
||||
},
|
||||
"endBinding": {
|
||||
"elementId": "UEE-Z2YT9Y5YvVCJefbd0",
|
||||
"focus": -0.06665280707924877,
|
||||
"gap": 15.270023644140622
|
||||
},
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": "arrow",
|
||||
"endArrowhead": null,
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
-71.1891690063859,
|
||||
-28.06038115974593
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 3429,
|
||||
"versionNonce": 348832458,
|
||||
"isDeleted": false,
|
||||
"id": "7UwPwHCm_ZiMJb1o0x5A8",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 783.2131987136702,
|
||||
"y": -574.1983152922421,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 272.0848952700526,
|
||||
"height": 73.0037909410919,
|
||||
"seed": 155582550,
|
||||
"groupIds": [
|
||||
"kgkwY28q5i7W008rJksMR",
|
||||
"TqYTD07S3yHeAVJOG3yyi"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1691411901455,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 1591,
|
||||
"versionNonce": 72296150,
|
||||
"isDeleted": false,
|
||||
"id": "fFWZLl9F8IwK5QhXlAssA",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 792.6342330724652,
|
||||
"y": -569.5895346298003,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "#343a40",
|
||||
"width": 77.1500015258789,
|
||||
"height": 20,
|
||||
"seed": 543556438,
|
||||
"groupIds": [
|
||||
"TqYTD07S3yHeAVJOG3yyi"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "CJaOip-NXs_WGJ3YnzrzX",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1691411901455,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": " Prompt >",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": " Prompt >",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 15
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 1341,
|
||||
"versionNonce": 450634262,
|
||||
"isDeleted": false,
|
||||
"id": "FgFcgIY3s9iRdPKwN4t_r",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 785.1996772966362,
|
||||
"y": -548.1590294764883,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "#343a40",
|
||||
"width": 261.5,
|
||||
"height": 41.41205162166277,
|
||||
"seed": 423650058,
|
||||
"groupIds": [
|
||||
"TqYTD07S3yHeAVJOG3yyi"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1691412007529,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16.56482064866511,
|
||||
"fontFamily": 1,
|
||||
"text": " Answer the following question\n using the context below",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": " Answer the following question\n using the context below",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 35
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 3467,
|
||||
"versionNonce": 1420811286,
|
||||
"isDeleted": false,
|
||||
"id": "_8pPaWBfdkvpd8B9PQ7wI",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 784.2131987136702,
|
||||
"y": -487.1983152922421,
|
||||
"strokeColor": "#6741d9",
|
||||
"backgroundColor": "#6741d9",
|
||||
"width": 272.0848952700526,
|
||||
"height": 73.0037909410919,
|
||||
"seed": 2066566410,
|
||||
"groupIds": [
|
||||
"FtTm_MWbxe67f2n84saes",
|
||||
"3PAnqhix8z46z6JRJjAO7"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 3
|
||||
},
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "CJaOip-NXs_WGJ3YnzrzX",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1691411901455,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 1602,
|
||||
"versionNonce": 1943803978,
|
||||
"isDeleted": false,
|
||||
"id": "apAxY8HSw8w2lfLe1pCXP",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 792.7130504007473,
|
||||
"y": -482.33339890257247,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "#6741d9",
|
||||
"width": 75.73332977294922,
|
||||
"height": 20,
|
||||
"seed": 1870973578,
|
||||
"groupIds": [
|
||||
"3PAnqhix8z46z6JRJjAO7"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1691411901455,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": " Search >",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": " Search >",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 15
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 1069,
|
||||
"versionNonce": 1506273622,
|
||||
"isDeleted": false,
|
||||
"id": "SKqPLoIsGXgDL5mhOTqLv",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 785.3284538162922,
|
||||
"y": -458.46265045437633,
|
||||
"strokeColor": "#1e1e1e",
|
||||
"backgroundColor": "#6741d9",
|
||||
"width": 251.21665954589844,
|
||||
"height": 41.82578128069407,
|
||||
"seed": 1533237462,
|
||||
"groupIds": [
|
||||
"3PAnqhix8z46z6JRJjAO7"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "CJaOip-NXs_WGJ3YnzrzX",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1691411901455,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16.730312512277628,
|
||||
"fontFamily": 1,
|
||||
"text": " SELECT ... FROM txtai\n WHERE SIMILAR('question')",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": " SELECT ... FROM txtai\n WHERE SIMILAR('question')",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 35
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 5999,
|
||||
"versionNonce": 1002058634,
|
||||
"isDeleted": false,
|
||||
"id": "sf5i6bxPYE2ykeh2wWm8m",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 2,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 0,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 780.8522503409429,
|
||||
"y": -537.8502934180265,
|
||||
"strokeColor": "#868e96",
|
||||
"backgroundColor": "#e9ecef",
|
||||
"width": 72.32385186561339,
|
||||
"height": 64.0647548382936,
|
||||
"seed": 1598499018,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1691412007529,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": null,
|
||||
"endBinding": null,
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": "arrow",
|
||||
"endArrowhead": null,
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
-72.32385186561339,
|
||||
64.0647548382936
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
"appState": {
|
||||
"gridSize": null,
|
||||
"viewBackgroundColor": "#ffffff"
|
||||
},
|
||||
"files": {}
|
||||
}
|
||||
|
After Width: | Height: | Size: 422 KiB |
|
After Width: | Height: | Size: 112 KiB |
@@ -0,0 +1,379 @@
|
||||
{
|
||||
"type": "excalidraw",
|
||||
"version": 2,
|
||||
"source": "https://excalidraw.com",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 3062,
|
||||
"versionNonce": 456539957,
|
||||
"isDeleted": false,
|
||||
"id": "Ufh5VUA3qmvJowuFyEWz4",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 570.7515859513394,
|
||||
"y": 59.768341009859626,
|
||||
"strokeColor": "#d0d9dd",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 719.330217768941,
|
||||
"height": 100.49478848195537,
|
||||
"seed": 2109972213,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688312603126,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1798,
|
||||
"versionNonce": 1560857173,
|
||||
"isDeleted": false,
|
||||
"id": "NDWbJgM53uVck-LSQzD-0",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 740.6664767795138,
|
||||
"y": 67.92614920483035,
|
||||
"strokeColor": "#ffeb3b",
|
||||
"backgroundColor": "#ffeb3b",
|
||||
"width": 85,
|
||||
"height": 84.17917209201391,
|
||||
"seed": 1782446165,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "0VztU7lb7T9I5zoL2LjLt"
|
||||
}
|
||||
],
|
||||
"updated": 1688312605190,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 385,
|
||||
"versionNonce": 1280754907,
|
||||
"isDeleted": false,
|
||||
"id": "0VztU7lb7T9I5zoL2LjLt",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 745.6664767795138,
|
||||
"y": 99.51573525083731,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 75,
|
||||
"height": 21,
|
||||
"seed": 2095457717,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688312605190,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": "Container",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "NDWbJgM53uVck-LSQzD-0",
|
||||
"originalText": "Container",
|
||||
"lineHeight": 1.3125,
|
||||
"baseline": 15
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1874,
|
||||
"versionNonce": 847689653,
|
||||
"isDeleted": false,
|
||||
"id": "rr3YJsAyrrPqZbZ4qXh5x",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1175.874140249897,
|
||||
"y": 67.92614920483035,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 85,
|
||||
"height": 84.17917209201391,
|
||||
"seed": 1491183381,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "9NBdG6TyrBqjuDKvzAZXN",
|
||||
"type": "text"
|
||||
}
|
||||
],
|
||||
"updated": 1688312605190,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 456,
|
||||
"versionNonce": 1820291451,
|
||||
"isDeleted": false,
|
||||
"id": "9NBdG6TyrBqjuDKvzAZXN",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1180.874140249897,
|
||||
"y": 99.51573525083731,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 75,
|
||||
"height": 21,
|
||||
"seed": 547748981,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688312605190,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": "Container",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "rr3YJsAyrrPqZbZ4qXh5x",
|
||||
"originalText": "Container",
|
||||
"lineHeight": 1.3125,
|
||||
"baseline": 15
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1864,
|
||||
"versionNonce": 1889532181,
|
||||
"isDeleted": false,
|
||||
"id": "ji9UBE590YJ5e8DKUKbPG",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 598.874140249897,
|
||||
"y": 67.92614920483035,
|
||||
"strokeColor": "#ff7043",
|
||||
"backgroundColor": "#ff7043",
|
||||
"width": 85,
|
||||
"height": 84.17917209201391,
|
||||
"seed": 200844757,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "2fdy7dRwF7ZVaYPrb1Q7p",
|
||||
"type": "text"
|
||||
}
|
||||
],
|
||||
"updated": 1688312605190,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 446,
|
||||
"versionNonce": 673810971,
|
||||
"isDeleted": false,
|
||||
"id": "2fdy7dRwF7ZVaYPrb1Q7p",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 603.874140249897,
|
||||
"y": 99.51573525083731,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 75,
|
||||
"height": 21,
|
||||
"seed": 1039082293,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688312605190,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": "Container",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "ji9UBE590YJ5e8DKUKbPG",
|
||||
"originalText": "Container",
|
||||
"lineHeight": 1.3125,
|
||||
"baseline": 15
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1805,
|
||||
"versionNonce": 281677429,
|
||||
"isDeleted": false,
|
||||
"id": "Kod3erHdgkFtJcsgqHeQQ",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 889.874140249897,
|
||||
"y": 67.92614920483035,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 85,
|
||||
"height": 84.17917209201391,
|
||||
"seed": 1525609621,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "vA5QfvPySVZE9WnP6d7dp",
|
||||
"type": "text"
|
||||
}
|
||||
],
|
||||
"updated": 1688312605190,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 390,
|
||||
"versionNonce": 1682411195,
|
||||
"isDeleted": false,
|
||||
"id": "vA5QfvPySVZE9WnP6d7dp",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 894.874140249897,
|
||||
"y": 99.51573525083731,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 75,
|
||||
"height": 21,
|
||||
"seed": 1588435445,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688312605190,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": "Container",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "Kod3erHdgkFtJcsgqHeQQ",
|
||||
"originalText": "Container",
|
||||
"lineHeight": 1.3125,
|
||||
"baseline": 15
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1916,
|
||||
"versionNonce": 1103787989,
|
||||
"isDeleted": false,
|
||||
"id": "8p_AIsxC6UbaWESkrwl4g",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1035.874140249897,
|
||||
"y": 67.92614920483035,
|
||||
"strokeColor": "#7950f2",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 85,
|
||||
"height": 84.17917209201391,
|
||||
"seed": 842044245,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "AceuLTPujneYjRp_njhIl",
|
||||
"type": "text"
|
||||
}
|
||||
],
|
||||
"updated": 1688312605190,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 499,
|
||||
"versionNonce": 1132199771,
|
||||
"isDeleted": false,
|
||||
"id": "AceuLTPujneYjRp_njhIl",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1041.907473074604,
|
||||
"y": 99.51573525083731,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 72.93333435058594,
|
||||
"height": 21,
|
||||
"seed": 30236853,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688312605190,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": "Container",
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "8p_AIsxC6UbaWESkrwl4g",
|
||||
"originalText": "Container",
|
||||
"lineHeight": 1.3125,
|
||||
"baseline": 15
|
||||
}
|
||||
],
|
||||
"appState": {
|
||||
"gridSize": null,
|
||||
"viewBackgroundColor": "#ffffff"
|
||||
},
|
||||
"files": {}
|
||||
}
|
||||
|
After Width: | Height: | Size: 112 KiB |
|
After Width: | Height: | Size: 850 KiB |
@@ -0,0 +1,513 @@
|
||||
{
|
||||
"type": "excalidraw",
|
||||
"version": 2,
|
||||
"source": "https://excalidraw.com",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 824,
|
||||
"versionNonce": 1352316119,
|
||||
"isDeleted": false,
|
||||
"id": "U2NgEIEiFpAlwmv5Xnyzr",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 50,
|
||||
"angle": 0,
|
||||
"x": 557.5,
|
||||
"y": 267.30499999999995,
|
||||
"strokeColor": "#7950f2",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 995.3286713286714,
|
||||
"height": 339.0000000000001,
|
||||
"seed": 1946478225,
|
||||
"groupIds": [
|
||||
"C_65R9XVeMQED2nMfIW2D"
|
||||
],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673788613149,
|
||||
"link": "",
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 607,
|
||||
"versionNonce": 590931993,
|
||||
"isDeleted": false,
|
||||
"id": "fbSO8bnZmAdvIXZxBAtHY",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 572.7237762237763,
|
||||
"y": 281.50080419580416,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 967,
|
||||
"height": 312,
|
||||
"seed": 1586673137,
|
||||
"groupIds": [
|
||||
"C_65R9XVeMQED2nMfIW2D"
|
||||
],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673788613149,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 20.27972027972028,
|
||||
"fontFamily": 1,
|
||||
"text": "Query Best Match\n----------------------------------------------------\nfeel good story Maine man wins $1M from $25 lottery ticket\nclimate change Canada's last fully intact ice shelf has suddenly collapsed, forming a \n Manhattan-sized iceberg\npublic health story US tops 5 million confirmed virus cases\nwar Beijing mobilises invasion craft along coast as Taiwan tensions escalate\nwildlife The National Park Service warns against sacrificing slower friends in a\n bear attack\nasia Beijing mobilises invasion craft along coast as Taiwan tensions escalate\nlucky Maine man wins $1M from $25 lottery ticket\ndishonest junk Make huge profits without work, earn up to $100,000 a day",
|
||||
"baseline": 304,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "Query Best Match\n----------------------------------------------------\nfeel good story Maine man wins $1M from $25 lottery ticket\nclimate change Canada's last fully intact ice shelf has suddenly collapsed, forming a \n Manhattan-sized iceberg\npublic health story US tops 5 million confirmed virus cases\nwar Beijing mobilises invasion craft along coast as Taiwan tensions escalate\nwildlife The National Park Service warns against sacrificing slower friends in a\n bear attack\nasia Beijing mobilises invasion craft along coast as Taiwan tensions escalate\nlucky Maine man wins $1M from $25 lottery ticket\ndishonest junk Make huge profits without work, earn up to $100,000 a day"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 990,
|
||||
"versionNonce": 2000421367,
|
||||
"isDeleted": false,
|
||||
"id": "UO6MS3wSDu7yg2421__LI",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 935,
|
||||
"y": 109,
|
||||
"strokeColor": "#ffeb3b",
|
||||
"backgroundColor": "#ffeb3b",
|
||||
"width": 214,
|
||||
"height": 49,
|
||||
"seed": 1629565989,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "8sp7H8ijWBlh6aMgZ0XTP"
|
||||
},
|
||||
{
|
||||
"id": "Qzp41i_jzQIBlAB_qFKFH",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"id": "SJ0F0Y81z9hir5qQWAJjk",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1673788613149,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1649,
|
||||
"versionNonce": 1978562009,
|
||||
"isDeleted": false,
|
||||
"id": "qYd3q0Vjks7VOHUC9RR51",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 551,
|
||||
"y": 109.5,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 219,
|
||||
"height": 52,
|
||||
"seed": 1441952427,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "WPeWn6N4rCHf0jY16N9Ge"
|
||||
},
|
||||
{
|
||||
"id": "Qzp41i_jzQIBlAB_qFKFH",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1673788613149,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 1336,
|
||||
"versionNonce": 1274169655,
|
||||
"isDeleted": false,
|
||||
"id": "WPeWn6N4rCHf0jY16N9Ge",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 597.5,
|
||||
"y": 117.5,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 126,
|
||||
"height": 36,
|
||||
"seed": 870516459,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673788618421,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Vectorize",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "qYd3q0Vjks7VOHUC9RR51",
|
||||
"originalText": "Vectorize"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1236,
|
||||
"versionNonce": 368709975,
|
||||
"isDeleted": false,
|
||||
"id": "5VuUdI_BsJ5pyE1nTqJUI",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1334,
|
||||
"y": 110,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 218,
|
||||
"height": 49,
|
||||
"seed": 1044404613,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "bJJ9SGsJsvT071qBBH0w5",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "SJ0F0Y81z9hir5qQWAJjk",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1673788613149,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 1420,
|
||||
"versionNonce": 1511737785,
|
||||
"isDeleted": false,
|
||||
"id": "bJJ9SGsJsvT071qBBH0w5",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1397,
|
||||
"y": 116.5,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 92,
|
||||
"height": 36,
|
||||
"seed": 128953675,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673788618421,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Search",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "5VuUdI_BsJ5pyE1nTqJUI",
|
||||
"originalText": "Search"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 981,
|
||||
"versionNonce": 1600260695,
|
||||
"isDeleted": false,
|
||||
"id": "8sp7H8ijWBlh6aMgZ0XTP",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1004,
|
||||
"y": 115.5,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 76,
|
||||
"height": 36,
|
||||
"seed": 1854823263,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673788618422,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Index",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "UO6MS3wSDu7yg2421__LI",
|
||||
"originalText": "Index"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 420,
|
||||
"versionNonce": 1275651991,
|
||||
"isDeleted": false,
|
||||
"id": "jWJpSXHkTCzRTCA4tbAgv",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 550.5,
|
||||
"y": 189.30499999999995,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 296,
|
||||
"height": 42,
|
||||
"seed": 1241563487,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673788613150,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": "- Transform input into numbers\n- Similar concepts have similar values",
|
||||
"baseline": 36,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "- Transform input into numbers\n- Similar concepts have similar values"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 419,
|
||||
"versionNonce": 51134809,
|
||||
"isDeleted": false,
|
||||
"id": "qEnmXs0P_MQE8r4c4OWGh",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 933.5,
|
||||
"y": 188.20749999999992,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#f44336",
|
||||
"width": 230,
|
||||
"height": 42,
|
||||
"seed": 1038536465,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673788613150,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": "- Save vectors\n- Store content with vectors",
|
||||
"baseline": 36,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "- Save vectors\n- Store content with vectors"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 529,
|
||||
"versionNonce": 869653687,
|
||||
"isDeleted": false,
|
||||
"id": "1q8bzjK8lnKUZj8_A9v7D",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1245,
|
||||
"y": 191.20749999999992,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#f44336",
|
||||
"width": 333,
|
||||
"height": 42,
|
||||
"seed": 304472945,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673788613150,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": "- Find similar vectors with cosine similarity\n- Add rule-based filters using content",
|
||||
"baseline": 36,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "- Find similar vectors with cosine similarity\n- Add rule-based filters using content"
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 1935,
|
||||
"versionNonce": 20011767,
|
||||
"isDeleted": false,
|
||||
"id": "Qzp41i_jzQIBlAB_qFKFH",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 772.5,
|
||||
"y": 131.8470411964629,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#f44336",
|
||||
"width": 158.1310513485223,
|
||||
"height": 0.5692601572380909,
|
||||
"seed": 660786897,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1673788613309,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": {
|
||||
"elementId": "qYd3q0Vjks7VOHUC9RR51",
|
||||
"focus": -0.15367587596362536,
|
||||
"gap": 2.5
|
||||
},
|
||||
"endBinding": {
|
||||
"elementId": "UO6MS3wSDu7yg2421__LI",
|
||||
"focus": 0.027437144815141,
|
||||
"gap": 4.3689486514776945
|
||||
},
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
158.1310513485223,
|
||||
0.5692601572380909
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 2084,
|
||||
"versionNonce": 1180230679,
|
||||
"isDeleted": false,
|
||||
"id": "SJ0F0Y81z9hir5qQWAJjk",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1151.5,
|
||||
"y": 134.67907617019108,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#f44336",
|
||||
"width": 181.5,
|
||||
"height": 1.5898915058209013,
|
||||
"seed": 899541905,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1673788613309,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": {
|
||||
"elementId": "UO6MS3wSDu7yg2421__LI",
|
||||
"focus": 0.08406032225724415,
|
||||
"gap": 2.5
|
||||
},
|
||||
"endBinding": {
|
||||
"elementId": "5VuUdI_BsJ5pyE1nTqJUI",
|
||||
"focus": 0.09327847520504394,
|
||||
"gap": 1
|
||||
},
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
181.5,
|
||||
-1.5898915058209013
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
"appState": {
|
||||
"gridSize": null,
|
||||
"viewBackgroundColor": "#ffffff"
|
||||
},
|
||||
"files": {}
|
||||
}
|
||||
|
After Width: | Height: | Size: 846 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 62 KiB |
@@ -0,0 +1,367 @@
|
||||
{
|
||||
"type": "excalidraw",
|
||||
"version": 2,
|
||||
"source": "https://excalidraw.com",
|
||||
"elements": [
|
||||
{
|
||||
"type": "ellipse",
|
||||
"version": 236,
|
||||
"versionNonce": 266746677,
|
||||
"isDeleted": false,
|
||||
"id": "pLSV--mc1HnQu2oyARr4o",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 593.4166948358098,
|
||||
"y": -409.48426474916266,
|
||||
"strokeColor": "#ff7043",
|
||||
"backgroundColor": "#ff7043",
|
||||
"width": 100,
|
||||
"height": 92,
|
||||
"seed": 513066133,
|
||||
"groupIds": [
|
||||
"agHSoiBea3xOkqCmOPa91",
|
||||
"dKeNjYUtPsZHi90BFF7EY"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1688313196175,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 281,
|
||||
"versionNonce": 1964375707,
|
||||
"isDeleted": false,
|
||||
"id": "n2qByon4fJyq2-FZxQqM0",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 629.5250284234563,
|
||||
"y": -397.41226924952065,
|
||||
"strokeColor": "#ff7043",
|
||||
"backgroundColor": "#2e303e",
|
||||
"width": 29.78333282470704,
|
||||
"height": 79.856009000716,
|
||||
"seed": 852571451,
|
||||
"groupIds": [
|
||||
"agHSoiBea3xOkqCmOPa91",
|
||||
"dKeNjYUtPsZHi90BFF7EY"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688313196175,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 63.88480720057278,
|
||||
"fontFamily": 1,
|
||||
"text": "?",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "?",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 56
|
||||
},
|
||||
{
|
||||
"type": "ellipse",
|
||||
"version": 288,
|
||||
"versionNonce": 239275157,
|
||||
"isDeleted": false,
|
||||
"id": "QIRNCrcWupjspegQn6VDV",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 744.4166948358098,
|
||||
"y": -409.48426474916266,
|
||||
"strokeColor": "#ffeb3b",
|
||||
"backgroundColor": "#ffeb3b",
|
||||
"width": 100,
|
||||
"height": 92,
|
||||
"seed": 1498649243,
|
||||
"groupIds": [
|
||||
"yonc0SR8jSwQLwuVvb9hG",
|
||||
"dKeNjYUtPsZHi90BFF7EY"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1688313196175,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 372,
|
||||
"versionNonce": 1982180597,
|
||||
"isDeleted": false,
|
||||
"id": "a-CPMQS9ApW4f7p9FjS8m",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 780.5250284234563,
|
||||
"y": -397.41226924952065,
|
||||
"strokeColor": "#ffd43b",
|
||||
"backgroundColor": "#ffeb3b",
|
||||
"width": 29.78333282470704,
|
||||
"height": 79.856009000716,
|
||||
"seed": 1679591227,
|
||||
"groupIds": [
|
||||
"yonc0SR8jSwQLwuVvb9hG",
|
||||
"dKeNjYUtPsZHi90BFF7EY"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688313209123,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 63.88480720057278,
|
||||
"fontFamily": 1,
|
||||
"text": "?",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "?",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 56
|
||||
},
|
||||
{
|
||||
"type": "ellipse",
|
||||
"version": 326,
|
||||
"versionNonce": 1069462005,
|
||||
"isDeleted": false,
|
||||
"id": "nsYgl7js3PjMKKTKcLYf1",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 895.4166948358098,
|
||||
"y": -409.48426474916266,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 100,
|
||||
"height": 92,
|
||||
"seed": 384682581,
|
||||
"groupIds": [
|
||||
"M7MHx-aSMrw_q1mhaAuG6",
|
||||
"dKeNjYUtPsZHi90BFF7EY"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1688313196175,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 371,
|
||||
"versionNonce": 641029083,
|
||||
"isDeleted": false,
|
||||
"id": "a_CBcLegs1ZMstjO9f4bx",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 931.5250284234563,
|
||||
"y": -397.41226924952065,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 29.78333282470704,
|
||||
"height": 79.856009000716,
|
||||
"seed": 1741404085,
|
||||
"groupIds": [
|
||||
"M7MHx-aSMrw_q1mhaAuG6",
|
||||
"dKeNjYUtPsZHi90BFF7EY"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688313196175,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 63.88480720057278,
|
||||
"fontFamily": 1,
|
||||
"text": "?",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "?",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 56
|
||||
},
|
||||
{
|
||||
"type": "ellipse",
|
||||
"version": 328,
|
||||
"versionNonce": 22981461,
|
||||
"isDeleted": false,
|
||||
"id": "l88Tj2DPIgTUA2Pij6hPA",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1046.4166948358097,
|
||||
"y": -409.48426474916266,
|
||||
"strokeColor": "#7950f2",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 100,
|
||||
"height": 92,
|
||||
"seed": 701954677,
|
||||
"groupIds": [
|
||||
"vFCiKG5iTbg2K5S2WQSsn",
|
||||
"dKeNjYUtPsZHi90BFF7EY"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1688313196175,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 373,
|
||||
"versionNonce": 1236541563,
|
||||
"isDeleted": false,
|
||||
"id": "oqmBYU6SpmJhOl9d1JLJy",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1082.5250284234562,
|
||||
"y": -397.41226924952065,
|
||||
"strokeColor": "#7950f2",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 29.78333282470704,
|
||||
"height": 79.856009000716,
|
||||
"seed": 39445461,
|
||||
"groupIds": [
|
||||
"vFCiKG5iTbg2K5S2WQSsn",
|
||||
"dKeNjYUtPsZHi90BFF7EY"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688313196175,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 63.88480720057278,
|
||||
"fontFamily": 1,
|
||||
"text": "?",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "?",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 56
|
||||
},
|
||||
{
|
||||
"type": "ellipse",
|
||||
"version": 329,
|
||||
"versionNonce": 1937275061,
|
||||
"isDeleted": false,
|
||||
"id": "IFZTHrjZaEk7Avy2zkma-",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1197.4166948358097,
|
||||
"y": -409.48426474916266,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 100,
|
||||
"height": 92,
|
||||
"seed": 894921429,
|
||||
"groupIds": [
|
||||
"70qQx7edpvpMfsvEta9mo",
|
||||
"dKeNjYUtPsZHi90BFF7EY"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1688313196175,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 374,
|
||||
"versionNonce": 2029017371,
|
||||
"isDeleted": false,
|
||||
"id": "p0xoCeTYO1ZVy-xm2oET3",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1233.5250284234562,
|
||||
"y": -397.41226924952065,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 29.78333282470704,
|
||||
"height": 79.856009000716,
|
||||
"seed": 959268917,
|
||||
"groupIds": [
|
||||
"70qQx7edpvpMfsvEta9mo",
|
||||
"dKeNjYUtPsZHi90BFF7EY"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688313196175,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 63.88480720057278,
|
||||
"fontFamily": 1,
|
||||
"text": "?",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "?",
|
||||
"lineHeight": 1.25,
|
||||
"baseline": 56
|
||||
}
|
||||
],
|
||||
"appState": {
|
||||
"gridSize": null,
|
||||
"viewBackgroundColor": "#ffffff"
|
||||
},
|
||||
"files": {}
|
||||
}
|
||||
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 289 KiB |
@@ -0,0 +1,793 @@
|
||||
{
|
||||
"type": "excalidraw",
|
||||
"version": 2,
|
||||
"source": "https://excalidraw.com",
|
||||
"elements": [
|
||||
{
|
||||
"type": "text",
|
||||
"version": 603,
|
||||
"versionNonce": 1883892902,
|
||||
"isDeleted": false,
|
||||
"id": "Buic2Lx427wuSIW8P_Rw5",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 714,
|
||||
"y": 141,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#228be6",
|
||||
"width": 532,
|
||||
"height": 46,
|
||||
"seed": 373648901,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 36,
|
||||
"fontFamily": 1,
|
||||
"text": "What are semantic workflows?",
|
||||
"baseline": 32,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "What are semantic workflows?"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1671,
|
||||
"versionNonce": 51714234,
|
||||
"isDeleted": false,
|
||||
"id": "qYd3q0Vjks7VOHUC9RR51",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 425,
|
||||
"y": 339.5,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 290.0000000000001,
|
||||
"height": 46,
|
||||
"seed": 1441952427,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "WPeWn6N4rCHf0jY16N9Ge"
|
||||
}
|
||||
],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 323,
|
||||
"versionNonce": 921790438,
|
||||
"isDeleted": false,
|
||||
"id": "tgnQzXC9s8RY4oImBOXuB",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 562.5285999651802,
|
||||
"y": 272.4578674923631,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#228be6",
|
||||
"width": 0.4714000348197942,
|
||||
"height": 72.5421325076369,
|
||||
"seed": 650463755,
|
||||
"groupIds": [],
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": {
|
||||
"elementId": "B435ajoI5vAQBDvzkd8aY",
|
||||
"focus": 0.05963733900881362,
|
||||
"gap": 5.457867492363107
|
||||
},
|
||||
"endBinding": null,
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0.4714000348197942,
|
||||
72.5421325076369
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 1359,
|
||||
"versionNonce": 2032529786,
|
||||
"isDeleted": false,
|
||||
"id": "WPeWn6N4rCHf0jY16N9Ge",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 430,
|
||||
"y": 344.5,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 280,
|
||||
"height": 36,
|
||||
"seed": 870516459,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Translate",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "qYd3q0Vjks7VOHUC9RR51",
|
||||
"originalText": "Translate"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 180,
|
||||
"versionNonce": 159873830,
|
||||
"isDeleted": false,
|
||||
"id": "IxMxusRKX2PpnJT1uY0cC",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 819,
|
||||
"y": 217.5,
|
||||
"strokeColor": "#ffeb3b",
|
||||
"backgroundColor": "#ffeb3b",
|
||||
"width": 290.0000000000001,
|
||||
"height": 49,
|
||||
"seed": 1364021803,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "SSXjX_URKvcVC8h-Qgz4j"
|
||||
},
|
||||
{
|
||||
"id": "_YNRYTAnVzdhhKxFtkVyg",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 85,
|
||||
"versionNonce": 1360900666,
|
||||
"isDeleted": false,
|
||||
"id": "SSXjX_URKvcVC8h-Qgz4j",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 824,
|
||||
"y": 224,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#82c91e",
|
||||
"width": 280,
|
||||
"height": 36,
|
||||
"seed": 948915563,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Extract Text",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "IxMxusRKX2PpnJT1uY0cC",
|
||||
"originalText": "Extract Text"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 217,
|
||||
"versionNonce": 511256166,
|
||||
"isDeleted": false,
|
||||
"id": "lATIKISgJPOGnUHleuFRH",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 821,
|
||||
"y": 338,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 290.0000000000001,
|
||||
"height": 46,
|
||||
"seed": 1256311595,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "21WiUuyDtpQ9FnJ74REpJ",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "Q51e0Hav-kYfjX3b8tt-r",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 96,
|
||||
"versionNonce": 2111789818,
|
||||
"isDeleted": false,
|
||||
"id": "21WiUuyDtpQ9FnJ74REpJ",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 826,
|
||||
"y": 343,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 280,
|
||||
"height": 36,
|
||||
"seed": 626266373,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Summarize",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "lATIKISgJPOGnUHleuFRH",
|
||||
"originalText": "Summarize"
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 162,
|
||||
"versionNonce": 1452501414,
|
||||
"isDeleted": false,
|
||||
"id": "_YNRYTAnVzdhhKxFtkVyg",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 962.2340210300499,
|
||||
"y": 270,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#228be6",
|
||||
"width": 0.2659789699500834,
|
||||
"height": 75,
|
||||
"seed": 101249451,
|
||||
"groupIds": [],
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": {
|
||||
"elementId": "IxMxusRKX2PpnJT1uY0cC",
|
||||
"focus": 0.012856281024868153,
|
||||
"gap": 3.5
|
||||
},
|
||||
"endBinding": null,
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0.2659789699500834,
|
||||
75
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 225,
|
||||
"versionNonce": 502131642,
|
||||
"isDeleted": false,
|
||||
"id": "6B3J0wJfi561c9gMsgtXG",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 824,
|
||||
"y": 455,
|
||||
"strokeColor": "#7950f2",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 290.0000000000001,
|
||||
"height": 46,
|
||||
"seed": 1164190923,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "qJDqmDEZF9Ewh2UrjXq5Z",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "Q51e0Hav-kYfjX3b8tt-r",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 147,
|
||||
"versionNonce": 1896039654,
|
||||
"isDeleted": false,
|
||||
"id": "qJDqmDEZF9Ewh2UrjXq5Z",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 829,
|
||||
"y": 460,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 280,
|
||||
"height": 36,
|
||||
"seed": 1307943269,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Build Vector Index",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "6B3J0wJfi561c9gMsgtXG",
|
||||
"originalText": "Build Vector Index"
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 215,
|
||||
"versionNonce": 124544122,
|
||||
"isDeleted": false,
|
||||
"id": "Q51e0Hav-kYfjX3b8tt-r",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 963.600775377322,
|
||||
"y": 387.5,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#228be6",
|
||||
"width": 0.29392358842710564,
|
||||
"height": 66.5,
|
||||
"seed": 59173285,
|
||||
"groupIds": [],
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": {
|
||||
"elementId": "lATIKISgJPOGnUHleuFRH",
|
||||
"focus": 0.015253485349599789,
|
||||
"gap": 3.5
|
||||
},
|
||||
"endBinding": {
|
||||
"elementId": "6B3J0wJfi561c9gMsgtXG",
|
||||
"focus": -0.039966641220930875,
|
||||
"gap": 1
|
||||
},
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
-0.29392358842710564,
|
||||
66.5
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1258,
|
||||
"versionNonce": 1062582310,
|
||||
"isDeleted": false,
|
||||
"id": "5VuUdI_BsJ5pyE1nTqJUI",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1195,
|
||||
"y": 221,
|
||||
"strokeColor": "#7950f2",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 290.0000000000001,
|
||||
"height": 46,
|
||||
"seed": 1044404613,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "bJJ9SGsJsvT071qBBH0w5",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "Q51e0Hav-kYfjX3b8tt-r",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 1443,
|
||||
"versionNonce": 1411237178,
|
||||
"isDeleted": false,
|
||||
"id": "bJJ9SGsJsvT071qBBH0w5",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1200,
|
||||
"y": 226,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 280,
|
||||
"height": 36,
|
||||
"seed": 128953675,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Run similarity query",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "5VuUdI_BsJ5pyE1nTqJUI",
|
||||
"originalText": "Run similarity query"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 359,
|
||||
"versionNonce": 1029930726,
|
||||
"isDeleted": false,
|
||||
"id": "pSbgtf1qAB7tWl-pTld7e",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1197,
|
||||
"y": 343,
|
||||
"strokeColor": "#ff7043",
|
||||
"backgroundColor": "#ff7043",
|
||||
"width": 290.0000000000001,
|
||||
"height": 46,
|
||||
"seed": 210689733,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "pQzKSM3audka1kiQm_Sku",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "Q51e0Hav-kYfjX3b8tt-r",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"id": "k67YzXNtt1GLh4i8Es5zJ",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1673791251799,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 320,
|
||||
"versionNonce": 660337658,
|
||||
"isDeleted": false,
|
||||
"id": "pQzKSM3audka1kiQm_Sku",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1219.5,
|
||||
"y": 348,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 245,
|
||||
"height": 36,
|
||||
"seed": 1869028363,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673791256722,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Send notifications",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "pSbgtf1qAB7tWl-pTld7e",
|
||||
"originalText": "Send notifications"
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 329,
|
||||
"versionNonce": 251216122,
|
||||
"isDeleted": false,
|
||||
"id": "k67YzXNtt1GLh4i8Es5zJ",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1339.1171359117898,
|
||||
"y": 265.5,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#228be6",
|
||||
"width": 1.0119492860442278,
|
||||
"height": 76.5,
|
||||
"seed": 1656816747,
|
||||
"groupIds": [],
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1673791249246,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": null,
|
||||
"endBinding": {
|
||||
"elementId": "pSbgtf1qAB7tWl-pTld7e",
|
||||
"focus": -0.010690950588675632,
|
||||
"gap": 1
|
||||
},
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
1.0119492860442278,
|
||||
76.5
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 320,
|
||||
"versionNonce": 407191226,
|
||||
"isDeleted": false,
|
||||
"id": "kKPPLMCj8QQIJLbW-B5hm",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1180,
|
||||
"y": 451,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#fab005",
|
||||
"width": 296,
|
||||
"height": 52,
|
||||
"seed": 1079990731,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 20,
|
||||
"fontFamily": 1,
|
||||
"text": "- API bindings for JavaScript,\n Rust, Go and Java",
|
||||
"baseline": 44,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "- API bindings for JavaScript,\n Rust, Go and Java"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 572,
|
||||
"versionNonce": 1757323750,
|
||||
"isDeleted": false,
|
||||
"id": "1AQ3rj-V4weRtPA8a5-z-",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 437.5,
|
||||
"y": 449.5,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#fab005",
|
||||
"width": 278,
|
||||
"height": 52,
|
||||
"seed": 836512075,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 20,
|
||||
"fontFamily": 1,
|
||||
"text": "- Build with Python or YAML\n- Run local or via API",
|
||||
"baseline": 44,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "- Build with Python or YAML\n- Run local or via API"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 304,
|
||||
"versionNonce": 23156602,
|
||||
"isDeleted": false,
|
||||
"id": "B435ajoI5vAQBDvzkd8aY",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 426,
|
||||
"y": 221,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 290.0000000000001,
|
||||
"height": 46,
|
||||
"seed": 942981672,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "AoGnxEHn4x-zq2-0C0VrT",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "Q51e0Hav-kYfjX3b8tt-r",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"id": "tgnQzXC9s8RY4oImBOXuB",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 183,
|
||||
"versionNonce": 1100838182,
|
||||
"isDeleted": false,
|
||||
"id": "AoGnxEHn4x-zq2-0C0VrT",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 431,
|
||||
"y": 226,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 280,
|
||||
"height": 36,
|
||||
"seed": 604886104,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673791247706,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Summarize",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "B435ajoI5vAQBDvzkd8aY",
|
||||
"originalText": "Summarize"
|
||||
}
|
||||
],
|
||||
"appState": {
|
||||
"gridSize": null,
|
||||
"viewBackgroundColor": "#3030"
|
||||
},
|
||||
"files": {}
|
||||
}
|
||||
|
After Width: | Height: | Size: 285 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 223 KiB |
|
After Width: | Height: | Size: 224 KiB |
|
After Width: | Height: | Size: 50 KiB |
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"type": "excalidraw",
|
||||
"version": 2,
|
||||
"source": "https://excalidraw.com",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1435,
|
||||
"versionNonce": 1860045045,
|
||||
"isDeleted": false,
|
||||
"id": "LgVOdCQnXRH2GYHIGLwOx",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 1.5707963267948957,
|
||||
"x": 764,
|
||||
"y": 123.99999999999991,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 20.000000000000092,
|
||||
"height": 199.99999999999991,
|
||||
"seed": 782310408,
|
||||
"groupIds": [
|
||||
"s5mCNZzJxsETmWhZoD3qR"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688311151676,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1534,
|
||||
"versionNonce": 2090527963,
|
||||
"isDeleted": false,
|
||||
"id": "GG_mFtlk6nEiYCQ8vhzjZ",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 1.5707963267948957,
|
||||
"x": 953,
|
||||
"y": 136.9999999999999,
|
||||
"strokeColor": "#ced4da",
|
||||
"backgroundColor": "#ced4da",
|
||||
"width": 17.99999999999998,
|
||||
"height": 173.99999999999994,
|
||||
"seed": 810177544,
|
||||
"groupIds": [
|
||||
"Rezl6DUXkEY8GT9kuDOQX"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688311151677,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 293,
|
||||
"versionNonce": 1618682453,
|
||||
"isDeleted": false,
|
||||
"id": "NLfZWFLgvJj3ccuF5yxD8",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 793,
|
||||
"y": 216.86805555555557,
|
||||
"strokeColor": "#343a40",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 80,
|
||||
"height": 16,
|
||||
"seed": 297813880,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688311151677,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 12.242424242424246,
|
||||
"fontFamily": 1,
|
||||
"text": "Installing.......",
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "Installing.......",
|
||||
"lineHeight": 1.3069306930693065,
|
||||
"baseline": 11
|
||||
}
|
||||
],
|
||||
"appState": {
|
||||
"gridSize": null,
|
||||
"viewBackgroundColor": "#ffffff"
|
||||
},
|
||||
"files": {}
|
||||
}
|
||||
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 230 KiB |
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,531 @@
|
||||
{
|
||||
"type": "excalidraw",
|
||||
"version": 2,
|
||||
"source": "https://excalidraw.com",
|
||||
"elements": [
|
||||
{
|
||||
"type": "line",
|
||||
"version": 1608,
|
||||
"versionNonce": 602661205,
|
||||
"isDeleted": false,
|
||||
"id": "yVN5CxzfpwAZ0J0GEsEim",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1702.2261496777674,
|
||||
"y": -5.340583377694145,
|
||||
"strokeColor": "#ffeb3b",
|
||||
"backgroundColor": "#ffeb3b",
|
||||
"width": 191.85486538200286,
|
||||
"height": 186.6125755399512,
|
||||
"seed": 1276926237,
|
||||
"groupIds": [
|
||||
"ZD4Gm6iTkUS0-nxoYPoXN"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688309214322,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": null,
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
-4.946284888409469,
|
||||
1.310194580443298
|
||||
],
|
||||
[
|
||||
-71.92848036094448,
|
||||
33.259712239166916
|
||||
],
|
||||
[
|
||||
-71.92848036094448,
|
||||
33.259712239166916
|
||||
],
|
||||
[
|
||||
-76.36916810848369,
|
||||
36.77184458512375
|
||||
],
|
||||
[
|
||||
-78.84005658267724,
|
||||
41.86612631945928
|
||||
],
|
||||
[
|
||||
-95.23551981468633,
|
||||
113.57223168992945
|
||||
],
|
||||
[
|
||||
-95.23551981468633,
|
||||
113.57223168992945
|
||||
],
|
||||
[
|
||||
-95.35947746324585,
|
||||
118.64172405287644
|
||||
],
|
||||
[
|
||||
-93.4324997019961,
|
||||
123.35061560390292
|
||||
],
|
||||
[
|
||||
-92.71129163005317,
|
||||
124.36030246259705
|
||||
],
|
||||
[
|
||||
-46.433776844719105,
|
||||
181.9006920694186
|
||||
],
|
||||
[
|
||||
-46.433776844719105,
|
||||
181.9006920694186
|
||||
],
|
||||
[
|
||||
-41.973552779866964,
|
||||
185.39027898361584
|
||||
],
|
||||
[
|
||||
-36.44504150185128,
|
||||
186.6125755399512
|
||||
],
|
||||
[
|
||||
37.77928857887258,
|
||||
186.61257553995074
|
||||
],
|
||||
[
|
||||
37.77928857887258,
|
||||
186.61257553995074
|
||||
],
|
||||
[
|
||||
43.320564233786016,
|
||||
185.34295850958426
|
||||
],
|
||||
[
|
||||
47.78003745293803,
|
||||
181.84659678914795
|
||||
],
|
||||
[
|
||||
94.03350816005033,
|
||||
124.29419365112881
|
||||
],
|
||||
[
|
||||
94.03350816005033,
|
||||
124.29419365112881
|
||||
],
|
||||
[
|
||||
96.49538791875702,
|
||||
119.21118606558457
|
||||
],
|
||||
[
|
||||
96.43753267834124,
|
||||
113.56021815873193
|
||||
],
|
||||
[
|
||||
79.9338983420456,
|
||||
41.794005010746
|
||||
],
|
||||
[
|
||||
79.9338983420456,
|
||||
41.794005010746
|
||||
],
|
||||
[
|
||||
77.45849189744823,
|
||||
36.69972327641062
|
||||
],
|
||||
[
|
||||
73.02231208993142,
|
||||
33.18759093045337
|
||||
],
|
||||
[
|
||||
6.148302879201523,
|
||||
1.3162045700933498
|
||||
],
|
||||
[
|
||||
6.148302879201523,
|
||||
1.3162045700933498
|
||||
],
|
||||
[
|
||||
-0.060096314222328626,
|
||||
-3.469446951953614e-18
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 2051,
|
||||
"versionNonce": 216616981,
|
||||
"isDeleted": false,
|
||||
"id": "ZTKEryJuyeKfeG4nAI4_e",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 2003.5691665051115,
|
||||
"y": 81.12265056081542,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 30.25969046240687,
|
||||
"height": 75.64922615601705,
|
||||
"seed": 1188509340,
|
||||
"groupIds": [
|
||||
"SFux9iuPQVutxOMe0wlW3"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688309215087,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 2192,
|
||||
"versionNonce": 1390810587,
|
||||
"isDeleted": false,
|
||||
"id": "CckqOoWddQBHuvidbpk4P",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 2066.323943610997,
|
||||
"y": 9.547190432552021,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 30.25969046240682,
|
||||
"height": 151.29845231203416,
|
||||
"seed": 331107492,
|
||||
"groupIds": [
|
||||
"SFux9iuPQVutxOMe0wlW3"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "leDc6Y5qdU0OH3j90C072",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1688308769366,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 2072,
|
||||
"versionNonce": 1184041301,
|
||||
"isDeleted": false,
|
||||
"id": "J8ox4BBdzEg-04DGRL-jh",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 2123.5254786767036,
|
||||
"y": 54.936726126162256,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 30.259690462406844,
|
||||
"height": 105.90891661842389,
|
||||
"seed": 1316437916,
|
||||
"groupIds": [
|
||||
"SFux9iuPQVutxOMe0wlW3"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "5pptt-wBgcgbxd5LUka3S",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1688308769366,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 2259,
|
||||
"versionNonce": 1727832699,
|
||||
"isDeleted": false,
|
||||
"id": "V54vdkZmQeI13AEahvNPV",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 2177.649637157211,
|
||||
"y": 22.527960822066646,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 30.25969046240682,
|
||||
"height": 136.16860708083075,
|
||||
"seed": 1025829916,
|
||||
"groupIds": [
|
||||
"SFux9iuPQVutxOMe0wlW3"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688308769366,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 442,
|
||||
"versionNonce": 1922817787,
|
||||
"isDeleted": false,
|
||||
"id": "Inol-LWi8GThocPMvSZGX",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1374.656480958798,
|
||||
"y": 99.23064378133208,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 216.36132864000353,
|
||||
"height": 0.12505261106101684,
|
||||
"seed": 1653816315,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1688309230624,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": null,
|
||||
"endBinding": null,
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
216.36132864000353,
|
||||
-0.12505261106101684
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 917,
|
||||
"versionNonce": 151223483,
|
||||
"isDeleted": false,
|
||||
"id": "5pptt-wBgcgbxd5LUka3S",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1802.88085185622,
|
||||
"y": 95.10577155105176,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#34bbde",
|
||||
"width": 184.23585514045453,
|
||||
"height": 3.170483019063738,
|
||||
"seed": 1717004827,
|
||||
"groupIds": [],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1688309218767,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": null,
|
||||
"endBinding": null,
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
184.23585514045453,
|
||||
3.170483019063738
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "line",
|
||||
"version": 4226,
|
||||
"versionNonce": 789213499,
|
||||
"isDeleted": false,
|
||||
"id": "pikmP5MLN0MZlpnSik5KN",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1235.1617590461694,
|
||||
"y": 25.06522848370164,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 127.43688004487302,
|
||||
"height": 164.47752527518452,
|
||||
"seed": 844586005,
|
||||
"groupIds": [
|
||||
"xkmNAKuTv_iYXPLj0sxbd"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1688309232141,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": null,
|
||||
"endBinding": null,
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": null,
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0.4202213858663673,
|
||||
124.31122212244284
|
||||
],
|
||||
[
|
||||
0.019665374373081804,
|
||||
138.46351494441197
|
||||
],
|
||||
[
|
||||
6.563281167657464,
|
||||
144.5785456702537
|
||||
],
|
||||
[
|
||||
29.351096662508862,
|
||||
149.75384171231534
|
||||
],
|
||||
[
|
||||
67.86895989535736,
|
||||
151.36535158937204
|
||||
],
|
||||
[
|
||||
104.67023109801114,
|
||||
148.79234001109992
|
||||
],
|
||||
[
|
||||
124.22301744981843,
|
||||
142.63902935804376
|
||||
],
|
||||
[
|
||||
126.98067338289118,
|
||||
137.45172392705157
|
||||
],
|
||||
[
|
||||
127.36797617588668,
|
||||
126.05781617962573
|
||||
],
|
||||
[
|
||||
127.06398851859365,
|
||||
10.429017682904831
|
||||
],
|
||||
[
|
||||
126.37870276277025,
|
||||
-0.4957733094390701
|
||||
],
|
||||
[
|
||||
118.19596944321839,
|
||||
-6.601710860670866
|
||||
],
|
||||
[
|
||||
100.96487933911183,
|
||||
-10.137946798406993
|
||||
],
|
||||
[
|
||||
61.697553127560816,
|
||||
-13.11217368581247
|
||||
],
|
||||
[
|
||||
30.215116414714352,
|
||||
-11.338635495813458
|
||||
],
|
||||
[
|
||||
5.454393748609269,
|
||||
-5.323010354025768
|
||||
],
|
||||
[
|
||||
-0.06890386898634299,
|
||||
-0.074694110077688
|
||||
],
|
||||
[
|
||||
0,
|
||||
0
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "ellipse",
|
||||
"version": 5067,
|
||||
"versionNonce": 1912378357,
|
||||
"isDeleted": false,
|
||||
"id": "sPZv-4m6hv0RYSW1Kzrrb",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1235.9555759014816,
|
||||
"y": 13.472824531333586,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 126.61947902597214,
|
||||
"height": 25.607837035548464,
|
||||
"seed": 194842997,
|
||||
"groupIds": [
|
||||
"xkmNAKuTv_iYXPLj0sxbd"
|
||||
],
|
||||
"frameId": null,
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1688309232141,
|
||||
"link": null,
|
||||
"locked": false
|
||||
}
|
||||
],
|
||||
"appState": {
|
||||
"gridSize": null,
|
||||
"viewBackgroundColor": "#ffffff"
|
||||
},
|
||||
"files": {}
|
||||
}
|
||||
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 314 KiB |
@@ -0,0 +1,243 @@
|
||||
{
|
||||
"type": "excalidraw",
|
||||
"version": 2,
|
||||
"source": "https://excalidraw.com",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 3038,
|
||||
"versionNonce": 1386987419,
|
||||
"isDeleted": false,
|
||||
"id": "pjs0X-Y0kuuXB-vpf_dvP",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 934.5,
|
||||
"y": -240.29250000000002,
|
||||
"strokeColor": "#ffeb3b",
|
||||
"backgroundColor": "#ffeb3b",
|
||||
"width": 312,
|
||||
"height": 146,
|
||||
"seed": 1534167490,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "of5l7HpIH0kPvZ95rOMwM",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "Qzp41i_jzQIBlAB_qFKFH",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"id": "of5l7HpIH0kPvZ95rOMwM",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"id": "of5l7HpIH0kPvZ95rOMwM"
|
||||
}
|
||||
],
|
||||
"updated": 1669033845173,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 2554,
|
||||
"versionNonce": 1319492501,
|
||||
"isDeleted": false,
|
||||
"id": "of5l7HpIH0kPvZ95rOMwM",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 939.5,
|
||||
"y": -235.29250000000002,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 260,
|
||||
"height": 130,
|
||||
"seed": 1972792158,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1669033845173,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 20,
|
||||
"fontFamily": 1,
|
||||
"text": "SELECT\n count(*), flag\nFROM txtai\nGROUP BY flag\nORDER BY count(*) DESC",
|
||||
"baseline": 122,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": "pjs0X-Y0kuuXB-vpf_dvP",
|
||||
"originalText": "SELECT\n count(*), flag\nFROM txtai\nGROUP BY flag\nORDER BY count(*) DESC"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 3354,
|
||||
"versionNonce": 1004999739,
|
||||
"isDeleted": false,
|
||||
"id": "xMKXZw8aL27lv21eVGy_C",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 581,
|
||||
"y": -238.29250000000002,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 302,
|
||||
"height": 140,
|
||||
"seed": 1704428866,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "tlu8eCXVp5ApnEG74CF38",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "Qzp41i_jzQIBlAB_qFKFH",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"id": "tlu8eCXVp5ApnEG74CF38"
|
||||
}
|
||||
],
|
||||
"updated": 1669033845173,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 2750,
|
||||
"versionNonce": 686792949,
|
||||
"isDeleted": false,
|
||||
"id": "tlu8eCXVp5ApnEG74CF38",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 586,
|
||||
"y": -233.29250000000002,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 290,
|
||||
"height": 130,
|
||||
"seed": 92268510,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1669033845173,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 20,
|
||||
"fontFamily": 1,
|
||||
"text": "SELECT\n text, flag, entry\nFROM txtai\nWHERE\n similar('text') AND flag = 1",
|
||||
"baseline": 122,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": "xMKXZw8aL27lv21eVGy_C",
|
||||
"originalText": "SELECT\n text, flag, entry\nFROM txtai\nWHERE\n similar('text') AND flag = 1"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 3169,
|
||||
"versionNonce": 1477367003,
|
||||
"isDeleted": false,
|
||||
"id": "Tsn_ukSxtC7CIwEMUMHxI",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1301.5,
|
||||
"y": -236.79250000000002,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 304,
|
||||
"height": 140,
|
||||
"seed": 919682718,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "t3OC1akz9Oe2w6N8OCavg",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "Qzp41i_jzQIBlAB_qFKFH",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"id": "t3OC1akz9Oe2w6N8OCavg",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "t3OC1akz9Oe2w6N8OCavg",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"id": "t3OC1akz9Oe2w6N8OCavg"
|
||||
}
|
||||
],
|
||||
"updated": 1669033845173,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 2769,
|
||||
"versionNonce": 345619029,
|
||||
"isDeleted": false,
|
||||
"id": "t3OC1akz9Oe2w6N8OCavg",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1306.5,
|
||||
"y": -231.79250000000002,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 259,
|
||||
"height": 130,
|
||||
"seed": 1222509122,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1669033845173,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 20,
|
||||
"fontFamily": 1,
|
||||
"text": "SELECT\n translation(text, 'fr')\nFROM txtai\nWHERE\n similar('feel good story')",
|
||||
"baseline": 122,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": "Tsn_ukSxtC7CIwEMUMHxI",
|
||||
"originalText": "SELECT\n translation(text, 'fr')\nFROM txtai\nWHERE\n similar('feel good story')"
|
||||
}
|
||||
],
|
||||
"appState": {
|
||||
"gridSize": null,
|
||||
"viewBackgroundColor": "#ffffff"
|
||||
},
|
||||
"files": {}
|
||||
}
|
||||
|
After Width: | Height: | Size: 312 KiB |
|
After Width: | Height: | Size: 170 KiB |
|
After Width: | Height: | Size: 171 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 861 KiB |
@@ -0,0 +1,555 @@
|
||||
{
|
||||
"type": "excalidraw",
|
||||
"version": 2,
|
||||
"source": "https://excalidraw.com",
|
||||
"elements": [
|
||||
{
|
||||
"type": "text",
|
||||
"version": 354,
|
||||
"versionNonce": 1260634512,
|
||||
"isDeleted": false,
|
||||
"id": "Buic2Lx427wuSIW8P_Rw5",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 829,
|
||||
"y": 184,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#228be6",
|
||||
"width": 452,
|
||||
"height": 46,
|
||||
"seed": 373648901,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1658676789638,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 36,
|
||||
"fontFamily": 1,
|
||||
"text": "What is semantic search?",
|
||||
"baseline": 32,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "What is semantic search?"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 786,
|
||||
"versionNonce": 1756557200,
|
||||
"isDeleted": false,
|
||||
"id": "U2NgEIEiFpAlwmv5Xnyzr",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 50,
|
||||
"angle": 0,
|
||||
"x": 555.5,
|
||||
"y": 425.30499999999995,
|
||||
"strokeColor": "#7950f2",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 995.3286713286714,
|
||||
"height": 339.0000000000001,
|
||||
"seed": 1946478225,
|
||||
"groupIds": [
|
||||
"C_65R9XVeMQED2nMfIW2D"
|
||||
],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1658676804492,
|
||||
"link": "",
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 569,
|
||||
"versionNonce": 1675727216,
|
||||
"isDeleted": false,
|
||||
"id": "fbSO8bnZmAdvIXZxBAtHY",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 570.7237762237763,
|
||||
"y": 439.50080419580416,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 967,
|
||||
"height": 312,
|
||||
"seed": 1586673137,
|
||||
"groupIds": [
|
||||
"C_65R9XVeMQED2nMfIW2D"
|
||||
],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1658676804492,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 20.27972027972028,
|
||||
"fontFamily": 1,
|
||||
"text": "Query Best Match\n----------------------------------------------------\nfeel good story Maine man wins $1M from $25 lottery ticket\nclimate change Canada's last fully intact ice shelf has suddenly collapsed, forming a \n Manhattan-sized iceberg\npublic health story US tops 5 million confirmed virus cases\nwar Beijing mobilises invasion craft along coast as Taiwan tensions escalate\nwildlife The National Park Service warns against sacrificing slower friends in a\n bear attack\nasia Beijing mobilises invasion craft along coast as Taiwan tensions escalate\nlucky Maine man wins $1M from $25 lottery ticket\ndishonest junk Make huge profits without work, earn up to $100,000 a day",
|
||||
"baseline": 304,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "Query Best Match\n----------------------------------------------------\nfeel good story Maine man wins $1M from $25 lottery ticket\nclimate change Canada's last fully intact ice shelf has suddenly collapsed, forming a \n Manhattan-sized iceberg\npublic health story US tops 5 million confirmed virus cases\nwar Beijing mobilises invasion craft along coast as Taiwan tensions escalate\nwildlife The National Park Service warns against sacrificing slower friends in a\n bear attack\nasia Beijing mobilises invasion craft along coast as Taiwan tensions escalate\nlucky Maine man wins $1M from $25 lottery ticket\ndishonest junk Make huge profits without work, earn up to $100,000 a day"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 952,
|
||||
"versionNonce": 581259632,
|
||||
"isDeleted": false,
|
||||
"id": "UO6MS3wSDu7yg2421__LI",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 933,
|
||||
"y": 267,
|
||||
"strokeColor": "#ffeb3b",
|
||||
"backgroundColor": "#ffeb3b",
|
||||
"width": 214,
|
||||
"height": 49,
|
||||
"seed": 1629565989,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "8sp7H8ijWBlh6aMgZ0XTP"
|
||||
},
|
||||
{
|
||||
"id": "Qzp41i_jzQIBlAB_qFKFH",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"id": "SJ0F0Y81z9hir5qQWAJjk",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1658676831306,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1611,
|
||||
"versionNonce": 1109835152,
|
||||
"isDeleted": false,
|
||||
"id": "qYd3q0Vjks7VOHUC9RR51",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 549,
|
||||
"y": 267.5,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 219,
|
||||
"height": 52,
|
||||
"seed": 1441952427,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "WPeWn6N4rCHf0jY16N9Ge"
|
||||
},
|
||||
{
|
||||
"id": "Qzp41i_jzQIBlAB_qFKFH",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1658676831306,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 1297,
|
||||
"versionNonce": 1725539184,
|
||||
"isDeleted": false,
|
||||
"id": "WPeWn6N4rCHf0jY16N9Ge",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 554,
|
||||
"y": 275.5,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 209,
|
||||
"height": 36,
|
||||
"seed": 870516459,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1658676831306,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Vectorize",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "qYd3q0Vjks7VOHUC9RR51",
|
||||
"originalText": "Vectorize"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1198,
|
||||
"versionNonce": 1201179536,
|
||||
"isDeleted": false,
|
||||
"id": "5VuUdI_BsJ5pyE1nTqJUI",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1332,
|
||||
"y": 268,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 218,
|
||||
"height": 49,
|
||||
"seed": 1044404613,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "bJJ9SGsJsvT071qBBH0w5",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "bJJ9SGsJsvT071qBBH0w5",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "Q51e0Hav-kYfjX3b8tt-r",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"id": "bJJ9SGsJsvT071qBBH0w5"
|
||||
},
|
||||
{
|
||||
"id": "SJ0F0Y81z9hir5qQWAJjk",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1658676831306,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 1381,
|
||||
"versionNonce": 78886256,
|
||||
"isDeleted": false,
|
||||
"id": "bJJ9SGsJsvT071qBBH0w5",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1337,
|
||||
"y": 274.5,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 208,
|
||||
"height": 36,
|
||||
"seed": 128953675,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1658676831306,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Search",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "5VuUdI_BsJ5pyE1nTqJUI",
|
||||
"originalText": "Search"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 942,
|
||||
"versionNonce": 429955472,
|
||||
"isDeleted": false,
|
||||
"id": "8sp7H8ijWBlh6aMgZ0XTP",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 938,
|
||||
"y": 273.5,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "transparent",
|
||||
"width": 204,
|
||||
"height": 36,
|
||||
"seed": 1854823263,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1658676831306,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Index",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "UO6MS3wSDu7yg2421__LI",
|
||||
"originalText": "Index"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 382,
|
||||
"versionNonce": 1098614640,
|
||||
"isDeleted": false,
|
||||
"id": "jWJpSXHkTCzRTCA4tbAgv",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 548.5,
|
||||
"y": 347.30499999999995,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 296,
|
||||
"height": 42,
|
||||
"seed": 1241563487,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1658676831307,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": "- Transform input into numbers\n- Similar concepts have similar values",
|
||||
"baseline": 36,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "- Transform input into numbers\n- Similar concepts have similar values"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 381,
|
||||
"versionNonce": 1266083728,
|
||||
"isDeleted": false,
|
||||
"id": "qEnmXs0P_MQE8r4c4OWGh",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 931.5,
|
||||
"y": 346.2074999999999,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#f44336",
|
||||
"width": 230,
|
||||
"height": 42,
|
||||
"seed": 1038536465,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1658676831307,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": "- Save vectors\n- Store content with vectors",
|
||||
"baseline": 36,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "- Save vectors\n- Store content with vectors"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 491,
|
||||
"versionNonce": 2037979504,
|
||||
"isDeleted": false,
|
||||
"id": "1q8bzjK8lnKUZj8_A9v7D",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1243,
|
||||
"y": 349.2074999999999,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#f44336",
|
||||
"width": 333,
|
||||
"height": 42,
|
||||
"seed": 304472945,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1658676831307,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 16,
|
||||
"fontFamily": 1,
|
||||
"text": "- Find similar vectors with cosine similarity\n- Add rule-based filters using content",
|
||||
"baseline": 36,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "- Find similar vectors with cosine similarity\n- Add rule-based filters using content"
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 1813,
|
||||
"versionNonce": 1230206352,
|
||||
"isDeleted": false,
|
||||
"id": "Qzp41i_jzQIBlAB_qFKFH",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 770.5,
|
||||
"y": 289.8470411964629,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#f44336",
|
||||
"width": 158.1310513485223,
|
||||
"height": 0.5692601572380909,
|
||||
"seed": 660786897,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"strokeSharpness": "round",
|
||||
"boundElements": [],
|
||||
"updated": 1658676831307,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": {
|
||||
"elementId": "qYd3q0Vjks7VOHUC9RR51",
|
||||
"focus": -0.15367587596362536,
|
||||
"gap": 2.5
|
||||
},
|
||||
"endBinding": {
|
||||
"elementId": "UO6MS3wSDu7yg2421__LI",
|
||||
"focus": 0.027437144815141,
|
||||
"gap": 4.3689486514776945
|
||||
},
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
158.1310513485223,
|
||||
0.5692601572380909
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 1962,
|
||||
"versionNonce": 1072982896,
|
||||
"isDeleted": false,
|
||||
"id": "SJ0F0Y81z9hir5qQWAJjk",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1149.5,
|
||||
"y": 292.6790761701911,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#f44336",
|
||||
"width": 181.5,
|
||||
"height": 1.5898915058209013,
|
||||
"seed": 899541905,
|
||||
"groupIds": [
|
||||
"3sURMvhuRfR0M-Q3VRPbg"
|
||||
],
|
||||
"strokeSharpness": "round",
|
||||
"boundElements": [],
|
||||
"updated": 1658676831307,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": {
|
||||
"elementId": "UO6MS3wSDu7yg2421__LI",
|
||||
"focus": 0.08406032225724415,
|
||||
"gap": 2.5
|
||||
},
|
||||
"endBinding": {
|
||||
"elementId": "5VuUdI_BsJ5pyE1nTqJUI",
|
||||
"focus": 0.09327847520504394,
|
||||
"gap": 1
|
||||
},
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
181.5,
|
||||
-1.5898915058209013
|
||||
]
|
||||
]
|
||||
}
|
||||
],
|
||||
"appState": {
|
||||
"gridSize": null,
|
||||
"viewBackgroundColor": "#ffffff"
|
||||
},
|
||||
"files": {}
|
||||
}
|
||||
|
After Width: | Height: | Size: 856 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 237 KiB |
@@ -0,0 +1,263 @@
|
||||
{
|
||||
"type": "excalidraw",
|
||||
"version": 2,
|
||||
"source": "https://excalidraw.com",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 633,
|
||||
"versionNonce": 705603336,
|
||||
"isDeleted": false,
|
||||
"id": "mG5J3YEl3JUm8tWD2gLax",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 840.1017043524607,
|
||||
"y": 323.8650942251963,
|
||||
"strokeColor": "#ff7043",
|
||||
"backgroundColor": "#ff7043",
|
||||
"width": 412.0000000000001,
|
||||
"height": 54.999999999999964,
|
||||
"seed": 322487816,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1641744014625
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 202,
|
||||
"versionNonce": 1087974776,
|
||||
"isDeleted": false,
|
||||
"id": "N9ytCRthOA395FeHYtiWS",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1010.3997812755383,
|
||||
"y": 335.8362480713501,
|
||||
"strokeColor": "#343a40",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 53,
|
||||
"height": 36,
|
||||
"seed": 1396884744,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1641744014625,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "API",
|
||||
"baseline": 25,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "API"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 741,
|
||||
"versionNonce": 917800456,
|
||||
"isDeleted": false,
|
||||
"id": "uFbzRXgEesWgll3llORrW",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 839.3613197370764,
|
||||
"y": 387.49009422519623,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 184,
|
||||
"height": 60.846153846153825,
|
||||
"seed": 531948552,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "Ctud-Ap642NinH0-64fKT"
|
||||
}
|
||||
],
|
||||
"updated": 1641744014625
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 509,
|
||||
"versionNonce": 171632136,
|
||||
"isDeleted": false,
|
||||
"id": "Ctud-Ap642NinH0-64fKT",
|
||||
"fillStyle": "cross-hatch",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 844.3613197370764,
|
||||
"y": 399.91317114827314,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 174,
|
||||
"height": 36,
|
||||
"seed": 720254072,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1641743551018,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Pipeline",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "uFbzRXgEesWgll3llORrW",
|
||||
"originalText": "Pipeline"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 726,
|
||||
"versionNonce": 558153336,
|
||||
"isDeleted": false,
|
||||
"id": "_zQO_kyS5Pvq1zDhEn9hv",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1032.3805505063074,
|
||||
"y": 389.3362480713501,
|
||||
"strokeColor": "#ffeb3b",
|
||||
"backgroundColor": "#ffeb3b",
|
||||
"width": 219,
|
||||
"height": 56,
|
||||
"seed": 1988829960,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "tL_gw7MpliV1bDFJp8Cql",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"id": "tL_gw7MpliV1bDFJp8Cql"
|
||||
}
|
||||
],
|
||||
"updated": 1641744014625
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 514,
|
||||
"versionNonce": 1694557448,
|
||||
"isDeleted": false,
|
||||
"id": "tL_gw7MpliV1bDFJp8Cql",
|
||||
"fillStyle": "cross-hatch",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1037.2555505063074,
|
||||
"y": 399.3362480713501,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 209,
|
||||
"height": 36,
|
||||
"seed": 274132856,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1641743551018,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Workflow",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "_zQO_kyS5Pvq1zDhEn9hv",
|
||||
"originalText": "Workflow"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 455,
|
||||
"versionNonce": 289834248,
|
||||
"isDeleted": false,
|
||||
"id": "QKBksUpSSix31GSKFO1uV",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 838.5920889678456,
|
||||
"y": 456.87470960981165,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 417,
|
||||
"height": 60.846153846153825,
|
||||
"seed": 910262792,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "4o-d8ZzuqEpB7ROBAyReL",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "4o-d8ZzuqEpB7ROBAyReL",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"id": "4o-d8ZzuqEpB7ROBAyReL"
|
||||
}
|
||||
],
|
||||
"updated": 1641744014625
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 258,
|
||||
"versionNonce": 347014152,
|
||||
"isDeleted": false,
|
||||
"id": "4o-d8ZzuqEpB7ROBAyReL",
|
||||
"fillStyle": "cross-hatch",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 843.4670889678456,
|
||||
"y": 469.29778653288855,
|
||||
"strokeColor": "#343a40",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 407,
|
||||
"height": 36,
|
||||
"seed": 1820749832,
|
||||
"groupIds": [],
|
||||
"strokeSharpness": "sharp",
|
||||
"boundElements": [],
|
||||
"updated": 1641743551019,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Embeddings",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "QKBksUpSSix31GSKFO1uV",
|
||||
"originalText": "Embeddings"
|
||||
}
|
||||
],
|
||||
"appState": {
|
||||
"gridSize": null,
|
||||
"viewBackgroundColor": "#ffffff"
|
||||
},
|
||||
"files": {}
|
||||
}
|
||||
|
After Width: | Height: | Size: 237 KiB |
|
After Width: | Height: | Size: 275 KiB |
@@ -0,0 +1,759 @@
|
||||
{
|
||||
"type": "excalidraw",
|
||||
"version": 2,
|
||||
"source": "https://excalidraw.com",
|
||||
"elements": [
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1659,
|
||||
"versionNonce": 1307774681,
|
||||
"isDeleted": false,
|
||||
"id": "qYd3q0Vjks7VOHUC9RR51",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 425,
|
||||
"y": 339.5,
|
||||
"strokeColor": "#00e676",
|
||||
"backgroundColor": "#00e676",
|
||||
"width": 290.0000000000001,
|
||||
"height": 46,
|
||||
"seed": 1441952427,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "WPeWn6N4rCHf0jY16N9Ge"
|
||||
}
|
||||
],
|
||||
"updated": 1673789051585,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 311,
|
||||
"versionNonce": 924248664,
|
||||
"isDeleted": false,
|
||||
"id": "tgnQzXC9s8RY4oImBOXuB",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 562.5285999651802,
|
||||
"y": 272.4578674923631,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#228be6",
|
||||
"width": 0.4714000348197942,
|
||||
"height": 72.5421325076369,
|
||||
"seed": 650463755,
|
||||
"groupIds": [],
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1658678202111,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": {
|
||||
"elementId": "B435ajoI5vAQBDvzkd8aY",
|
||||
"focus": 0.05963733900881362,
|
||||
"gap": 5.457867492363107
|
||||
},
|
||||
"endBinding": null,
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0.4714000348197942,
|
||||
72.5421325076369
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 1347,
|
||||
"versionNonce": 162309943,
|
||||
"isDeleted": false,
|
||||
"id": "WPeWn6N4rCHf0jY16N9Ge",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 430,
|
||||
"y": 344.5,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 280,
|
||||
"height": 36,
|
||||
"seed": 870516459,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673789051585,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Translate",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "qYd3q0Vjks7VOHUC9RR51",
|
||||
"originalText": "Translate"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 168,
|
||||
"versionNonce": 2070244952,
|
||||
"isDeleted": false,
|
||||
"id": "IxMxusRKX2PpnJT1uY0cC",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 819,
|
||||
"y": 217.5,
|
||||
"strokeColor": "#ffeb3b",
|
||||
"backgroundColor": "#ffeb3b",
|
||||
"width": 290.0000000000001,
|
||||
"height": 49,
|
||||
"seed": 1364021803,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"type": "text",
|
||||
"id": "SSXjX_URKvcVC8h-Qgz4j"
|
||||
},
|
||||
{
|
||||
"id": "_YNRYTAnVzdhhKxFtkVyg",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1658678121633,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 73,
|
||||
"versionNonce": 1790001960,
|
||||
"isDeleted": false,
|
||||
"id": "SSXjX_URKvcVC8h-Qgz4j",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 824,
|
||||
"y": 224,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#82c91e",
|
||||
"width": 280,
|
||||
"height": 36,
|
||||
"seed": 948915563,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1658678121633,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Extract Text",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "IxMxusRKX2PpnJT1uY0cC",
|
||||
"originalText": "Extract Text"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 205,
|
||||
"versionNonce": 1180033880,
|
||||
"isDeleted": false,
|
||||
"id": "lATIKISgJPOGnUHleuFRH",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 821,
|
||||
"y": 338,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 290.0000000000001,
|
||||
"height": 46,
|
||||
"seed": 1256311595,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "21WiUuyDtpQ9FnJ74REpJ",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "Q51e0Hav-kYfjX3b8tt-r",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1658678121633,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 84,
|
||||
"versionNonce": 1559141928,
|
||||
"isDeleted": false,
|
||||
"id": "21WiUuyDtpQ9FnJ74REpJ",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 826,
|
||||
"y": 343,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 280,
|
||||
"height": 36,
|
||||
"seed": 626266373,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1658678121633,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Summarize",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "lATIKISgJPOGnUHleuFRH",
|
||||
"originalText": "Summarize"
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 150,
|
||||
"versionNonce": 108519256,
|
||||
"isDeleted": false,
|
||||
"id": "_YNRYTAnVzdhhKxFtkVyg",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 962.2340210300499,
|
||||
"y": 270,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#228be6",
|
||||
"width": 0.2659789699500834,
|
||||
"height": 75,
|
||||
"seed": 101249451,
|
||||
"groupIds": [],
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1658678205029,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": {
|
||||
"elementId": "IxMxusRKX2PpnJT1uY0cC",
|
||||
"focus": 0.012856281024868153,
|
||||
"gap": 3.5
|
||||
},
|
||||
"endBinding": null,
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
0.2659789699500834,
|
||||
75
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 213,
|
||||
"versionNonce": 1959303464,
|
||||
"isDeleted": false,
|
||||
"id": "6B3J0wJfi561c9gMsgtXG",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 824,
|
||||
"y": 455,
|
||||
"strokeColor": "#7950f2",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 290.0000000000001,
|
||||
"height": 46,
|
||||
"seed": 1164190923,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "qJDqmDEZF9Ewh2UrjXq5Z",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "Q51e0Hav-kYfjX3b8tt-r",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1658678121634,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 135,
|
||||
"versionNonce": 210169176,
|
||||
"isDeleted": false,
|
||||
"id": "qJDqmDEZF9Ewh2UrjXq5Z",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 829,
|
||||
"y": 460,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 280,
|
||||
"height": 36,
|
||||
"seed": 1307943269,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1658678121634,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Build Vector Index",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "6B3J0wJfi561c9gMsgtXG",
|
||||
"originalText": "Build Vector Index"
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 203,
|
||||
"versionNonce": 133313624,
|
||||
"isDeleted": false,
|
||||
"id": "Q51e0Hav-kYfjX3b8tt-r",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 963.600775377322,
|
||||
"y": 387.5,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#228be6",
|
||||
"width": 0.29392358842710564,
|
||||
"height": 66.5,
|
||||
"seed": 59173285,
|
||||
"groupIds": [],
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1658678208037,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": {
|
||||
"elementId": "lATIKISgJPOGnUHleuFRH",
|
||||
"focus": 0.015253485349599789,
|
||||
"gap": 3.5
|
||||
},
|
||||
"endBinding": {
|
||||
"elementId": "6B3J0wJfi561c9gMsgtXG",
|
||||
"focus": -0.039966641220930875,
|
||||
"gap": 1
|
||||
},
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
-0.29392358842710564,
|
||||
66.5
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 1246,
|
||||
"versionNonce": 842910649,
|
||||
"isDeleted": false,
|
||||
"id": "5VuUdI_BsJ5pyE1nTqJUI",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1195,
|
||||
"y": 221,
|
||||
"strokeColor": "#7950f2",
|
||||
"backgroundColor": "#7950f2",
|
||||
"width": 290.0000000000001,
|
||||
"height": 46,
|
||||
"seed": 1044404613,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "bJJ9SGsJsvT071qBBH0w5",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "Q51e0Hav-kYfjX3b8tt-r",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1673789051585,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 1431,
|
||||
"versionNonce": 1914742871,
|
||||
"isDeleted": false,
|
||||
"id": "bJJ9SGsJsvT071qBBH0w5",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1200,
|
||||
"y": 226,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 280,
|
||||
"height": 36,
|
||||
"seed": 128953675,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673789051585,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Run similarity query",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "5VuUdI_BsJ5pyE1nTqJUI",
|
||||
"originalText": "Run similarity query"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 334,
|
||||
"versionNonce": 7828646,
|
||||
"isDeleted": false,
|
||||
"id": "pSbgtf1qAB7tWl-pTld7e",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1197,
|
||||
"y": 343,
|
||||
"strokeColor": "#ff7043",
|
||||
"backgroundColor": "#ff7043",
|
||||
"width": 290.0000000000001,
|
||||
"height": 46,
|
||||
"seed": 210689733,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "pQzKSM3audka1kiQm_Sku",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "Q51e0Hav-kYfjX3b8tt-r",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"id": "k67YzXNtt1GLh4i8Es5zJ",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1673791639562,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 293,
|
||||
"versionNonce": 271822438,
|
||||
"isDeleted": false,
|
||||
"id": "pQzKSM3audka1kiQm_Sku",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1219.5,
|
||||
"y": 348,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 245,
|
||||
"height": 36,
|
||||
"seed": 1869028363,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1673791644235,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Send notifications",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "pSbgtf1qAB7tWl-pTld7e",
|
||||
"originalText": "Send notifications"
|
||||
},
|
||||
{
|
||||
"type": "arrow",
|
||||
"version": 310,
|
||||
"versionNonce": 1574300026,
|
||||
"isDeleted": false,
|
||||
"id": "k67YzXNtt1GLh4i8Es5zJ",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1339.1171359117898,
|
||||
"y": 265.5,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#228be6",
|
||||
"width": 1.0119492860442278,
|
||||
"height": 76.5,
|
||||
"seed": 1656816747,
|
||||
"groupIds": [],
|
||||
"roundness": {
|
||||
"type": 2
|
||||
},
|
||||
"boundElements": [],
|
||||
"updated": 1673791641098,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"startBinding": null,
|
||||
"endBinding": {
|
||||
"elementId": "pSbgtf1qAB7tWl-pTld7e",
|
||||
"focus": -0.010690950588675632,
|
||||
"gap": 1
|
||||
},
|
||||
"lastCommittedPoint": null,
|
||||
"startArrowhead": null,
|
||||
"endArrowhead": "arrow",
|
||||
"points": [
|
||||
[
|
||||
0,
|
||||
0
|
||||
],
|
||||
[
|
||||
1.0119492860442278,
|
||||
76.5
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 308,
|
||||
"versionNonce": 641647912,
|
||||
"isDeleted": false,
|
||||
"id": "kKPPLMCj8QQIJLbW-B5hm",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 1180,
|
||||
"y": 451,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#fab005",
|
||||
"width": 296,
|
||||
"height": 52,
|
||||
"seed": 1079990731,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1658678121635,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 20,
|
||||
"fontFamily": 1,
|
||||
"text": "- API bindings for JavaScript,\n Rust, Go and Java",
|
||||
"baseline": 44,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "- API bindings for JavaScript,\n Rust, Go and Java"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 560,
|
||||
"versionNonce": 1977188696,
|
||||
"isDeleted": false,
|
||||
"id": "1AQ3rj-V4weRtPA8a5-z-",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 437.5,
|
||||
"y": 449.5,
|
||||
"strokeColor": "#000",
|
||||
"backgroundColor": "#fab005",
|
||||
"width": 278,
|
||||
"height": 52,
|
||||
"seed": 836512075,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1658678121635,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 20,
|
||||
"fontFamily": 1,
|
||||
"text": "- Build with Python or YAML\n- Run local or via API",
|
||||
"baseline": 44,
|
||||
"textAlign": "left",
|
||||
"verticalAlign": "top",
|
||||
"containerId": null,
|
||||
"originalText": "- Build with Python or YAML\n- Run local or via API"
|
||||
},
|
||||
{
|
||||
"type": "rectangle",
|
||||
"version": 292,
|
||||
"versionNonce": 259776552,
|
||||
"isDeleted": false,
|
||||
"id": "B435ajoI5vAQBDvzkd8aY",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 426,
|
||||
"y": 221,
|
||||
"strokeColor": "#03a9f4",
|
||||
"backgroundColor": "#03a9f4",
|
||||
"width": 290.0000000000001,
|
||||
"height": 46,
|
||||
"seed": 942981672,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [
|
||||
{
|
||||
"id": "AoGnxEHn4x-zq2-0C0VrT",
|
||||
"type": "text"
|
||||
},
|
||||
{
|
||||
"id": "Q51e0Hav-kYfjX3b8tt-r",
|
||||
"type": "arrow"
|
||||
},
|
||||
{
|
||||
"id": "tgnQzXC9s8RY4oImBOXuB",
|
||||
"type": "arrow"
|
||||
}
|
||||
],
|
||||
"updated": 1658678121635,
|
||||
"link": null,
|
||||
"locked": false
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"version": 171,
|
||||
"versionNonce": 2093287976,
|
||||
"isDeleted": false,
|
||||
"id": "AoGnxEHn4x-zq2-0C0VrT",
|
||||
"fillStyle": "hachure",
|
||||
"strokeWidth": 1,
|
||||
"strokeStyle": "solid",
|
||||
"roughness": 1,
|
||||
"opacity": 100,
|
||||
"angle": 0,
|
||||
"x": 431,
|
||||
"y": 226,
|
||||
"strokeColor": "#000000",
|
||||
"backgroundColor": "#fa5252",
|
||||
"width": 280,
|
||||
"height": 36,
|
||||
"seed": 604886104,
|
||||
"groupIds": [],
|
||||
"roundness": null,
|
||||
"boundElements": [],
|
||||
"updated": 1658678188284,
|
||||
"link": null,
|
||||
"locked": false,
|
||||
"fontSize": 28,
|
||||
"fontFamily": 1,
|
||||
"text": "Summarize",
|
||||
"baseline": 25,
|
||||
"textAlign": "center",
|
||||
"verticalAlign": "middle",
|
||||
"containerId": "B435ajoI5vAQBDvzkd8aY",
|
||||
"originalText": "Summarize"
|
||||
}
|
||||
],
|
||||
"appState": {
|
||||
"gridSize": null,
|
||||
"viewBackgroundColor": "#3030"
|
||||
},
|
||||
"files": {}
|
||||
}
|
||||