Compare commits

...
1538 Commits
Author SHA1 Message Date
Hua.T e981d2d8fc Forward backend options during streaming speech generation (#1389) (#1390) 2026-10-11 17:23:05 -04:00
PerryLink 55fadb4c56 Reject a semicolon in a SQL query instead of silently cutting the statement (#1388) 2026-10-11 17:21:01 -04:00
Rızgar Ozan fe5be99bfa Handle ServiceTask responses without a Content-Type or body (#1387) 2026-10-11 17:17:06 -04:00
David Mezzetti 243aaa191d Merge pull request #1385 from kartsan03/sqlite-load-switch
Switch SQLite ANN connections when load() is given a new path
2026-10-11 17:13:58 -04:00
leeshengis 93a767f004 Preserve workflow and task configuration dictionaries (#1377) 2026-10-11 17:12:41 -04:00
davidmezzetti 62099b9a34 Cleanup open connection in test 2026-10-11 12:03:14 -04:00
David Mezzetti c786f1b5ec Replace continue statement in HTMLToMarkdown list handler (#1357) (#1386) 2026-10-11 11:02:08 -04:00
amengnew 738df97d5f Fall back to row index when Tabular IDs are NaN (#1366) 2026-10-11 10:37:51 -04:00
Raphael Malikian 4605ee001f Fix LogOdds.calibrate to compute the mean once instead of per score (#1365) 2026-10-10 08:06:37 -04:00
Rızgar Ozan 46516fa4e6 Replace continue statement in HTMLToMarkdown list handler (#1357) 2026-10-10 14:24:22 +03:00
kartsan03 fe1fbbc933 Switch SQLite ANN connections when load() is given a new path 2026-10-10 11:11:24 +00:00
Hua.T 084a1eca4d Fix audio trimming of partial detection windows (#1374) (#1375) 2026-10-10 06:35:44 -04:00
Muneeb Ullah ba9d52310a Fix infertopics ignoring topiced neighbors when untopiced ones outnumber them (#1373) 2026-10-10 06:33:12 -04:00
Jasper ca9563daac Use only the query argument of similar() clauses in terms and explain (#1367) 2026-10-09 10:29:46 -04:00
D41910 0e7202caee Honor an empty allow list in the bash agent tool (#1362) 2026-10-08 15:55:25 -04:00
David Mezzetti c1f1686889 Merge pull request #1361 from kartsan03/rdbms-graph-addattribute
Write RDBMS graph attribute changes to the database
2026-10-08 13:06:57 -04:00
kartsan03 04f5bf1998 Write RDBMS graph attribute changes to the database 2026-10-08 12:52:02 +00:00
Gaurav Chintakunta c8e7d813af Preserve ordered-list start values in HTMLToMarkdown (#1355) (#1356) 2026-10-08 07:05:07 -04:00
Yuilona edf61d1d4a Use each query's hybrid weights when batching similar clauses (#1359) 2026-10-07 16:21:36 -04:00
Raphael Malikian 7e92f5a7d7 Fix StorageTask listing failing on tagged storage inputs (#1348) 2026-10-07 14:15:17 -04:00
Raashish Aggarwal b2ff9bd85c Sort NULL values like SQLite when merging ordered results (#1353) 2026-10-07 13:09:08 -04:00
Raashish Aggarwal 9c718f7876 Merge aggregate columns written in uppercase across shards (#1352) 2026-10-07 09:00:39 -04:00
Moinuddin Shaik c486f4706e Return no results from Reranker when a search has no matches (#1350) 2026-10-07 09:00:03 -04:00
Lukas 341184ba46 Keep word spacing and drop empty link targets in HTMLToMarkdown (#1347) 2026-10-07 08:58:51 -04:00
Lukas 647d80f95e Replace HTML line breaks with newlines in HTMLToMarkdown (#1345) 2026-10-07 07:22:03 -04:00
Yash Raj Pandey 408c25d201 Explain DuckDB query errors that abort the transaction (#1341) 2026-10-07 06:34:30 -04:00
davidmezzetti b0f29a11d1 Bump Docker version 2026-10-06 10:18:15 -04:00
davidmezzetti 49a64943b8 Bump version 2026-10-06 10:18:02 -04:00
David Mezzetti af33f2e024 Merge pull request #1333 from HuaTNA/fix-tabular-falsy-idcolumn
Respect explicitly selected falsy ID column names in Tabular
2026-10-05 11:06:24 -04:00
davidmezzetti f908b5d88d Support trust_remote_code in associated AutoModels, closes #1342 2026-10-05 10:25:41 -04:00
David Mezzetti 2e8493dfca Merge pull request #1338 from serhiizghama/fix/duckdb-bind-parameter-order
Keep DuckDB bind values in query order when a parameter repeats
2026-10-05 08:53:15 -04:00
shabeeth2 d7e3e29ac3 docs: match task input tuple in explanation (#1337) 2026-10-05 06:22:06 -04:00
Mohammad Hijjawi 4e2efa2cbc Keep node id 0 in graph path search results (#1335) 2026-10-05 06:19:12 -04:00
Gaurav Chintakunta ffcbc0b815 Skip NULL aggregate values from shards with no matching rows (#1331) 2026-10-05 06:17:05 -04:00
tuanzirwar f14c26c4c7 Fix ordinary streaming output buffering with stripthink enabled (#1311) 2026-10-05 06:15:44 -04:00
serhiizghama 346bb9d282 Test a repeated bind parameter followed by another parameter 2026-10-05 11:12:23 +07:00
serhiizghama e3e0413747 Keep DuckDB bind values in query order when a parameter repeats 2026-10-05 10:47:53 +07:00
David Mezzetti 32655393e0 Merge pull request #1323 from Lesereingrape/fix/concat-merge-falsy-values-1003
Keep 0 and False in concat merge outputs
2026-10-04 11:08:45 -04:00
davidmezzetti 9118875980 Move coverage check to only run for Linux GitHub action 2026-10-04 09:45:08 -04:00
Manobhi Sriram d9b4476187 Decode bash tool output as UTF-8 instead of locale encoding, closes #1326 (#1327) 2026-10-04 09:32:30 -04:00
Grapette.L ff5aec468a Fix DuckDB bind parameters followed by a non-word character not being converted (#1325) 2026-10-04 09:01:16 -04:00
davidmezzetti 3446a4ef13 Fail if code coverage less than 100% 2026-10-04 08:57:07 -04:00
HuaTNA 84aa1c81c7 Fix Tabular handling of explicitly selected falsy ID columns (#1332) 2026-10-03 19:14:23 -04:00
Lesereingrape 6bc76132d0 Keep 0 and False in concat merge outputs 2026-10-03 11:34:59 +08:00
Morgan Carr 893d0424be Cache document token vectors in Reranker (#1321) 2026-10-02 14:32:17 -04:00
Edson 98c965cc3b Keep all rows for native vstack merges with list inputs (#1320) 2026-10-02 14:30:31 -04:00
Yash Raj Pandey 00622f2cf1 Parse true and false as boolean literals in SQL queries (#1316) 2026-10-02 14:28:51 -04:00
Yash Raj Pandey 55d52fda92 Keep graph categories aligned with topics after a delete (#1315) 2026-10-02 14:24:59 -04:00
Ni0ri 20c9b8e0be Add Zvec Sparse ANN (#1307) 2026-10-01 09:53:38 -04:00
Mohammad Hijjawi 3f33fb2918 Format nested HTML lists without duplicating items (#1286) 2026-10-01 06:48:14 -04:00
davidmezzetti 3c7a548923 Remove build script workaround, closes #1239 2026-09-30 13:03:03 -04:00
Pablo Miguel Argudo c78fbd976c Support append and delete in the RaBitQ ivf mode (#1304) 2026-09-30 12:44:19 -04:00
David Mezzetti 2d535ff215 Merge pull request #1303 from kartsan03/fix/ann-delete-numpy-ids
Delete the requested rows when ANN ids are a NumPy array
2026-09-30 12:40:40 -04:00
kartsan03 6765330f4a Delete the requested rows when ANN ids are a NumPy array 2026-09-30 15:26:24 +00:00
davidmezzetti 1d5041b6e7 Fix test merge error 2026-09-30 11:07:02 -04:00
davidmezzetti d467878064 Refactor ANN tests, closes #1305 2026-09-30 11:04:07 -04:00
davidmezzetti 3bc07b3f09 Remove unnecessary note 2026-09-30 11:03:37 -04:00
Hua.T 8ef454d0bf Preserve keyword document ID types across save/load (#1274) (#1275) 2026-09-30 10:57:41 -04:00
Jin 47d3e65756 Fix training with pandas DataFrames, closes #1265 (#1266) 2026-09-30 10:55:44 -04:00
LimbC-C 81f908874b Open lazy SQLite connections before saving indexes (#1290) 2026-09-30 09:30:14 -04:00
David Mezzetti bed91a0b9f Merge pull request #1301 from Bdysj/openai-compliant-chat-completions
Return OpenAI-compliant index, created and finish_reason from chat completions
2026-09-30 09:05:50 -04:00
David Mezzetti 7df50abb61 Merge pull request #1282 from LimbC-C/fix/sqlite-binary-scores
Normalize SQLite binary ANN similarity scores
2026-09-30 09:03:45 -04:00
David Mezzetti 80b8ceff4a Merge pull request #1279 from LimbC-C/fix/array-negative-delete-ids
Ignore negative deletion IDs in NumPy and Torch ANN indexes
2026-09-30 08:59:03 -04:00
David Mezzetti de9e09e9ae Merge pull request #1299 from LimbC-C/fix/tabular-numeric-types
Preserve integer document IDs and numeric column types in Tabular
2026-09-30 08:19:59 -04:00
Morgan Carr 69ede9ec3e Fall back to root tokenizers for ONNX and LiteRT Hub subdirectory models (#1277) 2026-09-30 07:41:03 -04:00
Pablo Miguel Argudo f8689ed903 Store only the quantized index in the RaBitQ backend (#1297) 2026-09-30 07:05:37 -04:00
bob 0abf3763b4 Return OpenAI-compliant index, created and finish_reason from chat completions, closes #1300 2026-09-30 14:51:02 +08:00
LimbC-C 11b2cfe298 Preserve numeric column types in Tabular rows (#1298) 2026-09-30 09:45:58 +08:00
LimbC-C d0cc2bed9c Simplify regression test in existing TestDense class (#1282) 2026-09-30 09:39:23 +08:00
LimbC-C a5ea35d7a7 Simplify regression test in existing TestDense class (#1279) 2026-09-30 09:39:18 +08:00
Yash Raj Pandey 6a15ed8490 Include offset rows in similar() candidates (#1291) 2026-09-29 17:25:52 -04:00
David Mezzetti 76147369fb Merge pull request #1295 from Bdysj/pad-summary-batches
Pad batched inputs in the Summary pipeline
2026-09-29 15:27:58 -04:00
bob 2e89af0845 Pad batched inputs in the Summary pipeline, closes #1294 2026-09-30 01:19:38 +08:00
davidmezzetti d9d6a1cbb1 Update pooling mode check 2026-09-29 11:05:04 -04:00
davidmezzetti f87574de4c Support pooling_mode with models trained with recent Sentence Transformers, closes #1292 2026-09-29 10:23:16 -04:00
Mohammad Hijjawi e313248ff2 Keep uppercase tokens in alphanumeric tokenization with lowercase=False (#1287) 2026-09-29 09:03:03 -04:00
davidmezzetti 5cba72c88a Update pylintrc file and remove warning overrides for new limits 2026-09-29 07:11:03 -04:00
davidmezzetti 45d334f4ce Remove unnecessary new test file and consolidate test into existing class 2026-09-29 07:10:09 -04:00
Jin 95d4c1c881 Label QA spans without the answer with the CLS token, closes #1263 (#1264) 2026-09-29 06:36:47 -04:00
LimbC-C ef28da8735 Reject iterator inputs for multi-action tasks without buffering (#1272) 2026-09-28 10:40:36 -04:00
LimbC-C f1304d8403 Normalize SQLite binary ANN similarity scores (#1281) 2026-09-28 09:43:12 +08:00
davidmezzetti 97ee7e073a Bump job timeout given that the Windows build frequently times out 2026-09-27 05:51:01 -04:00
LimbC-C 1d3f8e9ebf Ignore negative NumPy and Torch ANN deletion IDs (#1278) 2026-09-26 09:43:32 +08:00
davidmezzetti f3ceece76a Add test for missing SQLite ANN coverage 2026-09-25 09:18:02 -04:00
Pablo Miguel Argudo 6737ee4e01 Add RaBitQ as an ANN backend (#1251) 2026-09-25 08:39:39 -04:00
davidmezzetti e30e8edbcc Add test for missing SQLite ANN coverage 2026-09-25 08:00:21 -04:00
davidmezzetti 483dbd3b3b Update test 2026-09-24 21:49:06 -04:00
davidmezzetti c09a6f24f1 Update test 2026-09-24 21:46:09 -04:00
davidmezzetti 6e7f0d260e Update test 2026-09-24 21:12:15 -04:00
davidmezzetti 793ecc8dc2 Require Python 3.11, closes #1273 2026-09-24 16:58:32 -04:00
David Mezzetti 37500887ae Merge pull request #1268 from HuaTNA/fix-rag-input-mutation
Preserve reusable RagTask inputs
2026-09-24 16:35:58 -04:00
David Mezzetti 4e2eb242b6 Support explicit LIKE escapes in wildcard term queries (#1259) 2026-09-24 16:34:16 -04:00
Jin 83c75ea28a Pack rows into chunks up to and including maxlength, closes #1269 (#1270) 2026-09-24 16:31:37 -04:00
LimbC-C f47d389735 Preserve wildcard compatibility and support explicit LIKE escapes 2026-09-24 23:54:33 +08:00
HuaTNA 4bb2141954 Preserve reusable RagTask inputs (#1267) 2026-09-23 23:48:46 -04:00
David Mezzetti 5d8c999ae0 Merge pull request #1262 from HuaTNA/fix-template-falsy-rules
Preserve falsy TemplateTask rule matches
2026-09-23 16:36:47 -04:00
HuaTNA 48a34e21c3 Preserve falsy TemplateTask rule matches (#1261) 2026-09-23 13:22:36 -04:00
davidmezzetti 262b03027e Code cleanup 2026-09-23 08:01:47 -04:00
刘冠杰 36c375b86e Honor the nfeatures setting in IVFSparse (#1250) 2026-09-23 07:53:18 -04:00
David Mezzetti b715812e68 Merge pull request #1248 from LimbC-C/fix/deleted-keyword-results
Keep deleted keyword results excluded after common-term scoring
2026-09-23 07:51:27 -04:00
hylin dcdded892d Keep community nodes that match none of the topic terms (#1243) 2026-09-23 07:40:25 -04:00
LimbC-C e7894cdb00 Escape literal SQL wildcard characters in term expansion (#1258) 2026-09-23 13:06:27 +08:00
LimbC-C 9f9b32e070 Clear deleted scores at the end of common-term merging 2026-09-23 13:00:30 +08:00
David Mezzetti 00167b9f08 Merge pull request #1256 from dingpuyu/codex/fix-retrieve-local-filenames
Preserve local filenames in RetrieveTask
2026-09-22 14:00:19 -04:00
dingpuyu 3c07766199 Preserve local filenames in RetrieveTask 2026-09-23 00:36:08 +08:00
Amir Fathi 7cb6bd09db Fix DuckDB.formatargs dropping repeated named bind parameters (#1253) 2026-09-22 12:22:45 -04:00
Caner Olcay 4b7d70e9e8 Keep SQLite ANN data when saving a modified index to a new path (#1249) 2026-09-22 06:55:29 -04:00
David Mezzetti 2ed4e46ebf Merge pull request #1245 from serhiizghama/fix/cluster-forward-weights-and-encode-parameters
fix(api): forward zero weights and url-encode parameters in Cluster search
2026-09-22 06:54:14 -04:00
LimbC-C 47d5f56768 Keep deleted keyword results excluded after common-term scoring (#1247) 2026-09-19 09:46:09 +08:00
serhiizghama d5db643540 test: cover cluster search argument forwarding 2026-09-18 09:15:19 +07:00
serhiizghama 9f7b4ddd42 fix(api): forward zero weights and url-encode parameters in Cluster search 2026-09-18 08:56:12 +07:00
Morgan Carr 19ff237c37 Set the HNSW delete counter when loading an index (#1242) 2026-09-15 14:21:46 -04:00
Morgan Carr ad77514b32 Store IVFSparse deletes as int (#1241) 2026-09-15 14:20:36 -04:00
davidmezzetti 144a957d42 Test latest version of LiteLLM #1193 2026-09-15 07:51:21 -04:00
Serhii Zghama 2e8a3d7892 fix(database): don't drop rows when sorting or grouping by a JSON field (#1238) 2026-09-14 10:19:52 -04:00
Amir Fathi 72f9ca7605 Fix Cluster combining avg() as an unweighted mean of shard averages (#1237) 2026-09-14 10:18:52 -04:00
Amir Fathi ebe13ae304 Fix quantize: false silently enabling Q8_0 quantization in the GGML backend (#1236) 2026-09-11 08:25:40 -04:00
Serhii Zghama 5d0e995f7f fix(ann): honor quantize: false in the Faiss and SQLite backends (#1234) 2026-09-11 08:22:49 -04:00
davidmezzetti 7965a7f42e Build script workaround #1239 2026-09-10 08:52:56 -04:00
Amir Fathi 2bae6e4d43 Fix Transform.stream() yielding a None text value into the encoder (#1231) 2026-09-08 09:44:53 -04:00
Morgan Carr 767272f2d5 Key the vectors model cache by configuration (#1223) 2026-09-04 16:47:49 -04:00
Morgan Carr 21460347dd Fix ANN delete on quantized Torch stores and tiny GGML indexes (#1228) 2026-09-04 09:54:42 -04:00
Morgan Carr f3945f9120 Select the top documents in LateEncoder by the document axis (#1227) 2026-09-04 09:52:40 -04:00
Paco Cartones 3a7b597d78 fix(workflow): add request timeout to ServiceTask (#1226) 2026-09-04 09:00:49 -04:00
Morgan Carr 20e2dc41e1 Save empty keyword and content indexes without errors (#1224) 2026-09-04 08:21:11 -04:00
Morgan Carr eafe574d92 Keep the archive working directory alive when saving a loaded index (#1222) 2026-09-04 08:19:36 -04:00
Morgan Carr 7e98746d78 Delete every index entry for an id in Terms (#1219) 2026-09-04 08:11:47 -04:00
Morgan Carr 6ebfbbb716 Improve late pooling configuration errors (#1217) 2026-09-03 13:52:46 -04:00
David Mezzetti 8fef6ac454 Merge pull request #1220 from serhiizghama/fix/sparse-vectors-remove-spool-file
fix(vectors): remove the sparse spool file when checkpointing is disabled
2026-09-03 13:05:09 -04:00
davidmezzetti 0eafc0580f Update vectors package to standardize fallback logic, closes #1221 2026-09-03 11:53:55 -04:00
serhiizghama 5ade7881c8 test: cover spool file cleanup for sparse vectors 2026-09-03 20:19:31 +07:00
serhiizghama 948dc42d19 fix(vectors): remove the sparse spool file when checkpointing is disabled 2026-09-03 19:58:47 +07:00
David Mezzetti 2e8af221f4 Keep count() accurate after repeated deletes in GGML and IVFSparse (#1218)
Deleting an id that is already marked deleted no longer decrements count()
again in the GGML and IVFSparse ANN backends. IVFSparse also ignores ids that
were never indexed, matching the dense backends.
2026-09-02 18:18:11 -04:00
Morgan Carr 396b3b8065 Resolve label filters by label id (#1216) 2026-09-02 17:15:45 -04:00
Morgan Carr 80420ee10a Ignore padding rows in LateEncoder scores (#1215) 2026-09-02 17:14:39 -04:00
David Mezzetti 1d45e88569 Merge pull request #1214 from morgan-coded/fix/milvus-load-collection
Load the Milvus collection when opening a saved index
2026-09-02 15:25:19 -04:00
Joe Bergin 007d61077a Add ONNX vectors backend (#1212) 2026-09-02 12:19:57 -04:00
David Mezzetti 84fcd81039 fix(api): parse the graph query parameter as a bool (#1213) 2026-09-02 11:18:16 -04:00
morgan-coded cfe2227f30 Load the Milvus collection when opening a saved index
With milvus-lite 3.2.1, a reopened collection that has an index starts in the
released state, so search failed after save and after load while count worked.
2026-09-02 03:20:29 -05:00
morgan-coded 82b5320da3 Keep count() accurate after repeated deletes in GGML and IVFSparse
Deleting an id that is already marked deleted no longer decrements count()
again in the GGML and IVFSparse ANN backends. IVFSparse also ignores ids that
were never indexed, matching the dense backends.
2026-09-02 02:53:52 -05:00
serhiizghama 18b93be702 test: cover graph parameter parsing in the search API 2026-09-02 11:06:18 +07:00
serhiizghama 027c07deb9 fix(api): parse the graph query parameter as a bool 2026-09-02 10:53:23 +07:00
Paco Cartones 876cd07cf7 Fix bash tool hanging on commands that read stdin (#1210) 2026-09-01 20:04:29 -04:00
davidmezzetti 546e7777f1 Bump version 2026-08-27 12:48:36 -04:00
Yash Raj Pandey 27542ca64b Index zero and False values in the tabular pipeline (#1207) 2026-08-27 07:39:36 -04:00
David Mezzetti f0ee7d2b2d Merge pull request #1206 from morgan-coded/fix/nprobe-clamp
Clamp default Faiss nprobe to nlist
2026-08-26 08:23:31 -04:00
morgan-coded bba7fd589e Clamp default nprobe to nlist 2026-08-25 17:18:46 -05:00
David Mezzetti 6349ca2eac Merge pull request #1205 from Evhye38496/fix-safetensors-import
Fix safetensors numpy/torch submodule imports
2026-08-25 07:58:29 -04:00
Evhye38496 ba1693480e Fix safetensors numpy/torch submodule imports #1204 2026-08-25 12:57:51 +08:00
Sainikhil Juluri e90c67ef06 fix(scoring): keep count() accurate when an id is deleted more than once (#1202) 2026-08-24 21:55:11 -04:00
Amir Fathi 57991cb164 Fix WordVectors.index() silently dropping the checkpoint argument (#1198) 2026-08-24 20:38:28 -04:00
David Mezzetti c2b264d297 Merge pull request #1201 from serhiizghama/fix/numpy-hamming-search-skip-deleted-rows
fix(ann): exclude deleted rows from quantized numpy search results
2026-08-24 15:57:28 -04:00
serhiizghama 406e417be0 test(ann): cover deleted-row exclusion for quantized numpy backend 2026-08-24 17:18:26 +07:00
serhiizghama 954b17af4d fix(ann): exclude deleted rows from quantized numpy search results 2026-08-24 17:05:58 +07:00
davidmezzetti 2a139449dc Re-add LiteLLM workaround #1193 2026-08-23 19:08:33 -04:00
davidmezzetti a10667a1c2 Test new version of LiteLLM #1193 2026-08-22 22:10:01 -04:00
davidmezzetti 34e6efcdd6 Update docs 2026-08-22 22:09:34 -04:00
David Mezzetti 9b7a96b4d1 Resolve LEMUR and MUVERA settings (#1196) 2026-08-22 21:49:14 -04:00
morgan-coded b94f770301 Resolve LEMUR and MUVERA settings 2026-08-22 16:19:06 -05:00
Arnaud Thery adbcccda46 Merge pull request #1195 from St4r4x/fix/crossencoder-multiclass-labels
fix: rank CrossEncoder by a fixed label, not top-1 position
2026-08-22 14:15:21 -04:00
David Mezzetti 20f818f72c Merge pull request #1194 from morgan-coded/fix/1190-lemur-collection-centering
Fix LEMUR collection centering
2026-08-19 06:37:51 -04:00
morgan-coded ee0416e87b Add centermean validation test 2026-08-18 20:22:07 -05:00
morgan-coded 00ec81a10e Fix LEMUR collection centering 2026-08-18 10:54:10 -05:00
davidmezzetti 059ecec2ee Build script workaround #1193 2026-08-18 09:58:35 -04:00
davidmezzetti 21c2c38b98 Build script workaround #1193 2026-08-18 09:56:00 -04:00
davidmezzetti 47c05994bf Cleanup of Pooling PRs 2026-08-18 09:53:29 -04:00
Kole Harvey 8f3735101b Resolve pooling method from a config missing pooling_mode_mean_tokens 2026-08-18 09:14:20 -04:00
Aryan Pardeshi 438ade31b6 Add max pooling 2026-08-18 09:12:32 -04:00
davidmezzetti 3ea197468d Code cleanup 2026-08-12 09:35:13 -04:00
LHMQ878 99ebbdfea2 fix: create default agent tools on first use (#1175) 2026-08-12 07:30:37 -04:00
David Mezzetti 5570dbc7b6 Merge pull request #1183 from FU-max-boop/fix/openai-latest-message
Fix OpenAI chat message selection
2026-08-12 07:29:43 -04:00
FU-max-boop 01b456900a Fix OpenAI chat message selection 2026-08-11 13:26:29 +08:00
davidmezzetti a0857e980a Update output validation #1181 2026-08-10 22:02:42 -04:00
davidmezzetti 84be3476d8 Add safeopen validation to retrieve task output, closes #1181 2026-08-10 19:29:05 -04:00
davidmezzetti f35d932979 Refactor late encoding logic to cleanup logic paths, closes #1180 2026-08-10 18:47:58 -04:00
Tai An a1c9b94d00 fix(muvera): consume true token rows instead of batch-padded ones (#1177) 2026-08-10 13:24:21 -04:00
Aryan Pardeshi 11ebacdb23 Convert MUVERA algorithm from NumPy to Torch (#1178) 2026-08-10 13:20:58 -04:00
davidmezzetti 5986fa6082 Test Docling build #1176 2026-08-10 10:57:48 -04:00
davidmezzetti 893a333887 Test Docling build fix #1176 2026-08-10 10:15:16 -04:00
David Mezzetti e54255f4e4 Merge pull request #1179 from latent-9/fix-spelling-typos
Fix spelling typos in documentation and docstrings
2026-08-10 09:08:58 -04:00
latent-9 f89835bc77 Fix spelling typos in documentation and docstrings 2026-08-10 04:40:37 +12:00
davidmezzetti ea531b3420 Build script workaround #1176 2026-08-04 12:24:05 -04:00
davidmezzetti 756917f14b Build script workaround #1176 2026-08-04 12:20:17 -04:00
davidmezzetti b1f4845284 Build script workaround #1176 2026-08-04 12:13:14 -04:00
David Mezzetti d2b1d3634f Merge pull request #1172 from morgan-coded/feat/lemur-trainer
Consolidate LEMUR training in the trainer pipeline
2026-08-04 10:12:05 -04:00
morgan-coded 193facd144 test: cover the tqdm library stub 2026-08-03 20:50:04 -05:00
morgan-coded 436662e32b feat: promote tqdm to a default library dependency 2026-08-03 14:32:12 -05:00
morgan-coded 54644a0526 chore: add lint pragma and docstring for relocated trainer tests 2026-08-02 18:11:54 -05:00
morgan-coded 817a2b142a fix: keep minimal installs importable 2026-08-02 17:04:51 -05:00
morgan-coded 987cff001f feat: consolidate LEMUR training in trainer
Move fitting, data preparation, model setup, epoch selection and progress feedback into LemurTrainer while keeping artifact loading and encoding in the pooler.
2026-08-02 16:55:32 -05:00
David Mezzetti 8383e6ce8d Merge pull request #1171 from morgan-coded/chore/lemur-style
Align LEMUR names with txtai style
2026-08-02 16:49:32 -04:00
morgan-coded 0be1231d8d chore: align LEMUR names with txtai style 2026-08-02 14:21:38 -05:00
David Mezzetti 79e277fb7d Merge pull request #1168 from morgan-coded/feat/center
Add configurable mean centering to late pooling
2026-08-02 13:36:13 -04:00
morgan-coded f4472312ba test: use portable tolerances for cross-batch comparisons 2026-08-02 06:47:56 -05:00
morgan-coded 90f7cc2078 test: isolate uncentered LEMUR coverage 2026-08-01 22:40:57 -05:00
morgan-coded ce11b08ab1 fix: address centering review feedback 2026-08-01 22:13:38 -05:00
morgan-coded 75b4ce5c7f feat: add configurable late pooling centering 2026-08-01 18:37:42 -05:00
David Mezzetti 2ef401bb78 Merge pull request #1164 from morgan-coded/feat/lemur
Add LEMUR fixed dimensional encoding
2026-08-01 17:35:07 -04:00
davidmezzetti 8c43c70687 Bump version 2026-07-30 17:43:11 -04:00
David Mezzetti 48e22b593c Merge pull request #1163 from AmirF194/fix/scoring-delete-unindexed-id
Fix Scoring.delete() crashing on ids that were never indexed
2026-07-30 14:48:11 -04:00
davidmezzetti 3beea7f4bf Add safeopen option for retrieve task, closes #1166 2026-07-30 14:36:52 -04:00
morgan-coded 626cc8fbe0 Add LEMUR validation coverage 2026-07-30 12:03:07 -05:00
davidmezzetti 21b9049c86 Allow disabling API routes, closes #1165 2026-07-30 12:49:38 -04:00
davidmezzetti abf504f70e Update configuration section for workflow tasks 2026-07-30 12:44:34 -04:00
davidmezzetti d9e9a9e684 Pin mcp < 2.0 until upstream issues resolved #1161 2026-07-30 12:43:47 -04:00
Amir Fathi bd199158b6 Fix Scoring.delete() crashing on ids that were never indexed 2026-07-30 12:35:35 +00:00
morgan-coded 390cc08b11 Document LEMUR training and configuration 2026-07-30 07:02:16 -05:00
morgan-coded feac4c8306 Test LEMUR pooling and training 2026-07-30 07:02:16 -05:00
morgan-coded d7f974b3d7 Add LEMUR training pipeline 2026-07-30 07:02:16 -05:00
morgan-coded d8fa848f73 Integrate LEMUR late pooling 2026-07-30 07:02:16 -05:00
morgan-coded bbd23bb12c Add LEMUR fixed dimensional encoding 2026-07-30 07:02:16 -05:00
David Mezzetti 8362110c64 Merge pull request #1162 from morgan-coded/fix/milvus-lite-version-floor
Set minimum milvus-lite version
2026-07-29 07:51:07 -04:00
morgan-coded 83e1835b6d Set minimum milvus-lite version 2026-07-28 20:33:31 -05:00
davidmezzetti cf2368269f Build script workaround #1161 2026-07-28 11:14:49 -04:00
davidmezzetti a910ddbbea Add Milvus tests on Windows #1156 2026-07-28 10:37:38 -04:00
davidmezzetti 7b49504dca Update test 2026-07-23 11:54:09 -04:00
davidmezzetti 86af7ec344 Test updates 2026-07-23 10:10:28 -04:00
Amir Fathi 50ca7b2fde Fix HNSW search RuntimeError when limit exceeds indexed element count (#1159) 2026-07-23 08:42:33 -04:00
David Mezzetti 7c8d001492 Merge pull request #1151 from link89/fix-openapi-auth-ui
fix Swagger UI auth issue
2026-07-23 08:30:09 -04:00
weihong.xu dea0a65fd1 implement auth with HTTPBearer for correct openapi spec 2026-07-23 09:56:26 +08:00
davidmezzetti a1224c06f1 Doc and test update 2026-07-22 09:43:36 -04:00
davidmezzetti 162b65d3d9 Remove file 2026-07-22 07:38:17 -04:00
davidmezzetti 363f8ca7cf Ensure explain / batchexplain don't return numpy values, closes #1157 2026-07-22 06:53:07 -04:00
davidmezzetti 1d084941f4 Code cleanup 2026-07-22 06:37:42 -04:00
Andrew Chen 597ba8133d Fix msgpack Accept header crashing streaming API endpoints (#1144) 2026-07-22 06:14:07 -04:00
Andrew Chen 6bbb25872a Fix Terms KeyError on a query with no similar() clause (#1142) 2026-07-22 06:13:33 -04:00
davidmezzetti f22bf5bbb5 Update test 2026-07-21 14:29:12 -04:00
davidmezzetti 83871c6fe3 Add documentation for Milvus ANN 2026-07-21 13:24:23 -04:00
davidmezzetti 2c6ec162d0 Skip Milvus tests on Windows #1156 2026-07-21 13:10:56 -04:00
davidmezzetti d59c88424d Code cleanup 2026-07-21 12:59:57 -04:00
David Mezzetti 95c7b8df1e Merge pull request #1149 from morgan-coded/milvus-lite-backend
Add milvus-lite embedded dense ANN backend
2026-07-21 12:41:05 -04:00
Loi Nguyen 2389b5946c Fix Segmentation dropping paragraph/section splits on CRLF line endings (#1152) 2026-07-21 12:29:12 -04:00
Andrew Chen b246b642c7 Fix LIMIT bind-parameter crashing content SQL search (#1148) 2026-07-21 12:26:15 -04:00
Andrew Chen 46467a3453 Raise SQLError on empty select expressions and a dangling AS (#1147) 2026-07-21 12:24:12 -04:00
davidmezzetti fcfd340ff1 Cleanup tests 2026-07-21 12:18:35 -04:00
Andrew Chen 77965f44dd Fix Cluster.shard TypeError on tuple documents and empty-string ids (#1146) 2026-07-21 11:57:57 -04:00
Andrew Chen 7435297bac Fix console printing a traceback for a query with no results (#1145) 2026-07-21 11:51:11 -04:00
Andrew Chen 3bb34eae2e Fix Terms.search AttributeError on an empty terms index (#1143) 2026-07-21 11:40:43 -04:00
Andrew Chen 79a28641b2 Fix TemplateTask.match KeyError when a rule key is missing from element (#1141) 2026-07-21 11:25:58 -04:00
Andrew Chen 7c77c134e2 Fix HTMLToMarkdown crash on a meta description tag with no content attribute (#1140) 2026-07-21 11:23:29 -04:00
Andrew Chen d6f696d795 Fix Aggregate IndexError on a SQL query that matched nothing across shards (#1139) 2026-07-21 11:19:28 -04:00
davidmezzetti d8ae6776f8 Only resolve transform functions when env variable set, closes #1155 2026-07-21 11:07:58 -04:00
davidmezzetti e18e3d1245 Reduce verbose comment 2026-07-21 10:40:32 -04:00
Andrew Chen ee0d1a0214 fix: Task.filteredrun crashes/corrupts output for single-action tasks with merge disabled (#1138) 2026-07-21 10:16:26 -04:00
davidmezzetti 5ddedf07cd Fix test order 2026-07-21 10:13:44 -04:00
David Mezzetti 590c71f593 Merge pull request #1154 from winklemad/fix/ivfsparse-sort-order
Fix IVFSparse returning unsorted sparse ANN search results
2026-07-21 10:11:17 -04:00
winklemad c33188a0f8 Fix IVFSparse returning unsorted sparse ANN search results
IVFSparse.topn selects the top n with np.argpartition but never sorts them, so
search results came back in arbitrary order instead of ranked by score descending
like every other backend (numpy argsort, hnsw/faiss, sqlite ORDER BY, pgvector).
Sort each row by score after the partition. The LateEncoder pipeline used the same
argpartition-without-sort pattern in its ranking path and is fixed the same way.
2026-07-21 18:46:36 +05:30
davidmezzetti 638a2e12b1 Validate resolver target classes, closes #1153 2026-07-21 09:13:43 -04:00
morgan-coded 03da5c96fb Rename milvuslite backend to milvus per maintainer request 2026-07-17 08:08:57 -05:00
morgan-coded 99086302ce Add milvus-lite as a dense ANN backend 2026-07-16 11:15:18 -05:00
davidmezzetti 2f11f93743 Code cleanup 2026-07-14 15:27:55 -04:00
davidmezzetti 783d9cf680 Cleanup docs 2026-07-14 15:15:21 -04:00
David Mezzetti 281babeff7 Merge pull request #1137 from chuenchen309/fix/graph-filter-unknown-node-id
Fix Graph.filter() crash on ids that don't exist in the graph
2026-07-14 14:19:06 -04:00
David Mezzetti a71732198a Merge branch 'master' into fix/graph-filter-unknown-node-id 2026-07-14 14:18:14 -04:00
Morgan Carr 14cbe51e04 Add zvec as a dense ANN backend (#1130) 2026-07-14 13:41:35 -04:00
davidmezzetti 5d15f7fa66 Revert #1136 as it's confirmed to not be necessary 2026-07-14 13:40:09 -04:00
davidmezzetti ac2dc6a30b Code cleanup 2026-07-14 13:36:50 -04:00
chuenchen309andClaude Opus 4.8 7791174c1b Fix Graph.filter() crash on ids that don't exist in the graph
Graph.filter() unpacked self.node(node) with ** into addnode() for every
input id, but self.node() returns None for an id not present in the
graph. **None raises TypeError instead of the filter simply skipping an
id it doesn't recognize - the docstring says nodes are "nodes to select",
with no stated precondition that every id must already exist.

Skip ids where self.node() returns None instead of crashing.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-15 00:09:32 +08:00
David Mezzetti b21ba7065e Merge pull request #1136 from chuenchen309/fix/graph-insert-none-text-index-desync
Fix Graph.insert() node id desync when a document's text/object field is None
2026-07-14 11:11:06 -04:00
chuenchen309andClaude Opus 4.8 10a6b23304 Fix Graph.insert() node id desync when a document's text/object field is None
Graph.insert() decided whether a document consumed an indexid slot based
on whether the resolved text/object value was not None. But the actual
vector index offset, computed by Transform.stream() (embeddings/index/
transform.py), increments based on key presence (`self.text in
document[1]`), regardless of the value. A document like {"text": None}
consumes a real vector index slot but was skipped by Graph.insert()
without incrementing its own index counter, so every subsequent document
in the batch got assigned to the wrong graph node id - a silent,
permanent misattribution of node ids to the wrong document data.

Track slot consumption with the same key-presence criterion Transform.
stream() uses (hasfield), separately from whether a node actually gets
created for that slot (still gated on the resolved value being non-None,
so no node is created for a genuinely empty document - but the index
still advances, leaving a gap instead of shifting every later id).

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-14 22:55:12 +08:00
David Mezzetti 576f0ddcd7 Merge pull request #1135 from chuenchen309/fix/filetask-urltask-non-string-crash
Fix FileTask/UrlTask crash on non-string elements
2026-07-14 10:36:26 -04:00
chuenchen309andClaude Opus 4.8 9b8a606a16 Fix FileTask/UrlTask crash on non-string elements
Task.accept() is deliberately written to tolerate arbitrary element types
(including None) so heterogeneous batches can flow through a multi-task
workflow, letting a task pass through elements it doesn't recognize rather
than crashing. UrlTask.accept and FileTask.accept override this but called
element.lower()/re.sub(..., element) unconditionally, assuming element was
already a string:

- UrlTask.accept: super().accept(element) short-circuits True whenever no
  select filter is configured, then element.lower() raises AttributeError
  on any non-string element (including None).
- FileTask.accept: re.sub(FileTask.FILE, "", element) ran before the
  isinstance(element, str) check further down, so that check was dead code
  for the exact case it looked like it guarded against, and raised
  TypeError on any non-string element.

Both now check isinstance(element, str) before doing string operations, so
non-string/None elements pass through unchanged instead of crashing.
ImageTask inherits FileTask.accept and needed no change - it's protected
by the same fix via short-circuit evaluation.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-07-14 21:54:43 +08:00
davidmezzetti 01344b021c Test Python with build script #1134 2026-07-14 09:33:15 -04:00
davidmezzetti dd00608b9a Test Python with build script #1134 2026-07-14 09:28:05 -04:00
davidmezzetti 702e0b880f Test Python with build script #1134 2026-07-14 09:25:48 -04:00
davidmezzetti 14ac0e4cc5 Test Python 3.11 with build script #1134 2026-07-14 09:08:13 -04:00
davidmezzetti 1f28e5401d Test Python 3.11 with build script #1134 2026-07-14 08:48:00 -04:00
davidmezzetti a84f0a388c Fix test 2026-07-13 19:47:15 -04:00
davidmezzetti 510f9c18ed Update build script 2026-07-13 17:55:21 -04:00
davidmezzetti ae67f63359 Update build script 2026-07-13 17:39:07 -04:00
davidmezzetti 0e16a22051 Update build script 2026-07-13 17:10:17 -04:00
davidmezzetti bfd0aa7ff4 Update build script 2026-07-13 17:06:29 -04:00
davidmezzetti ba2ea2db4e Update build script 2026-07-13 16:57:19 -04:00
davidmezzetti 1daac761aa Update build script 2026-07-13 16:55:07 -04:00
davidmezzetti e9e65393a0 Update build script 2026-07-13 16:52:26 -04:00
davidmezzetti 24ca4e36ca Update build script 2026-07-13 16:32:59 -04:00
davidmezzetti 8208780b6a Update build script 2026-07-13 16:30:29 -04:00
davidmezzetti c3735dd5d4 Add tokenbatch size to HFTrainer pipeline, closes #1133 2026-07-13 16:15:02 -04:00
davidmezzetti 6544d123f6 Update test to work with latest version of pgvector 2026-07-13 16:08:53 -04:00
davidmezzetti aa0a8cfc32 Cleanup code from #1125 2026-07-02 10:37:57 -04:00
David Mezzetti fc6f93828b Merge pull request #1125 from Sanjays2402/fix/unterminated-sql-clause
Raise SQLError on unterminated bracket, function and similar clauses
2026-07-02 09:41:17 -04:00
Sanjay Santhanam 796c5bb0a8 Raise SQLError on unterminated bracket, function and similar clauses
The token consumer loops in Expression.bracket(), Expression.function() and
Expression.similar() read the next token with next(iterator, (None, None)) but
never checked for the end-of-stream sentinel. When a clause was left
unterminated (e.g. "select [a from txtai", "select func(a from txtai" or
"select * from txtai where similar('abc'"), the iterator was exhausted and the
code indexed tokens[None], raising a cryptic

    TypeError: list indices must be integers or slices, not NoneType

instead of the SQLError that the database layer documents and callers catch for
invalid SQL. The parse step runs before the query is handed to the database, so
this TypeError escaped the SQLError wrapping in Database.execute().

Add Expression.advance(), a small helper that wraps next() and raises SQLError
when the token stream is exhausted mid-clause, and route the three delimited
consumer loops through it. Auto-closing the clause instead was rejected because
it would silently reinterpret malformed input (e.g. "select [a" would become the
valid column "a"), masking the user error. This mirrors the existing None-guard
convention already used in Expression.compound().

Behavior on valid queries is unchanged (advance() only diverges from the old
code path when the iterator is empty). Adds testUnterminated covering
unterminated bracket, function and similar clauses.
2026-07-01 23:11:21 -07:00
davidmezzetti 7613acd6e5 Bump version 2026-07-01 15:24:55 -04:00
davidmezzetti 9db11953c5 Bump Torch version 2026-07-01 15:24:49 -04:00
davidmezzetti 2ecf4412fc Update build script 2026-07-01 10:32:49 -04:00
davidmezzetti 13b1a0f986 Update commonprefix to commonpath, closes #1120 2026-06-22 12:58:57 -04:00
davidmezzetti 89d5207b6e Limit tabular pipeline to local CSV files, closes #1119 2026-06-22 12:55:31 -04:00
davidmezzetti 21e6ab8e6a Add missing dependency #1118 2026-06-19 11:22:36 -04:00
davidmezzetti ae898e6905 Add text extraction with LiteParse, closes #1118 2026-06-19 10:51:58 -04:00
davidmezzetti 7aee5f91af Support multiple Dense layers for Late Interaction Pooling, closes #1117 2026-06-18 13:28:01 -04:00
davidmezzetti 7844e2c597 Fix how custom encoding is added to routers, closes #1115 2026-06-16 10:40:31 -04:00
davidmezzetti f9bfc2cb0d Update test 2026-06-16 10:39:37 -04:00
David Mezzetti 535edaf3ad Merge pull request #1114 from JSap0914/fix/ngram-tokenizer-lowercase
fix(tokenizer): respect lowercase=False in ngramtokenize
2026-06-16 07:20:07 -04:00
JSap0914 f507c442fd fix(tokenizer): respect lowercase=False in ngramtokenize
ngramtokenize called text.lower() unconditionally, which silently
overrode the lowercase=False setting. __call__ already lowercases text
before delegating to ngramtokenize when self.lowercase is True, so the
extra .lower() inside ngramtokenize is both redundant for the default
case and incorrect when lowercase=False.

Remove the redundant .lower() call and add a regression test.
2026-06-16 18:51:28 +09:00
davidmezzetti 73e2f6ee51 Remove find from the default list of bash tools, closes #1113 2026-06-11 12:09:45 -04:00
davidmezzetti bc8847edb0 Set minimum transformers version 2026-06-11 11:30:50 -04:00
davidmezzetti d69b72492d Test Transformers required version 2026-06-11 09:59:24 -04:00
davidmezzetti e0ae1450b4 Use gliner fork to relax transformers version caps, closes #1112 2026-06-11 09:08:05 -04:00
davidmezzetti 24c20cc0ff Revert noisy logging workaround, closes #1106 2026-06-11 09:06:59 -04:00
davidmezzetti 5f233d4a74 Update test 2026-06-09 17:16:41 -04:00
davidmezzetti 11b32da720 Add reindex parameter for API, closes #1111 2026-06-09 15:32:04 -04:00
davidmezzetti 039568541b Add note on ALLOW_PICKLE 2026-06-09 15:31:12 -04:00
davidmezzetti df53803cf7 Add turbovec an ANN backend, closes #1109 2026-06-08 12:18:28 -04:00
davidmezzetti 3c4d32f8f7 Migrate from ggml-py to ggml-python #1105 2026-06-08 07:02:18 -04:00
davidmezzetti 68e1c5719e Bump version 2026-06-04 10:57:45 -04:00
davidmezzetti c3211fbce9 Bump Torch version 2026-06-04 10:57:39 -04:00
davidmezzetti 099b89114e Revert ggml-python migration for now until build issues are resolved #1105 2026-06-02 10:49:06 -04:00
davidmezzetti 0428a71243 Test ggml-python build 2026-06-02 10:34:58 -04:00
davidmezzetti 4ce690d225 Migrate from ggml-py to ggml-python, closes #1105 2026-06-02 10:06:50 -04:00
davidmezzetti 9bb4917c0e Update docs 2026-06-01 10:15:51 -04:00
davidmezzetti a3f95a6a26 Add a Progressive Distillation Example Notebook, closes #1104 2026-05-30 09:19:41 -04:00
davidmezzetti e8000315c0 Add a Knowledge Distillation Trainer, closes #1103 2026-05-30 09:19:14 -04:00
davidmezzetti f9ddb23c10 Reduce noisy logging messages with Transformers v5, closes #1102 2026-05-30 09:12:06 -04:00
davidmezzetti 1d058cf487 Add timeout, readlimit and IPv6 support #1100 2026-05-21 22:16:17 -04:00
davidmezzetti a5d097197e Update docs 2026-05-21 18:48:19 -04:00
davidmezzetti 32e098af84 Add URLRetrieve pipeline, closes #1100 2026-05-21 18:12:34 -04:00
davidmezzetti 8844ec96b4 Update test 2026-05-19 15:13:15 -04:00
davidmezzetti 3e8e495bd2 Add missing deps 2026-05-19 14:36:30 -04:00
davidmezzetti 9d5f82e824 Add support for LiteRT vectors, closes #1097 2026-05-19 14:30:04 -04:00
davidmezzetti 57de5b3a94 Update Dockerfile 2026-05-12 15:17:45 -04:00
davidmezzetti e240d0bb02 Bump version 2026-05-12 15:17:32 -04:00
davidmezzetti 08e3568d78 Update test 2026-05-10 05:41:38 -04:00
davidmezzetti 7ff55f32f7 LiteRT updates 2026-05-09 21:01:05 -04:00
davidmezzetti 0ca702cea2 Update tests 2026-05-08 22:52:47 -04:00
davidmezzetti bb8e9f8a03 Update test 2026-05-08 22:05:45 -04:00
davidmezzetti f2ab0087d5 Update build script 2026-05-08 21:38:16 -04:00
davidmezzetti 47620b194a Update build script 2026-05-08 21:13:55 -04:00
davidmezzetti 798ff2e0ed Add LiteRT-LM LLM, closes #1095 2026-05-08 16:26:15 -04:00
davidmezzetti 345aea0544 Zero dependency minimal install, closes #1094 2026-05-08 08:16:22 -04:00
davidmezzetti 65b72bfdfa Reduce dependencies to just numpy for minimal install, closes #1093 2026-05-07 16:27:05 -04:00
davidmezzetti b14229c1da Make transformers package optional for minimal install, closes #1091 2026-05-05 15:27:44 -04:00
davidmezzetti a0e2c9e4ab Add minimal Docker build script, closes #1092 2026-05-05 15:27:09 -04:00
davidmezzetti d0ddedc048 Add txtai_minimal package, closes #1090 2026-05-05 09:46:27 -04:00
davidmezzetti 6d15bd404a Update build script 2026-05-04 09:46:32 -04:00
davidmezzetti 20fff84a7e Support minimal install for edge devices, closes #1089 2026-05-04 09:26:52 -04:00
davidmezzetti 8643baec3e Update test 2026-05-01 11:43:39 -04:00
davidmezzetti 40c92c15d6 Code cleanup 2026-05-01 10:49:02 -04:00
davidmezzetti 8745aca849 Update test 2026-05-01 10:05:54 -04:00
davidmezzetti 109a4d3c66 Various training pipeline fixes for v5, closes #1088 2026-05-01 09:23:21 -04:00
davidmezzetti 676b997f57 Add custom Questions pipeline implementation, closes #1087 2026-05-01 09:22:07 -04:00
davidmezzetti 2f8860afde Add custom Sequences pipeline implementation, closes #1086 2026-05-01 09:21:17 -04:00
davidmezzetti 688734136c Add custom Summary pipeline implementation, closes #1085 2026-05-01 09:16:18 -04:00
davidmezzetti 1109094c78 Add custom Captions implementation, closes #1084 2026-05-01 09:15:18 -04:00
davidmezzetti cfbf235f54 Bump version 2026-04-29 13:38:32 -04:00
davidmezzetti c10a042cc3 Update build script 2026-04-29 10:41:34 -04:00
davidmezzetti f0715869a4 Test latest version of ggml-py library 2026-04-29 10:09:20 -04:00
davidmezzetti fbce87b9ee Limit template scope with Agents, closes #1080 2026-04-29 07:30:25 -04:00
davidmezzetti 0c6cb615d2 Add link to txtai paper 2026-04-21 08:52:18 -04:00
davidmezzetti 8e569462f2 Performance Improvement: Use JOIN when JSON fields being used, closes #1078 2026-04-20 10:57:57 -04:00
davidmezzetti 12c8b52b5e Update recommended models and links 2026-04-14 10:12:05 -04:00
davidmezzetti a67870aefd Update test 2026-04-08 11:20:37 -04:00
davidmezzetti 40da21b2c3 Update documentation 2026-04-08 11:02:40 -04:00
davidmezzetti 7b055c5b26 Update to handle /tmp being a symlink on macOS 2026-04-08 10:53:35 -04:00
davidmezzetti 6971dc422b Update test 2026-04-08 10:35:09 -04:00
davidmezzetti 511f479251 Add safeopen parameter for Textractor, closes #1077 2026-04-08 10:21:02 -04:00
davidmezzetti c2e2f5d86e Add support for streaming Labels pipeline, closes #1075 2026-04-07 13:16:29 -04:00
davidmezzetti efb0006793 MCP server updates, closes #899, closes #1073 2026-04-07 13:16:05 -04:00
davidmezzetti 04153bd737 Add support for last token pooling, closes #1072 2026-04-05 14:43:41 -04:00
davidmezzetti f2e02dff4a Update embeddings documentation to mention loading ONNX vector models, closes #1071 2026-04-05 10:00:51 -04:00
davidmezzetti b0b181d7e8 Remove build script workaround, closes #1067 2026-03-27 09:45:34 -04:00
davidmezzetti fe916d0049 Re-add build script workaround #1067 2026-03-27 09:25:39 -04:00
davidmezzetti a44dbd1809 Test build dependency fix #1067 2026-03-27 08:08:06 -04:00
davidmezzetti ba6d67498b Add build script workaround #1067 2026-03-27 07:37:37 -04:00
davidmezzetti 1e731c3eb7 Remove build script workaround, closes #1066 2026-03-26 13:51:08 -04:00
davidmezzetti 354b881318 Add build script workaround #1066 2026-03-24 21:29:53 -04:00
davidmezzetti 8fcfa6363a Bump torch version 2026-03-24 08:44:26 -04:00
davidmezzetti d582bf335b Bump version 2026-03-20 13:44:27 -04:00
davidmezzetti 7e3c0e16a4 Add video link 2026-03-17 13:32:32 -04:00
davidmezzetti d12a6681ea Add agent tools example notebook, closes #1062 2026-03-16 14:51:49 -04:00
davidmezzetti 80b90cdbd6 Update comment 2026-03-14 13:16:50 -04:00
davidmezzetti 6343779678 Apply sigmoid to fused BB25 scores, closes #1053 2026-03-14 13:14:29 -04:00
davidmezzetti 2d50a4c202 Add coding agent toolkit, closes #1054 2026-03-14 07:33:17 -04:00
davidmezzetti d2b3758005 Add write tool, closes #1061 2026-03-14 07:32:17 -04:00
davidmezzetti 4c03a8106f Add todowrite tool, closes #1060 2026-03-14 07:31:12 -04:00
davidmezzetti 8f583b2446 Add read tool, closes #1059 2026-03-14 07:30:37 -04:00
davidmezzetti e9c34adde3 Add grep tool, closes #1058 2026-03-14 07:30:02 -04:00
davidmezzetti 6ee6656d40 Add glob tool, closes #1057 2026-03-14 07:29:29 -04:00
davidmezzetti f388ecb4a1 Add edit tool, closes #1056 2026-03-14 07:28:57 -04:00
davidmezzetti 1a0b11654b Add bash tool, closes #1055 2026-03-14 07:28:24 -04:00
JiangNan 79908eee5a Fix translation chunk concatenation when showmodels is enabled (#1052)
* Fix translation chunk concatenation when showmodels is enabled

When translating long text that gets split into multiple chunks by the
tokenizer, the translate() method combines results from the same source
text segment. With showmodels=True, each result is a tuple (path, text).
Using += to combine tuples produces (path, text1, path, text2) instead
of the expected (path, text1+text2). This causes a ValueError when the
caller unpacks with "model, op = outputs[y]" since there are too many
values.

Fix by explicitly concatenating only the text portion of the tuple when
showmodels is enabled.

Signed-off-by: JiangNan <[email protected]>

* Add unit test for showmodels with chunked translation

Adds testLongTranslationWithShowmodels to verify that when text is long
enough to be chunked by the tokenizer, the showmodels result is still a
proper 3-tuple (translation, language, model) and not a malformed tuple
from incorrect concatenation.

Signed-off-by: JiangNan <[email protected]>

* Shorten test method name to fix build

Rename testLongTranslationWithShowmodels -> testShowmodelsChunked
as the previous name was too long for the test runner.

Signed-off-by: JiangNan <[email protected]>

---------

Signed-off-by: JiangNan <[email protected]>
2026-03-09 14:39:54 -04:00
davidmezzetti 69cc7538ac Remove coveralls build script workaround 2026-03-04 13:33:59 -05:00
davidmezzetti 0e3b7ff959 Bump version 2026-02-25 14:42:11 -05:00
davidmezzetti cd116aaa57 Add build script workaround while coveralls is down 2026-02-25 11:33:27 -05:00
davidmezzetti d1aa381e0e Add build script workaround while coveralls is down 2026-02-25 10:54:42 -05:00
davidmezzetti 96234c5754 Reformat docs 2026-02-24 17:36:25 -05:00
davidmezzetti 312f1653e7 Reformat docs 2026-02-24 17:33:52 -05:00
davidmezzetti 5cd7d7e407 Cache Agent Template, closes #1051 2026-02-24 17:08:54 -05:00
davidmezzetti 1a64d33823 Improve subindexes documentation 2026-02-24 17:07:36 -05:00
davidmezzetti 3073589ad6 Add deterministic setting to database functions closes #1048. Add ability to index database expressions #1049 2026-02-22 16:38:54 -05:00
davidmezzetti 2f2bd50027 Add ability to index database expressions, closes #1049 2026-02-22 16:37:11 -05:00
davidmezzetti f7380f64da Add store field to columns configuration, closes #1050 2026-02-22 16:36:08 -05:00
davidmezzetti a53b431492 Add support for custom SQL functions with DuckDB, closes #1047 2026-02-21 06:43:56 -05:00
davidmezzetti 2c937db56b Add sparse normalization info to docs 2026-02-21 06:43:24 -05:00
Jaepil Jeong ba0d1eaead Add BB25 normalization for sparse encoders (#1046)
* Add log-odds conjunction fusion for BB25 hybrid search

BB25 normalization outputs calibrated probabilities, but the existing
hybrid fusion uses convex combination which discards the Bayesian
probability semantics. This causes BB25 to regress on 4/5 BEIR datasets.

Add log-odds conjunction fusion (from "From Bayesian Inference to Neural
Computation") that correctly combines probability signals in logit space
with per-query dynamic calibration for dense cosine scores.

- scoring/normalize.py: Extract Bayesian method check into isbayes()
- scoring/base.py: Add default isbayes() returning False
- scoring/tfidf.py: Add isbayes() delegating to normalizer
- search/base.py: Add logodds(), convex(), rrf() fusion methods;
  dispatch based on isbayes()

BEIR nDCG@10 results (BB25+LogOdds vs Default):
  arguana +2.23, fiqa +2.03, scidocs +0.62, scifact +1.33, nfcorpus -1.96

* Extract Hybrid class for score fusion strategies

Move logodds, convex, and rrf fusion methods from Search into
a dedicated Hybrid class, following the same pattern as Normalize.

* Fix coding convention issues in Hybrid class for CI

- Fix black formatting: remove unnecessary parentheses, remove spaces around **
- Fix pylint too-many-branches: extract calibrate() method from logodds()
- Fix pylint unused-variable: rename score to _ in rrf()

* Add BB25 normalization for sparse encoders and fix IVFSparse topn bug

- Support `normalize: bb25` config for sparse encoder scoring, enabling
  Bayesian sigmoid calibration as an alternative to default linear
  normalization. Reuses existing Normalize.bayes() infrastructure.

- Fix dimension check in IVFSparse.topn(): use scores.shape[1] (number
  of data items) instead of scores.shape[0] (number of queries) for the
  argpartition kth bound check. The previous code caused ValueError when
  the number of centroids was less than nprobe.

* Add tests for BB25 sparse normalization and IVFSparse topn fix
2026-02-20 14:40:18 -05:00
davidmezzetti 89299926bd Add additional methods 2026-02-18 15:44:59 -05:00
davidmezzetti 00acd243b0 Code standardization and added tests #1041 2026-02-18 14:18:11 -05:00
Jaepil Jeong 48f0962a44 Add log-odds conjunction fusion for BB25 hybrid search (#1041)
* Add log-odds conjunction fusion for BB25 hybrid search

BB25 normalization outputs calibrated probabilities, but the existing
hybrid fusion uses convex combination which discards the Bayesian
probability semantics. This causes BB25 to regress on 4/5 BEIR datasets.

Add log-odds conjunction fusion (from "From Bayesian Inference to Neural
Computation") that correctly combines probability signals in logit space
with per-query dynamic calibration for dense cosine scores.

- scoring/normalize.py: Extract Bayesian method check into isbayes()
- scoring/base.py: Add default isbayes() returning False
- scoring/tfidf.py: Add isbayes() delegating to normalizer
- search/base.py: Add logodds(), convex(), rrf() fusion methods;
  dispatch based on isbayes()

BEIR nDCG@10 results (BB25+LogOdds vs Default):
  arguana +2.23, fiqa +2.03, scidocs +0.62, scifact +1.33, nfcorpus -1.96

* Extract Hybrid class for score fusion strategies

Move logodds, convex, and rrf fusion methods from Search into
a dedicated Hybrid class, following the same pattern as Normalize.

* Fix coding convention issues in Hybrid class for CI

- Fix black formatting: remove unnecessary parentheses, remove spaces around **
- Fix pylint too-many-branches: extract calibrate() method from logodds()
- Fix pylint unused-variable: rename score to _ in rrf()
2026-02-18 09:22:45 -05:00
davidmezzetti 1c181e4070 Update docs 2026-02-16 19:05:41 -05:00
davidmezzetti 371d5d8a19 Add test for bb25 2026-02-16 19:01:44 -05:00
davidmezzetti 834e4eb60d Fix cursor error with multithreaded keyword search, closes #1039 2026-02-16 19:01:27 -05:00
davidmezzetti fc579d77aa Update dtype to np.float32 2026-02-16 15:54:22 -05:00
Sigrid Jin (ง'̀-'́)ง oO 90e66075f6 Add Bayesian normalization "bb25" method for keyword scoring (#1037)
* Add Bayesian normalization for keyword scoring

* Add BB25 alias docs and references

* Align BB25 normalization with cognica candidate-set behavior
2026-02-16 15:53:26 -05:00
davidmezzetti 99339570cb Add new features to ngram tokenizer, closes #1038 2026-02-16 15:47:03 -05:00
davidmezzetti 38170a4ab1 Support ngram tokenization, closes #1017 2026-02-16 09:41:41 -05:00
Rin 5a66065b34 Escape single quotes in dynamic column names to prevent SQL injection (#1026) 2026-02-15 10:50:45 -05:00
davidmezzetti 090937a396 Bump version 2026-02-12 17:42:47 -05:00
davidmezzetti d6bd6fc4c6 Slight code improvement 2026-02-11 13:29:54 -05:00
davidmezzetti 90bee00f1d Add ability to store agent memory by session, closes #1025 2026-02-11 13:18:18 -05:00
davidmezzetti f013ca7d1d Workaround macOS test failure 2026-02-10 13:12:37 -05:00
davidmezzetti bfd1f13f2b Workaround macOS test failure 2026-02-10 12:20:32 -05:00
davidmezzetti f682fd949a Fix issue with latest version of FastAPI, closes #1022 2026-02-10 10:46:41 -05:00
davidmezzetti 4758907f3b Add input merging modes for language modeling training, closes #1021. Closes #1020 2026-02-10 09:42:23 -05:00
davidmezzetti b9cec19941 Update docs 2026-02-04 13:18:47 -05:00
davidmezzetti b7c9b156f6 Add example demonstrating how to use skill.md files, closes #1019 2026-02-04 13:18:39 -05:00
davidmezzetti 361b6fe2a5 Add example demonstrating how to use agents.md files, closes #1018 2026-02-04 13:18:21 -05:00
davidmezzetti 45e6080999 Update templates for agent memory 2026-02-04 13:17:49 -05:00
davidmezzetti 92461fe651 Add support for Agent memory, closes #1016 2026-01-30 16:22:01 -05:00
davidmezzetti 3a46f51f25 Add support for agents.md and skill.md. Closes #1014. Closes #1015 2026-01-30 15:35:19 -05:00
davidmezzetti 67543ab31c Update build script versions 2026-01-28 07:47:58 -05:00
davidmezzetti 14c440ac45 Bump version 2026-01-23 12:48:18 -05:00
davidmezzetti 7672f42743 httpx import at module level causes ModuleNotFoundError for Embeddings-only usage, closes #1012 2026-01-23 11:39:11 -05:00
davidmezzetti f360c2d98e Add minimal build workflow, closes #1013 2026-01-23 11:06:52 -05:00
davidmezzetti b4c80cf2e8 Bump torch version 2026-01-21 12:58:57 -05:00
davidmezzetti 831c3fd7d2 Bump version 2026-01-21 12:58:48 -05:00
davidmezzetti d3c498f316 Update documentation 2026-01-21 08:29:25 -05:00
davidmezzetti 001b97b0bf Add example notebook covering OpenCode LLM, closes #1011 2026-01-21 08:28:41 -05:00
davidmezzetti c48ecb3062 Add OpenCode LLM, closes #1010 2026-01-19 21:14:37 -05:00
davidmezzetti f7d5790d07 Update Faiss workaround code #1009 2026-01-16 04:46:18 -05:00
davidmezzetti 5e3492799b Update Faiss workaround code #1009 2026-01-15 20:56:19 -05:00
davidmezzetti 2c3a21490a Update imports 2026-01-15 17:42:44 -05:00
davidmezzetti 846cf2ddc7 Update notes on KMP_DUPLICATE_LIB_OK, closes #1009 2026-01-15 16:18:10 -05:00
davidmezzetti ceb7a4a8f8 Add KMP_DUPLICATE_OK workaround for Faiss OMP Error #1009 2026-01-15 16:06:04 -05:00
davidmezzetti 79e2f9bdef Add video link 2026-01-15 14:39:33 -05:00
davidmezzetti 8d8b29e41c Fix links 2026-01-15 13:21:54 -05:00
davidmezzetti bd2a516eb4 Add example notebook showing how to finetune LLMs, closes #1008 2026-01-15 12:52:07 -05:00
davidmezzetti d4e8ee41f4 Update baseball application #1003 2026-01-11 10:30:34 -05:00
davidmezzetti cdf9a40c8e Update baseball application #1003 2026-01-11 10:29:38 -05:00
davidmezzetti a6c64a6944 Add Tokenizer documentation 2026-01-11 09:38:44 -05:00
davidmezzetti 7132f63c46 Add additional tokenization methods for keyword search, closes #1006 2026-01-11 09:04:36 -05:00
davidmezzetti 1ff636de4a Add RAG video link 2026-01-08 15:27:04 -05:00
davidmezzetti 2a63caf83e Reformat code 2026-01-05 12:05:33 -05:00
davidmezzetti 86e768bccb Load instruction prompts for Sentence Transformers models, closes #1004 2026-01-05 12:03:48 -05:00
davidmezzetti 995428d96c Update application 2025-12-24 10:06:32 -05:00
davidmezzetti 7b97ddf9d8 Update application 2025-12-24 05:38:00 -05:00
davidmezzetti 172f804c1b Update application 2025-12-23 20:36:51 -05:00
davidmezzetti 17b4660abe Fix Baseball Sample Application, closes #1003 2025-12-23 19:20:07 -05:00
davidmezzetti 8c22567d10 Bump version 2025-12-22 20:34:03 -05:00
davidmezzetti 1d7b6a98c9 Sync parameter with LLM pipeline default #998 2025-12-15 13:29:46 -05:00
davidmezzetti 1545901d27 Update notebook 2025-12-15 13:29:25 -05:00
davidmezzetti c4b2bc4251 Add documentation for MUVERA vector settings 2025-12-12 21:07:40 -05:00
davidmezzetti 6021194ac9 Update notebook 2025-12-12 14:46:15 -05:00
davidmezzetti 9d4772bb65 Clean notebook 2025-12-12 14:17:48 -05:00
davidmezzetti a8507d024d Add notebook covering any search method with the RAG Pipeline, closes #1002 2025-12-12 14:11:41 -05:00
davidmezzetti 0c2eab7098 Update notebooks 2025-12-12 10:53:35 -05:00
davidmezzetti 4aa9db69fc Update model paths 2025-12-12 10:46:36 -05:00
davidmezzetti aca56cfe53 Modernize example notebooks, closes #1001 2025-12-12 10:31:27 -05:00
davidmezzetti 203855a9d7 Move LLM and RAG docs into their own folder 2025-12-11 21:31:10 -05:00
davidmezzetti 861545a1ed Update test 2025-12-11 21:30:52 -05:00
davidmezzetti 92d02d748d Add support for any callable search function in RAG pipeline, closes #1000 2025-12-11 20:49:57 -05:00
davidmezzetti 75c4f54f63 Add new LLM default parameters, closes #998. Closes #999. 2025-12-11 20:47:45 -05:00
davidmezzetti 5d6d3f7a6b Update deprecated transformers torch_dtype parameter, closes #997 2025-12-11 20:42:46 -05:00
davidmezzetti 48584abdb4 Update documentation 2025-12-10 18:31:46 -05:00
davidmezzetti 1c4f041b91 Update documentation 2025-12-10 17:52:38 -05:00
davidmezzetti 4ba611760d Update documentation 2025-12-10 17:51:27 -05:00
davidmezzetti c61e18a216 Update documentation 2025-12-10 17:47:29 -05:00
davidmezzetti fb257a2e5e Update documentation 2025-12-10 17:46:30 -05:00
davidmezzetti c26a61dcb6 Update documentation 2025-12-10 17:45:05 -05:00
davidmezzetti b5b3922464 Update documentation 2025-12-03 08:32:30 -05:00
davidmezzetti 441d0eabd7 Add Workflow Quickstart Example, closes #996 2025-12-01 18:44:14 -05:00
davidmezzetti 4d6c0ecc47 Update documentation to use more current LLMs, closes #995 2025-11-30 14:51:15 -05:00
davidmezzetti dd83a40197 model_id is not properly passed with current version of smolagents, closes #993 2025-11-30 14:50:35 -05:00
davidmezzetti 58664444a1 args and kwargs should be ignored when inspecting function parameters in agents, closes #994 2025-11-30 14:50:10 -05:00
davidmezzetti 0a401cb9a2 Add Agent Quickstart Example, closes #992 2025-11-30 14:49:08 -05:00
davidmezzetti d3d26a5ebd Add RAG Quickstart Example, closes #991 2025-11-29 07:22:16 -05:00
davidmezzetti d75be702dd Add support for wildcards in scoring term search, closes #990 2025-11-29 06:52:41 -05:00
davidmezzetti 60755501f5 Add Textractor as top level import, closes #989 2025-11-28 08:10:35 -05:00
davidmezzetti e0f8a9404f Upgrade GLiNER, closes #988 2025-11-25 17:23:30 -05:00
davidmezzetti 26ac43df1c Bump version 2025-11-21 17:03:15 -05:00
davidmezzetti b8da57eb88 Bump torch version 2025-11-21 17:02:55 -05:00
davidmezzetti d3a5217153 Limit GLiNER to ignore latest release, closes #984 2025-11-19 08:29:13 -05:00
davidmezzetti 99e3457b1f Fix compatibility with latest version of Faiss, closes #986 2025-11-18 13:28:46 -05:00
davidmezzetti b870a3265a Fix compatibility with latest version of smolagents, closes #985 2025-11-18 11:33:37 -05:00
davidmezzetti 81c152c5ee Update build script 2025-11-18 10:49:35 -05:00
davidmezzetti 90efb5c349 Update documentation for Agents 2025-11-18 08:54:37 -05:00
davidmezzetti 351702249b Workaround build script error with GLiNER #984 2025-11-14 16:11:01 -05:00
davidmezzetti bb37634f8c Update llama.cpp vectors to support default length and batch parameters, closes #983 2025-11-14 09:28:57 -05:00
davidmezzetti 594145840f Support stripthink in streaming LLM responses, closes #981 2025-11-10 16:32:37 -05:00
davidmezzetti 4447053dd4 Add stripthink parameter to LLM API endpoint, closes #980 2025-11-10 16:32:11 -05:00
davidmezzetti 8794d714cc Add tuples option to Segmentation pipeline, closes #979 2025-11-07 14:26:03 -05:00
davidmezzetti 62a7ade776 Update deprecated parameter for HFTrainer, closes #978 2025-11-07 09:26:54 -05:00
davidmezzetti 8a01cd2c06 Bump version 2025-11-04 19:07:02 -05:00
davidmezzetti 02bae7ddf1 Bump torch version 2025-11-04 19:06:53 -05:00
davidmezzetti 1f8e9c5ddb Add GGUF example to low level API example #973 2025-11-01 04:16:29 -04:00
davidmezzetti d64c8d8f27 Add GGML ANN documentation 2025-10-31 22:31:31 -04:00
davidmezzetti fc69c82b94 Update build script 2025-10-31 21:47:39 -04:00
davidmezzetti 75f68c375d Remove debug statement 2025-10-31 21:28:09 -04:00
davidmezzetti e715b3b4f6 Update GGML cpu call 2025-10-31 20:40:01 -04:00
davidmezzetti ce3bdfaee6 Update build script 2025-10-31 12:19:32 -04:00
davidmezzetti 6fa604213b Update build script 2025-10-31 10:37:10 -04:00
davidmezzetti 536a724764 Update build script 2025-10-31 10:14:59 -04:00
davidmezzetti de3fee46e6 Update build script 2025-10-31 07:21:04 -04:00
davidmezzetti 0a074ae559 Update build script 2025-10-30 21:32:02 -04:00
davidmezzetti f4f267d449 Update build script 2025-10-30 18:13:10 -04:00
davidmezzetti cf45a400ce Add GGML ANN, closes #975 2025-10-30 17:53:44 -04:00
davidmezzetti a07b88f003 Fix issue with False ANN settings, closes #976 2025-10-30 17:52:40 -04:00
davidmezzetti 3bc7890360 Add example notebook demonstrating how to access low level vector APIs, closes #973 2025-10-22 13:31:02 -04:00
davidmezzetti e5519d25c3 Update docs 2025-10-17 09:13:02 -04:00
davidmezzetti e662a631e2 Skip quantization tests for macOS 2025-10-17 08:11:05 -04:00
davidmezzetti fb5c3cc468 Update setup.py requirements 2025-10-17 07:34:04 -04:00
davidmezzetti 1d8c941d1b Update setup.py requirements 2025-10-17 07:31:47 -04:00
davidmezzetti 13715059dc Remove build script workaround, closes #970 2025-10-17 07:24:39 -04:00
davidmezzetti e6e1d57ac4 Add quantization support to Torch ANN, closes #971 2025-10-17 07:24:05 -04:00
davidmezzetti 2c45420a70 Pin mcpadapt==0.1.16 until upstream issue resolved #970 2025-10-13 15:49:19 -04:00
davidmezzetti 8dcab1addc Add support for Safetensors storage to NumPy/Torch ANN backend, closes #969 2025-10-13 15:23:03 -04:00
davidmezzetti 7c96fd93d9 Update build script 2025-10-08 13:10:28 -04:00
davidmezzetti 31b6b767fd Update build script 2025-10-08 13:04:41 -04:00
davidmezzetti 612d1ad2f8 Update build script 2025-10-08 12:12:08 -04:00
davidmezzetti f4d00c75a5 Update example 2025-10-08 10:13:01 -04:00
davidmezzetti 0d96790a64 Add GraphRAG example notebook with wikipedia and gpt-oss, closes #967 2025-09-17 16:17:15 -04:00
davidmezzetti 9a1a1e400c Update LLM stripthink parameter to support gpt-oss patterns, closes #966 2025-09-17 16:16:34 -04:00
davidmezzetti a543b028ef Syntax update 2025-09-17 07:59:20 -04:00
davidmezzetti 8ae88a6405 Bump version 2025-09-15 14:32:24 -04:00
davidmezzetti 97e4bdb2b4 Update build script versions 2025-09-11 16:35:52 -04:00
davidmezzetti 741f39495e Update build script versions 2025-09-11 16:29:51 -04:00
davidmezzetti 646af6ba87 Support older versions of Python without extraction filters #965 2025-09-11 13:30:28 -04:00
davidmezzetti fc15901cee Update build scripts 2025-09-11 13:29:38 -04:00
davidmezzetti 97f3175ddf Update build scripts 2025-09-11 12:57:22 -04:00
davidmezzetti 3a4457f563 Update build scripts 2025-09-11 12:49:26 -04:00
davidmezzetti d523a860fa Update build scripts 2025-09-11 12:47:34 -04:00
davidmezzetti e7e44c00e6 Update build script Python setup 2025-09-11 12:22:00 -04:00
davidmezzetti a5eca34c98 Update build script Python setup 2025-09-11 12:19:32 -04:00
davidmezzetti e09c205d70 Update build script Python setup 2025-09-11 12:09:17 -04:00
davidmezzetti 6bef6869f5 Update version 2025-09-11 11:49:50 -04:00
davidmezzetti a5306ae5d7 Code cleanup 2025-09-11 11:48:59 -04:00
davidmezzetti 303a257615 Additional checks for tar file extraction, closes #965 2025-09-11 11:41:09 -04:00
davidmezzetti f082bf2a27 Update build script for macOS builds #964 2025-09-02 14:17:36 -04:00
davidmezzetti 4c698b3638 Update build script for macOS builds, closes #964 2025-09-02 14:15:56 -04:00
davidmezzetti 4e33678099 Update docs 2025-09-02 13:56:37 -04:00
davidmezzetti 3734404449 Update documentation 2025-08-29 15:05:38 -04:00
davidmezzetti ffa4543b2f Bump version 2025-08-28 21:46:43 -04:00
davidmezzetti 5174079c93 Bump torch version 2025-08-28 21:46:35 -04:00
davidmezzetti 9ef94c8c79 Remove build workaround, closes #962 2025-08-28 15:13:50 -04:00
davidmezzetti ba15148b83 Add 9.0 article link 2025-08-28 13:25:15 -04:00
davidmezzetti 1f5a352261 Add exponential http backoff to work around constant HF Hub 429 errors 2025-08-28 09:38:59 -04:00
davidmezzetti 1f5f9cd406 Workaround build issue with latest version of Chonkie #962 2025-08-28 08:34:39 -04:00
davidmezzetti 549632b461 Add what's new in txtai 9.0 notebook, closes #956 2025-08-27 18:18:29 -04:00
davidmezzetti c4152ff4e1 Update benchmarks script to support similarity and reranking pipelines, closes #961 2025-08-27 15:00:44 -04:00
davidmezzetti b8980bc5be Add Reranker pipeline, closes #960 2025-08-27 15:00:12 -04:00
davidmezzetti 0e54ad3c3f Add ability to merge late interaction vectors into fixed dimensional MUVERA vectors, closes #952 2025-08-27 14:58:05 -04:00
davidmezzetti 34e468e475 Remove build script workaround, closes #957 2025-08-19 18:11:54 -04:00
davidmezzetti 28273d0369 Fix issue with device call 2025-08-18 16:29:48 -04:00
davidmezzetti c68c136b2d Add build script workaround for LiteLLM issue #957 2025-08-18 15:58:45 -04:00
davidmezzetti 6fcdcb1e38 Update benchmark scripts to support Similarity pipeline, closes #955 2025-08-18 14:19:30 -04:00
davidmezzetti 2866dd962e Update similarity pipeline to support late interaction models, closes #953 2025-08-18 14:15:28 -04:00
davidmezzetti 1b1ab4c9ea Add support for late interaction models, closes #954 2025-08-18 14:13:59 -04:00
davidmezzetti ad55344f26 Change default behavior for pickle serialization to disabled, closes #949 2025-08-13 12:20:41 -04:00
davidmezzetti 2956bd8789 Modify LiteLLM path detection logic, closes #947 2025-08-06 09:17:29 -04:00
davidmezzetti b53c966fa7 Change sparse vector normalization logic, closes #946 2025-08-05 18:26:49 -04:00
davidmezzetti cd784436ef Track indexing progress in benchmark script 2025-08-05 16:16:36 -04:00
davidmezzetti 5cf22c648d Update comment 2025-08-01 16:14:50 -04:00
davidmezzetti f04a43578b IVFSparse improvements, closes #943 2025-07-19 08:16:15 -04:00
davidmezzetti 944ef19276 Update comment 2025-07-16 16:35:22 -04:00
davidmezzetti da5baa2479 Require sparse keyword/vector scores to be greater than 0, closes #941 2025-07-16 16:32:11 -04:00
davidmezzetti 9b935a24d1 Change default sparse vector model, closes #940 2025-07-16 16:31:46 -04:00
davidmezzetti 6cf12b97a0 Limit pgsparse input vectors to 1000 non-zero elements, closes #939 2025-07-16 16:30:58 -04:00
davidmezzetti 1edf3ecc4c Modify pgvector ann index to build after data load, closes #938 2025-07-16 16:24:28 -04:00
davidmezzetti 399f584d44 Update comment 2025-07-16 16:22:51 -04:00
davidmezzetti dc57d6bf0d Add test for embeddings shortcuts 2025-07-14 08:31:45 -04:00
davidmezzetti e765be3f6c Refactor of ann and vectors packages for sparse vectors. Closes #930. Closes #934. Closes #935. Closes #936. Closes #937. 2025-07-14 07:48:23 -04:00
davidmezzetti af264bd0bb Update test 2025-07-08 22:13:45 -04:00
davidmezzetti db60bd76e6 Add IVFFlat indexing for sparse vectors, closes #929 2025-07-08 21:44:35 -04:00
davidmezzetti 69145bf98e Ensure scores returned from scoring module are floats and not NumPy values, closes #933 2025-07-08 21:43:35 -04:00
davidmezzetti 9c3bf13d39 Improve hybrid scoring algorithm, closes #931 2025-07-08 21:42:19 -04:00
davidmezzetti a1df111bb8 Pass kwargs to msgpack serializer , closes #932 2025-07-08 21:41:39 -04:00
davidmezzetti e9fa455206 Remove build script workaround, closes #928 2025-07-05 06:40:20 -04:00
davidmezzetti 23e37b4b51 Build script workaround #928 2025-07-04 10:03:50 -04:00
davidmezzetti 2549c6598d Update test 2025-07-04 09:33:03 -04:00
davidmezzetti 5f774b5fd9 Update sentence transformers pool call to use v5.0 features, closes #927 2025-07-04 09:28:20 -04:00
davidmezzetti 2d0ae9c749 Bump version 2025-07-04 09:28:04 -04:00
davidmezzetti fdd37c9afa Bump version 2025-07-04 09:27:49 -04:00
davidmezzetti 6ca8a61856 Update test to workaround HF Hub HTTP 429 issues, closes #926 2025-07-04 09:27:20 -04:00
davidmezzetti d9c50c84b7 Add sparse vector scoring, closes #924. Update default Embeddings parameters, closes #925 2025-07-04 09:26:36 -04:00
davidmezzetti 397ed4d321 Update documentation 2025-06-29 17:03:21 -04:00
davidmezzetti 0aa285848d Update documentation 2025-06-28 08:12:56 -04:00
davidmezzetti 10c524c56b Update documentation 2025-06-28 08:06:08 -04:00
davidmezzetti dd8ff3078a Only add body tags if they don't already exist, closes #919 2025-06-24 09:24:50 -04:00
davidmezzetti d25209fd89 Add example notebook for Medical RAG Research with txtai, closes #921 2025-06-23 16:59:59 -04:00
davidmezzetti 255164992a Add parameter to strip thinking tags from LLM outputs, closes #920 2025-06-23 16:58:35 -04:00
davidmezzetti 7fb9c9fd29 Update Slack link 2025-06-12 09:26:55 -04:00
davidmezzetti fa924845e8 Remove onnxxmltools workaround, closes #916 2025-06-10 13:03:38 -04:00
davidmezzetti fa6a0fdd3c Bump version 2025-06-10 12:41:05 -04:00
davidmezzetti 01b667ad7e Bump torch version 2025-06-10 12:40:56 -04:00
davidmezzetti 34ba105110 Fix import error with latest version of onnx, closes #907 2025-06-10 08:36:51 -04:00
davidmezzetti 77eb913d12 Update docs 2025-06-05 13:41:20 -04:00
davidmezzetti 7fffd5e435 Update build script #907 2025-05-30 12:26:01 -04:00
davidmezzetti 24b0b7ceca Fix issue with latest version of smolagents, closes #913 2025-05-30 11:45:22 -04:00
davidmezzetti 61fa8a3f99 Fix issue with max length and LLM pipeline, closes #912 2025-05-30 11:22:36 -04:00
davidmezzetti a55460a9cb Update build script 2025-05-26 22:25:54 -04:00
davidmezzetti 71cf97d104 Fix issue with max length and summary pipeline, closes #912 2025-05-26 21:42:12 -04:00
davidmezzetti 484b366608 Handle GrandCypher API change, closes #909 2025-05-26 20:15:48 -04:00
davidmezzetti 1777f6aca7 Build script workaround #907 2025-05-15 15:58:25 -04:00
davidmezzetti 203cbecc60 Fix bug with latest version of smolagents, closes #906 2025-05-15 09:27:47 -04:00
davidmezzetti d34fb4b2e2 Update build script 2025-05-15 08:53:30 -04:00
davidmezzetti c080f1d4b0 Revert build script workaround, closes #902 2025-05-05 08:55:22 -04:00
davidmezzetti 6ae346e736 Encoding issue with latest version of LiteLLM #902 2025-04-29 11:30:47 -04:00
davidmezzetti f71fa1fd5e Add kwargs to labels/similarity pipeline, closes #882 2025-04-29 09:31:30 -04:00
davidmezzetti 6d0891b4fa Update test 2025-04-23 11:23:52 -04:00
davidmezzetti 80a8076c2b Update docs 2025-04-23 09:22:25 -04:00
davidmezzetti a5468af853 Update tagline to the all-in-one AI framework, closes #901 2025-04-23 09:15:37 -04:00
davidmezzetti 529dc446f9 Update tagline to the all-in-one AI framework, closes #901 2025-04-23 09:14:34 -04:00
davidmezzetti 8917c0dab0 Update docs 2025-04-15 12:34:09 -04:00
davidmezzetti 80811ef9f3 Bump version 2025-04-14 20:19:02 -04:00
davidmezzetti 97a5192cdf Add support for MCP servers to Agent Framework, closes #898 2025-04-12 11:13:26 -04:00
davidmezzetti 9647c7e918 Add Model Context Protocol (MCP) Support, closes #892 2025-04-11 15:03:14 -04:00
davidmezzetti 19a4b7571f Update test 2025-04-11 11:30:31 -04:00
davidmezzetti 1d1fc36163 Update docs 2025-04-11 10:28:29 -04:00
davidmezzetti b18854f788 Migrate to smolagents, closes #890 2025-04-11 09:38:19 -04:00
davidmezzetti 408a053001 Fix test that was using a method deprecated in Python 3.10 2025-04-08 12:04:06 -04:00
davidmezzetti a6d6231d74 Require Python 3.10+, closes #897 2025-04-08 09:21:31 -04:00
davidmezzetti a3f0896961 Update dependency version 2025-04-07 18:43:05 -04:00
davidmezzetti 642ef2307a Image encoder issue fixed upstream #895 2025-04-04 08:22:33 -04:00
davidmezzetti 6368af1591 Lazy load list of translation models, closes #896 2025-04-04 08:17:33 -04:00
davidmezzetti 6a10aa88d0 Fix bug introduced with Pillow 11.2, closes #895 2025-04-01 13:05:58 -04:00
davidmezzetti 1f65a64dc3 Update docs 2025-04-01 11:05:19 -04:00
davidmezzetti c50d8fd96d Update docs 2025-04-01 10:44:14 -04:00
davidmezzetti 04795b614b Update docs 2025-03-31 13:41:13 -04:00
davidmezzetti a78b3b298f Increase default HF Hub timeout in build script 2025-03-22 09:28:14 -04:00
davidmezzetti 20ac850ec9 Update docs 2025-03-21 22:27:31 -04:00
davidmezzetti 15ee408db8 Modify test vision model, closes #891 2025-03-21 12:21:40 -04:00
davidmezzetti e97237ab29 Update cached_file exception handling, closes #889 2025-03-21 12:19:20 -04:00
davidmezzetti 15bb6346cf Add note on Model Context Protocol to docs 2025-03-21 10:18:33 -04:00
davidmezzetti a211f0e1ca Fix issue with MessageRole Enums and LLM pipeline, closes #888 2025-03-14 14:38:09 -04:00
davidmezzetti 76d39bfe10 Update docs 2025-03-14 13:08:05 -04:00
davidmezzetti 675eea9b92 Try latest version of llama-cpp-python 2025-03-13 10:52:50 -04:00
davidmezzetti 1bc1c59786 Update docs 2025-03-13 09:25:31 -04:00
davidmezzetti d902ee996b Bump version 2025-03-11 14:23:41 -04:00
davidmezzetti 3517704d1a Update docs 2025-03-11 08:42:56 -04:00
davidmezzetti 3ddb3e12ba Update docs 2025-03-05 10:59:51 -05:00
davidmezzetti fa2f114dee Build script workaround for llama-cpp-python error 2025-03-04 21:34:39 -05:00
davidmezzetti 4a1aa4d0f6 Build script workaround for llama-cpp-python error 2025-03-04 19:17:14 -05:00
davidmezzetti e7cafe3fd7 Update comment 2025-03-04 19:11:28 -05:00
davidmezzetti bbf474314b Add example notebook showing how to use OpenAI compatible API, closes #887 2025-03-04 15:55:02 -05:00
davidmezzetti 13ab0c3b9e Add OpenAI API compatible endpoint to API, closes #883 2025-03-04 15:54:30 -05:00
davidmezzetti 186e58a114 Add support for vision models to HF LLM pipeline, closes #884 2025-03-04 15:53:27 -05:00
davidmezzetti 34fa089e68 Add texttospeech pipeline to API, closes #552 2025-03-04 15:51:44 -05:00
davidmezzetti 679e0cef89 Add encoding parameter to TextToSpeech pipeline, closes #885 2025-03-04 15:50:37 -05:00
davidmezzetti 6301617cd8 Add support for input streams to Transcription pipeline, closes #886 2025-03-04 15:49:53 -05:00
davidmezzetti 1524b74a6b Add upload endpoint to API, closes #659 2025-03-04 15:49:03 -05:00
davidmezzetti 437ee1c15b Update docs 2025-02-26 09:51:06 -05:00
davidmezzetti 13ec1e10fa Update docs 2025-02-25 18:54:42 -05:00
davidmezzetti a9833d0d67 Update docs 2025-02-25 08:16:50 -05:00
davidmezzetti 04d4bc43aa Add docs for observability, closes #869 2025-02-24 22:12:49 -05:00
davidmezzetti f880793ae3 Reset HFTrainer #879 2025-02-22 17:40:32 -05:00
davidmezzetti ba552d5a3f Set deterministic behavior for cuDNN in HFTrainer #879 2025-02-22 10:42:00 -05:00
davidmezzetti 1a9f5eaded Default full_determinism to True in HFTrainer, closes #879 2025-02-22 07:38:08 -05:00
davidmezzetti a1a7d34cd8 Embeddings index checkpointing, closes #695 2025-02-19 16:44:37 -05:00
davidmezzetti 8a3ed27bbb Fix bug with latest version of Transformers and model registry, closes #878 2025-02-17 15:26:02 -05:00
davidmezzetti a92bb73c9c Add similar query clause to graph queries, closes #875 2025-02-17 13:07:42 -05:00
davidmezzetti 4d92dfc965 Update method signature 2025-02-12 11:59:23 -05:00
davidmezzetti 1d077898ca Bump version 2025-02-12 11:57:05 -05:00
davidmezzetti 53f5af52ad Ensure staticvectors is installed before calling method, closes #876 2025-02-12 07:33:14 -05:00
davidmezzetti 64c1a5c5c7 Bump version 2025-02-11 16:15:32 -05:00
davidmezzetti b72b04a972 Update documentation 2025-02-11 12:01:01 -05:00
davidmezzetti a68a1338eb Add example notebook for RAG Chunking, closes #874 2025-02-11 12:00:48 -05:00
davidmezzetti cc5d16df88 Add example notebook for Entity Extraction with GLiNER, closes #873 2025-02-11 12:00:28 -05:00
davidmezzetti 870c7007f6 Improve parsing of table text in HTML to Markdown pipeline, closes #872 2025-02-11 08:54:01 -05:00
davidmezzetti 7dc1e4bb5f Update test 2025-02-07 09:01:23 -05:00
davidmezzetti 53fa7ad872 Update textractor pipeline documentation with details on text splitting/chunking 2025-02-07 08:59:57 -05:00
davidmezzetti d7f8210d16 Remove build script workaround, closes #852 2025-02-07 06:54:38 -05:00
davidmezzetti bd16c6e25c Bump Torch CPU version 2025-02-07 06:54:12 -05:00
davidmezzetti f52ce51413 Word vector model improvements, closes #868 2025-02-05 13:23:01 -05:00
davidmezzetti 2cd8989183 Remove dead code 2025-02-05 13:22:30 -05:00
davidmezzetti 61ca27a128 Replace python-louvain library with networkx equivalent, closes #867 2025-02-04 19:27:23 -05:00
davidmezzetti 5049f0447a Update build script 2025-02-04 12:35:20 -05:00
davidmezzetti ce36fef822 Build script workaround 2025-02-04 09:25:11 -05:00
davidmezzetti bf32498a79 Add semantic chunking, closes #812 2025-02-04 07:45:25 -05:00
davidmezzetti 6e55f7a862 Add GLiNER example to docs 2025-02-04 07:42:33 -05:00
davidmezzetti 44fb2f9d9f Detect graph queries and route to graph index, closes #865 2025-02-02 09:21:09 -05:00
davidmezzetti 2b6aa5f363 Add GLiNER #862 2025-01-31 11:01:19 -05:00
davidmezzetti 13bafb01c6 Add support for GLiNER models, closes #862 2025-01-31 10:37:02 -05:00
davidmezzetti ac4c0583e8 Update build script 2025-01-30 10:40:51 -05:00
davidmezzetti e2e81cd2e3 Handle empty token list with word vectorization, closes #861 2025-01-30 09:56:56 -05:00
davidmezzetti fb56af8973 Update build script 2025-01-30 07:41:04 -05:00
davidmezzetti 8fb3aba425 Update method documentation, closes #860 2025-01-29 19:57:24 -05:00
davidmezzetti 986da4700a Check for multiple exception types #859 2025-01-27 12:34:28 -05:00
davidmezzetti 5887f5f247 Add missing dependency #857 2025-01-27 11:35:14 -05:00
davidmezzetti f79d8062ae Replace fasttext and pymagnitude with staticvectors. Closes #857. Closes #858. Closes #859 2025-01-27 11:17:51 -05:00
davidmezzetti 12aa955b77 Update build script 2025-01-23 20:34:32 -05:00
davidmezzetti 99df8c0901 Update documentation 2025-01-20 05:21:03 -05:00
davidmezzetti dca693828b Update TextToSpeech pipeline 2025-01-16 22:15:30 -05:00
davidmezzetti 77649d5f30 Update documentation for TextToSpeech pipeline 2025-01-16 12:58:50 -05:00
davidmezzetti 8fc52f23ba Add Kokoro TTS support to TextToSpeech pipeline, closes #854 2025-01-16 12:24:43 -05:00
davidmezzetti 39609f3ef9 Add new methods for audio signal processing, closes #855 2025-01-16 12:24:07 -05:00
davidmezzetti ece8e6f8f2 Update build script 2025-01-12 11:26:32 -05:00
davidmezzetti ac5d04f86b Add notebook to documentation 2025-01-12 11:18:14 -05:00
davidmezzetti 91cee347f5 Pin transformers version in build script to work around transformers bug #852 2025-01-12 10:45:20 -05:00
davidmezzetti f9b9efa5f6 Update build script 2025-01-12 10:23:42 -05:00
davidmezzetti d5069b9c39 Update build script 2025-01-12 10:21:17 -05:00
davidmezzetti 351d6f8a80 Update build script 2025-01-12 10:14:56 -05:00
davidmezzetti 0c8a2627ff Update build script 2025-01-12 10:11:43 -05:00
davidmezzetti 532a87049b Update build script 2025-01-12 10:07:50 -05:00
davidmezzetti 6a1664db67 Add notebook that analyzes NeuML LinkedIn posts, closes #851 2025-01-12 09:59:22 -05:00
davidmezzetti 5178f92767 Bump version 2025-01-09 15:54:00 -05:00
davidmezzetti 05da209b78 Add documentation for copyattributes 2025-01-09 13:18:03 -05:00
davidmezzetti 4e5331e641 Support pulling attribute data in graph.scan, closes #849 2025-01-09 13:14:50 -05:00
davidmezzetti 80db3a9a85 Graph RAG - Add extra attributes, closes #684 2025-01-09 13:13:02 -05:00
davidmezzetti c7e0fe3f99 Support graph=True in embeddings config, closes #848 2025-01-09 13:11:34 -05:00
davidmezzetti 1352040add Update RAG notebooks to add clarifying notes on LLM inference, closes #847 2025-01-09 07:28:53 -05:00
davidmezzetti 2d8cf5d80d Add vectors argument to Model2Vec vectors, closes #846 2025-01-06 20:33:44 -05:00
davidmezzetti 38520439b9 Update documentation 2025-01-03 09:05:05 -05:00
davidmezzetti dd92c18663 Update notebook and documentation 2025-01-02 13:02:42 -05:00
Igor Ribeiro Lima 991ea6ac11 Enhanced Docs: LLM Embedding Examples (#844)
* enhance documentation

* Address PR comment

* improvement and enhancmenet

* update notebook

* Address PR comment
2025-01-02 10:51:01 -05:00
davidmezzetti 2e0dfb36d9 Update comments 2024-12-28 14:14:22 -05:00
davidmezzetti fc611ed228 Remove pillow from build script, closes #800 2024-12-28 05:51:31 -05:00
davidmezzetti 65a8316de5 Vector encoding using multiple-GPUs, closes #541 2024-12-21 20:30:55 -05:00
davidmezzetti 34ffc9723d Update powered by 2024-12-21 09:16:11 -05:00
davidmezzetti 522760447d Ensure generated datetimes are in UTC, closes #840 2024-12-21 07:16:27 -05:00
davidmezzetti 952a7575b7 Add defaultrole to LLM pipeline, closes #841 2024-12-19 07:28:51 -05:00
davidmezzetti 9bd2da7213 Update test 2024-12-17 13:01:16 -05:00
davidmezzetti ec5f33b1ea Update test to run on macOS 2024-12-17 12:23:14 -05:00
davidmezzetti 5d7292048b Update powered by section with latest apps 2024-12-15 09:09:56 -05:00
davidmezzetti bb851a1dc0 Bump version 2024-12-10 12:36:54 -05:00
davidmezzetti 5e56dade9c Add support for halfvec and bit vector types with PGVector ANN, closes #839 2024-12-10 07:02:44 -05:00
davidmezzetti d39b85e04b Bound ANN hamming scores between 0.0 and 1.0, closes #838 2024-12-10 06:59:56 -05:00
davidmezzetti 6cc886aaad RDBMS graph.delete tests and upgrade graph dependency, closes #837 2024-12-10 06:57:06 -05:00
davidmezzetti 0354e2bef3 Move create schema calls into their own transaction #831 2024-12-08 06:49:46 -05:00
davidmezzetti cab131e92a Fix bug with NetworkX.hasedge method, closes #834 2024-12-08 06:46:32 -05:00
davidmezzetti 69aa23c462 Add docs for embeddings context manager #832 2024-12-08 06:45:04 -05:00
davidmezzetti e215ea13bb Add Embeddings context manager, closes #832 2024-12-06 17:48:41 -05:00
davidmezzetti e7aa46a1f0 Fix resource issues with embeddings indexing components backed by databases, closes #831 2024-12-06 17:23:46 -05:00
davidmezzetti 89410d3661 Change schema statements to use bind parameters #829 2024-12-05 13:15:52 -05:00
davidmezzetti 26bd35dc02 Add HTML normalization rules to Docling #814 2024-12-05 08:39:48 -05:00
davidmezzetti 3f7bb71a3e Persist embeddings components to specified schema, closes #829 2024-12-04 15:18:05 -05:00
davidmezzetti 92489ac89a Update build script and test 2024-12-03 18:32:02 -05:00
davidmezzetti b05abd20f3 Update test 2024-12-03 18:09:38 -05:00
davidmezzetti c6cd565518 Update build script 2024-12-03 17:52:43 -05:00
davidmezzetti 05ae9ebcb2 Update build script 2024-12-03 17:33:13 -05:00
davidmezzetti 4fe7877dd9 Update build script 2024-12-03 16:08:43 -05:00
davidmezzetti 1aa6c506ca Skip Docling tests for macOS due to MPS issues 2024-12-03 14:52:34 -05:00
davidmezzetti 9efc9ba070 Add text extraction with Docling, closes #814. Refactor Textractor pipeline into multiple pipelines, closes #828 2024-12-03 14:27:49 -05:00
davidmezzetti 5fdbc90d24 Autodetect Model2Vec model paths, closes #822. Refactor vectors package, closes #826. 2024-12-01 08:27:09 -05:00
davidmezzetti 4b5164beca Fix issue with calling cached_file for local directories, closes #825 2024-12-01 08:19:24 -05:00
davidmezzetti cb22635bff Fix memory issue with llama.cpp LLM pipeline, closes #824 2024-11-30 10:38:47 -05:00
davidmezzetti 7edc7aa184 Add parameter to disable text cleaning in Segmentation pipeline, closes #823 2024-11-30 10:37:52 -05:00
davidmezzetti 350087ee1d Cloud storage improvements, closes #821 2024-11-27 16:42:25 -05:00
davidmezzetti 2e8450d816 Update comments 2024-11-27 16:32:25 -05:00
davidmezzetti 384201d4c8 Update documentation 2024-11-25 16:18:33 -05:00
davidmezzetti 51aab3eb26 Add an example notebook for autonomous agents, closes #820 2024-11-25 15:54:21 -05:00
davidmezzetti 0f916d30e2 Documentation updates 2024-11-24 09:36:19 -05:00
davidmezzetti ff4d4dac14 Update build script and test 2024-11-23 07:42:17 -05:00
David Mezzetti f840ed7625 Merge pull request #819 from eltociear/patch-2
docs: update 49_External_database_integration.ipynb
2024-11-23 07:37:40 -05:00
Ikko Eltociear Ashimine 0b584a02c3 docs: update 49_External_database_integration.ipynb
Creat -> Create
2024-11-23 20:08:27 +09:00
davidmezzetti e16d42382b Update Faiss macOS test to force module reload #818 2024-11-22 14:36:15 -05:00
Jeff dceb40c774 Macfaiss (#818)
* macOS platforms faiss OMP Thread patch

* Add TODO

* remove TODO, as build checks for it

* Apply recomendations

* Build Error
2024-11-22 13:38:05 -05:00
davidmezzetti 4f370801e8 Update build script 2024-11-21 22:02:41 -05:00
davidmezzetti 29f680fe89 Add notebook link to documentation 2024-11-21 20:42:19 -05:00
davidmezzetti f0c6c3e0c4 Add example notebook that analyzes the Hugging Face Posts dataset, closes #817 2024-11-21 18:01:47 -05:00
davidmezzetti cdc6eeea6f Fix error with inferring function parameters in agents, closes #816 2024-11-21 14:15:47 -05:00
davidmezzetti 94c05fb231 Update documentation 2024-11-21 14:14:08 -05:00
davidmezzetti 846fbaf377 Update documentation to clarify that passing string prompts to LLM pipeline requires applying chat templates 2024-11-21 14:05:03 -05:00
davidmezzetti cf340e66c3 Update documentation 2024-11-18 22:56:48 -05:00
davidmezzetti b239c7c131 Bump Torch CPU version 2024-11-18 22:56:40 -05:00
davidmezzetti 9444fcc720 Update notebook 2024-11-18 15:50:23 -05:00
davidmezzetti 439b9d7f0c Bump version 2024-11-18 15:50:07 -05:00
davidmezzetti 087de0c2e7 Update notebook 2024-11-18 14:13:37 -05:00
davidmezzetti 5f933e5abd Add agents example notebook, closes #811 2024-11-18 13:28:45 -05:00
davidmezzetti eb573e0366 Add documentation for txtai agents, closes #809 2024-11-18 08:29:25 -05:00
davidmezzetti f582bdf427 Update test 2024-11-15 21:32:27 -05:00
davidmezzetti 731ecd2348 Add agent support to Applications and API #804 2024-11-15 21:31:15 -05:00
davidmezzetti 11bf39ece4 Bump minimum transformers version #807 2024-11-12 10:45:22 -05:00
davidmezzetti 523df52351 Update image 2024-11-09 05:51:56 -05:00
davidmezzetti fbd38ef833 Update documentation for agents #804 2024-11-08 13:57:17 -05:00
davidmezzetti 058ca9bae4 Update tests 2024-11-05 09:02:44 -05:00
davidmezzetti 9ddfc41306 Update return value #804 2024-11-05 07:32:16 -05:00
davidmezzetti 6a71db5f49 Initial version of agents framework #804 2024-11-05 07:17:16 -05:00
davidmezzetti 9739126a99 Update build script #805 2024-11-01 11:14:29 -04:00
davidmezzetti 077ea4182e Update documentation 2024-11-01 10:16:53 -04:00
davidmezzetti 73ae8c3428 Update documentation 2024-11-01 09:14:38 -04:00
davidmezzetti 285769c971 Update build script #805 2024-10-29 13:25:58 -04:00
davidmezzetti 1d5323516e Update build script #805 2024-10-29 12:54:27 -04:00
davidmezzetti ad3e9be663 Update build script #805 2024-10-29 12:12:19 -04:00
davidmezzetti 6b926ccfb1 Update build script #805 2024-10-29 11:35:50 -04:00
davidmezzetti fef13233cf Update build script #805 2024-10-29 11:08:52 -04:00
davidmezzetti 3c15037386 Split pipeline unit tests into packages #805 2024-10-29 09:11:31 -04:00
davidmezzetti aa531e0bff Bump version 2024-10-29 06:52:17 -04:00
davidmezzetti a246052f4a Add model2vec vectorization, closes #801 2024-10-21 13:53:11 -04:00
davidmezzetti 4a268041b7 Update translation pipeline to use hf_hub_download for language detection, closes #803 2024-10-19 06:02:43 -04:00
davidmezzetti 7289f2f25b Pin build script to huggingface-hub==0.25.2 #803 2024-10-18 15:24:23 -04:00
davidmezzetti 79675f5228 Cleanup vectors package, closes #802 2024-10-18 13:39:27 -04:00
davidmezzetti 1ca51e523c Update BASE_IMAGE in Dockerfile, closes #799 2024-10-16 15:33:44 -04:00
davidmezzetti 2635ac587c Pin build script to pillow==10.4.0 #800 2024-10-16 13:55:08 -04:00
davidmezzetti 6f57fb9a1d Update documentation 2024-10-16 09:11:05 -04:00
davidmezzetti 93f707187c Bump version 2024-10-14 14:53:57 -04:00
davidmezzetti 72c68c9a62 Update notebook 2024-10-13 07:54:25 -04:00
davidmezzetti f0a3935ec0 Update documentation 2024-10-13 07:11:37 -04:00
davidmezzetti 1624c5bcb5 Add Generative Audio example notebook, closes #798 2024-10-13 06:28:04 -04:00
davidmezzetti ea4c48b94f Update audio pipelines to improve single item handlers 2024-10-13 06:27:47 -04:00
davidmezzetti c3b3fc9915 Upgrade pylint and black, closes #797 2024-10-11 13:22:11 -04:00
davidmezzetti bbddcd2a4f Require Python 3.9+, closes #796 2024-10-11 12:59:43 -04:00
davidmezzetti 07fa511211 Update documentation 2024-10-11 10:33:00 -04:00
davidmezzetti 1cdc426dce Add dtype to np.array call #793 2024-10-11 10:32:37 -04:00
davidmezzetti 8ffaccfe7a Add Text to Audio pipeline, closes #792. Add support for SpeechT5, closes #793. Updated cache methods, closes #794. Add audio signal processing, closes #795. 2024-10-11 08:30:20 -04:00
davidmezzetti ad2d288d66 Update Text to Speech Generation Notebook, closes #790 2024-09-29 09:03:32 -04:00
davidmezzetti 67321b0b44 Add Speech to Speech example notebook, closes #789 2024-09-27 11:47:23 -04:00
davidmezzetti f3138c2710 Add debug logging 2024-09-27 11:41:25 -04:00
davidmezzetti d9c732dbb6 Update documentation 2024-09-26 21:06:39 -04:00
davidmezzetti cf102730f9 Update build scripts 2024-09-26 20:39:21 -04:00
davidmezzetti ea730ff5ec Refactor microphone pipeline to remove unnecessary dependencies and improve overall logic #785 2024-09-26 20:28:10 -04:00
davidmezzetti 05fe040e68 Update TextToSpeech pipeline to support speaker parameter, closes #787 2024-09-24 08:21:30 -04:00
davidmezzetti c5eed15fe2 Update AudioStream pipeline 2024-09-20 22:22:33 -04:00
davidmezzetti 4f55ffbc11 Update documentation 2024-09-20 15:20:11 -04:00
davidmezzetti 748998d21d Add an audio playback pipeline, closes #786 2024-09-20 13:31:08 -04:00
davidmezzetti 374197b453 Add a microphone pipeline, closes #785 2024-09-20 13:30:32 -04:00
davidmezzetti fffcdadf51 Add streaming speech generation, closes #784 2024-09-20 13:22:41 -04:00
davidmezzetti 65b73eb5e6 Add support for generation keyword arguments with Transcription pipeline, closes #593 2024-09-20 12:23:40 -04:00
davidmezzetti cec5d4f753 Add debug logging for LLM calls 2024-09-20 12:21:28 -04:00
davidmezzetti 7cfe2e7bb4 Test build deps 2024-09-20 08:00:42 -04:00
davidmezzetti b0fdceab9c Test build deps 2024-09-20 07:38:18 -04:00
davidmezzetti 05e8fa973d Update LLM documentation 2024-09-18 18:33:47 -04:00
davidmezzetti 27ed2ce6f7 Documentation update 2024-09-10 09:10:08 -04:00
davidmezzetti dfa2bdce1c Add example notebook covering open data access, closes #782 2024-09-06 11:56:10 -04:00
davidmezzetti d4030edf58 Bump Torch CPU version 2024-09-05 21:10:42 -04:00
davidmezzetti 07aa23820b Bump version 2024-09-05 21:09:54 -04:00
davidmezzetti ece3b7852f Update SQL #780 2024-09-04 12:11:43 -04:00
davidmezzetti ddb6c3ed22 Skip unittest for MacOS #780 2024-09-04 11:29:36 -04:00
davidmezzetti d535fc5101 Add SQLite ANN, closes #780 2024-09-04 10:55:14 -04:00
davidmezzetti 9c493d4c10 Update documentation 2024-08-26 09:01:17 -04:00
davidmezzetti 65c92f15d2 Document txtai index format, closes #779 2024-08-26 07:34:52 -04:00
davidmezzetti 0d32ebda6a Update txtai index format to remove Python-specific serialization #769 2024-08-24 08:07:37 -04:00
davidmezzetti 88dc320a43 Persist NetworkX graph component with MessagePack, closes #775 2024-08-24 08:06:50 -04:00
davidmezzetti b66c283256 Persist Scoring component metadata with MessagePack, closes #776 2024-08-24 07:59:46 -04:00
davidmezzetti e3a2768e3f Refactor embeddings configuration into separate component #778 2024-08-24 07:59:15 -04:00
davidmezzetti 61bf4879d5 Modify vector transforms to load/save data using np.load/np.save, closes #777 2024-08-24 07:36:07 -04:00
davidmezzetti f21bb78e1c Update documentation #778 2024-08-24 07:28:43 -04:00
davidmezzetti 0a82ea31cd Refactor embeddings configuration into separate component, closes #778 2024-08-24 07:28:17 -04:00
davidmezzetti ad96d3f44e Persist Reducer component with skops library, closes #774 2024-08-24 07:25:57 -04:00
davidmezzetti 9478beaebc Persist Embeddings index ids with MessagePack, closes #773 2024-08-24 07:24:54 -04:00
davidmezzetti 502db2907e Modify NumPy and Torch ANN components to use np.load/np.save, closes #772 2024-08-24 07:20:02 -04:00
davidmezzetti 10b17141a9 Update Makefile #770 2024-08-24 07:17:48 -04:00
davidmezzetti 5cad89271a Add serialization package for handling supported data serialization methods, closes #770 2024-08-24 06:50:46 -04:00
davidmezzetti d30d2982a3 Add MessagePack serialization as a top level dependency, closes #771 2024-08-24 06:49:03 -04:00
davidmezzetti e473379ae7 Update variable name 2024-08-24 06:33:38 -04:00
davidmezzetti 06e72232f4 Update variable name 2024-08-24 06:32:45 -04:00
davidmezzetti bb2c701012 Update variable name 2024-08-24 06:32:13 -04:00
davidmezzetti 5f297abe27 Fix error with notebook, closes #768 2024-08-21 19:49:35 -04:00
davidmezzetti a014c3bcda Update NLTK model downloads, closes #760 2024-08-16 11:58:27 -04:00
davidmezzetti 6eb5ceb792 Update examples to use RAG pipeline, closes #766 2024-08-16 11:13:58 -04:00
davidmezzetti 6e7ddcfc03 Update documentation to use base imports, closes #765 2024-08-16 09:54:15 -04:00
davidmezzetti 2a064ca2db Revert changes in #760 2024-08-15 17:34:23 -04:00
davidmezzetti 34cefe97ee Revert changes in #760 2024-08-15 17:05:34 -04:00
davidmezzetti c1e3e617b2 Change RAGTask to RagTask, closes #763 2024-08-15 16:31:47 -04:00
davidmezzetti 52746c8dbd Refactor benchmarks script, closes #761 2024-08-12 13:25:48 -04:00
a0346f102085fe9f 600cb26665 Add bm25s library to benchmarks (#757)
* Support bm25s library in benchmarks.py

Adapted from https://www.kaggle.com/code/xhlulu/benchmark-bm25-on-beir

* Use save/load functionality of bm25s

* Use txtai's tokenizer

* Make checks pass

* Improve variable names in BM25S()

* Remove use of del in BM25S()
2024-08-12 11:24:41 -04:00
davidmezzetti f5644e85cc Upgrade NLTK, closes #760 2024-08-10 15:05:42 -04:00
davidmezzetti 220437c2dd Update build 2024-08-10 08:52:54 -04:00
davidmezzetti e12624e765 Update documentation 2024-08-10 08:09:02 -04:00
davidmezzetti f57e2903ec Update documentation 2024-08-07 13:07:13 -04:00
davidmezzetti 923b12d449 Enhance markdown support for Textractor, closes #758 2024-08-07 12:28:23 -04:00
davidmezzetti b2369759f2 Move RAG application to it's own repo 2024-07-25 16:31:44 -04:00
davidmezzetti e32f61f8b9 Update code and build script to consolidate disabling MPS device around PYTORCH_MPS_DISABLE env variable 2024-07-24 20:26:06 -04:00
davidmezzetti 84407ccddf Update documentation 2024-07-24 14:46:58 -04:00
davidmezzetti 045601e73b Add new functionality to RAG application, closes #753 2024-07-24 14:44:54 -04:00
davidmezzetti bd94ebab75 Update HF LLM to reduce noisy warnings, closes #752 2024-07-24 14:33:30 -04:00
davidmezzetti 4e0fb1e157 Handle document rows without titles 2024-07-24 14:17:57 -04:00
davidmezzetti 4d903f553e Update documentation 2024-07-24 14:17:17 -04:00
davidmezzetti 3e978981d9 Update translation pipeline to migrate from deprecated HF Hub parameter, closes #750 2024-07-22 17:48:38 -04:00
davidmezzetti 6190f725e7 Support <pre> blocks with Textractor, closes #749 2024-07-21 12:21:23 -04:00
davidmezzetti 299bb428ac Bump Torch CPU version 2024-07-15 14:23:28 -04:00
davidmezzetti 0eee20aa6c Bump version 2024-07-15 14:23:06 -04:00
davidmezzetti 8efdb21ab0 Update documentation 2024-07-14 21:42:11 -04:00
davidmezzetti ab8ada9bf6 Improve textractor pipeline, closes #748 2024-07-14 21:12:10 -04:00
davidmezzetti 76852202ce Update documentation 2024-07-12 21:02:41 -04:00
davidmezzetti 3d4f97a035 Update documentation 2024-07-12 12:42:58 -04:00
davidmezzetti 3a25c7cfca Update documentation 2024-07-12 12:40:42 -04:00
davidmezzetti dd1067c877 Add streaming LLM support, closes #680 2024-07-12 12:39:03 -04:00
davidmezzetti 49295b9211 Fix issue with setting quantize=False in HFTrainer pipeline, closes #747 2024-07-12 12:34:06 -04:00
davidmezzetti f32218854c Update documentation 2024-07-08 08:17:34 -04:00
davidmezzetti 754726ddb0 Update documentation 2024-07-08 07:27:26 -04:00
davidmezzetti 98e5b75b03 Add txtai article link 2024-07-04 13:20:32 -04:00
davidmezzetti ef61741fcc Support max_seq_length parameter with model pooling, closes #746 2024-07-04 10:04:38 -04:00
David Mezzetti be7e001785 Merge pull request #745 from eltociear/patch-1
docs: update vectors.md
2024-07-03 13:07:31 -04:00
Ikko Eltociear Ashimine 0b668d319e docs: update vectors.md
infered -> inferred
2024-07-03 17:45:02 +09:00
davidmezzetti 6bc66c6468 Documentation update 2024-07-02 08:43:16 -04:00
davidmezzetti 4ac65d9a61 Update documentation 2024-06-30 08:32:56 -04:00
davidmezzetti 099314adf4 Add RAG example application and Dockerfile, closes #743 2024-06-27 16:09:18 -04:00
davidmezzetti 9d71aba655 Update build script 2024-06-24 12:21:42 -04:00
davidmezzetti c803ebffd6 Update build script 2024-06-24 12:17:17 -04:00
davidmezzetti f3766eb808 Update build script 2024-06-24 12:00:06 -04:00
davidmezzetti 3fd9e8a69d Update build script 2024-06-24 11:25:13 -04:00
davidmezzetti 03bd817aed Add RAG article 2024-06-22 13:17:51 -04:00
davidmezzetti f9293386bb Add RAG deepdive notebook, closes #737 2024-06-21 13:08:38 -04:00
davidmezzetti be28c76b7b Rename Extractor pipeline to RAG, closes #736 2024-06-21 12:36:17 -04:00
davidmezzetti ca7672c70e Add RAG API endpoint, closes #735 2024-06-20 16:08:32 -04:00
davidmezzetti cd1e44be37 Update build script 2024-06-18 13:39:40 -04:00
davidmezzetti c7200fe030 Fix issue with max tokens for llama.cpp components, closes #733 2024-06-18 13:29:44 -04:00
davidmezzetti 7073084c58 Fix issue with loading non-transformer LLM models in Extractor/RAG pipeline, closes #734 2024-06-18 13:29:26 -04:00
davidmezzetti 42583f0bdf Add RAG alias for Extractor, closes #732 2024-06-18 13:28:58 -04:00
davidmezzetti 19961f06b9 Update build script 2024-06-13 06:35:58 -04:00
davidmezzetti 4c2d80158c Update build script 2024-06-13 06:25:41 -04:00
davidmezzetti d9ccbf766f Update build script 2024-06-13 06:21:51 -04:00
davidmezzetti ba822aef3d Build script update 2024-06-12 13:26:59 -04:00
davidmezzetti bb0886c0a8 Refactor #632 2024-06-11 15:20:02 -04:00
davidmezzetti 8a8a723e2b Sync embeddings transform API parameters, closes #632 2024-06-11 14:33:28 -04:00
davidmezzetti f28225b091 Update documentation #705 2024-06-04 11:42:17 -04:00
davidmezzetti 68fdc9c783 Bump Torch CPU version 2024-05-31 12:59:02 -04:00
davidmezzetti 56a6300553 Bump version 2024-05-31 12:58:43 -04:00
davidmezzetti 5221f73227 Fix incompatibility between latest skl2onnx and txtai, closes #729 2024-05-31 08:03:55 -04:00
davidmezzetti 12fa4f94c0 Fix broken link 2024-05-30 15:24:39 -04:00
davidmezzetti 66b212b1de Add notebook showing to run RAG with llama.cpp and LiteLLM, closes #728 2024-05-30 14:51:11 -04:00
davidmezzetti 792f9dbeaf Add flag to disable macOS Metal for llama.cpp when running builds 2024-05-28 12:26:36 -04:00
davidmezzetti 7f241b0f04 Add flag to disable macOS Metal for llama.cpp when running builds 2024-05-28 12:25:25 -04:00
davidmezzetti 88adf4d69d Update documentation 2024-05-28 12:24:08 -04:00
davidmezzetti 3422e0fbb1 Add additional vector backends. Closes #725. Closes #726. Closes #727 2024-05-28 08:26:29 -04:00
davidmezzetti b3a99f0197 Update LLM pipeline to support GPU parameter with llama.cpp backend, closes #724 2024-05-28 08:24:49 -04:00
davidmezzetti 468ed7ab1f Update test 2024-05-25 07:07:45 -04:00
davidmezzetti 3204e4a0d6 Update finalizers to check object attributes haven't already been cleared, closes #722 2024-05-25 06:36:21 -04:00
davidmezzetti b2d864d74a Update #704 to not require a path parameter in Embeddings as not all vector models need a path. Update test. 2024-05-25 06:27:07 -04:00
davidmezzetti f3b7cb9569 Update #704 to not require a path parameter in Embeddings as not all vector models need a path. Update test. 2024-05-25 06:25:30 -04:00
David Mezzetti e1ee9d8d6d Merge pull request #704 from uni-industries/full-text-search-only
Ensure config.path = None and config.path missing mean the same thing
2024-05-25 05:14:43 -04:00
davidmezzetti c4080a348a Fix incompatibility with ONNX models and transformers>=4.41.0, closes #720 2024-05-20 17:10:50 -04:00
davidmezzetti 03057f2040 Update HFOnnx pipeline to default to opset 14, closes #719 2024-05-18 15:41:44 -04:00
davidmezzetti 8bd4d78cf9 Add support for chat messages in LLM pipeline, closes #718 2024-05-18 14:21:30 -04:00
davidmezzetti 498eb7c977 Add Postgres Full Text Scoring, closes #713 2024-05-09 16:42:54 -04:00
davidmezzetti a7e023d7fc Fix issue with database.search and empty scores, closes #712 2024-05-09 15:21:48 -04:00
davidmezzetti 600152ca70 Add close methods to ANN and Graph, closes #711 2024-05-09 15:16:10 -04:00
davidmezzetti 7b1b297390 Update test 2024-05-01 15:24:04 -04:00
davidmezzetti 9ba3009da0 Update documentation 2024-05-01 14:57:04 -04:00
Ian Wilson 303cc11116 Allow config.path = None and config.keyword = True for full text search only 2024-05-01 10:59:49 -07:00
davidmezzetti e2af6cec40 Add notebook covering txtai integration with Postgres, closes #701 2024-04-25 07:29:13 -04:00
davidmezzetti 9aa2edd4fb Add RDBMS Graph, closes #699 2024-04-24 11:20:19 -04:00
davidmezzetti e24f4bc21d Add pgvector ANN backend, closes #698 2024-04-24 11:19:26 -04:00
davidmezzetti dfc545503c Update ImportErrors to note ann or vector extra vs similarity 2024-04-24 11:05:46 -04:00
davidmezzetti b2e7b935da Split similarity extras install, closes #696 2024-04-22 17:07:56 -04:00
davidmezzetti f2a211bf2c Update documentation 2024-04-21 08:48:38 -04:00
davidmezzetti d99d02a221 Update documentation 2024-04-21 08:22:31 -04:00
davidmezzetti 76fe52c6a2 Update Dockerfile 2024-04-19 15:32:36 -04:00
davidmezzetti 0c828b8e20 Bump version 2024-04-19 15:32:23 -04:00
davidmezzetti 69b4a9e86b Update test 2024-04-19 06:37:43 -04:00
davidmezzetti bc889bd2a1 Add notebook on Retrieval Augmented and Guided Generation, closes #694 2024-04-18 13:22:49 -04:00
davidmezzetti 8277ce9e1b Add batch node and edge creation for graphs, closes #693 2024-04-17 08:44:15 -04:00
davidmezzetti 9f9ed6d928 Create temporary tables on connection, closes #692 2024-04-17 08:28:45 -04:00
davidmezzetti 634dcfc075 Add indexids only search, closes #691 2024-04-17 08:20:47 -04:00
davidmezzetti 7fad6dc971 Add Pillow to API deps, closes #690 2024-03-30 08:51:57 -04:00
davidmezzetti 3f319eb0f7 Fix issue with hardcoded autoawq version in example notebooks, closes #686 2024-03-24 08:28:40 -04:00
davidmezzetti ecb4110a16 Update documentation 2024-03-17 08:53:30 -04:00
davidmezzetti 0676b2eb4e Revert build script workaround 2024-03-11 22:14:28 -04:00
davidmezzetti b9bdb1cfd1 Update documentation 2024-03-10 21:53:49 -04:00
davidmezzetti d41486423b Fix NoneType error #683 2024-03-05 13:53:56 -05:00
davidmezzetti 9b9a7736af Formatting updates #676 2024-03-05 13:00:16 -05:00
Grant Sherrick 0cd2ec984d Fix token storage auth error (#676) 2024-03-05 11:05:31 -05:00
davidmezzetti ab163cefe4 Temporary build script workaround 2024-03-04 16:59:28 -05:00
davidmezzetti 9a670cd5ec Update default vector model logic for embeddings.batchtransform 2024-02-28 13:28:50 -05:00
davidmezzetti 88430d7824 Add support for dynamic vector dimensions, pass options to underlying vector models and move vector model caching. Closes #674. Closes #675. Closes #678 2024-02-27 21:20:51 -05:00
davidmezzetti 968609b5a7 Bump Torch CPU version 2024-02-21 20:27:39 -05:00
davidmezzetti 01fb0e6bee Bump version 2024-02-21 20:27:10 -05:00
davidmezzetti 17ed78280e Add txtai 7.0 article link 2024-02-21 14:30:29 -05:00
davidmezzetti 286916ec2e Update documentation 2024-02-21 12:08:13 -05:00
davidmezzetti dd987ea9dd Add what's new in txtai 7.0 notebook, closes #673 2024-02-21 12:07:21 -05:00
davidmezzetti 191bee0cee Add advanced RAG with graph path traversal notebook, closes #672 2024-02-21 12:07:01 -05:00
davidmezzetti a250fd7d08 Add knowledge graphs via LLM-driven entity extraction notebook, closes #671 2024-02-21 12:06:34 -05:00
davidmezzetti ad3cf71441 Update notebook 2024-02-21 12:05:51 -05:00
davidmezzetti 3537a1c590 Add graph extra dependencies, closes #664 2024-02-20 19:22:59 -05:00
davidmezzetti b6ed805319 Add graph search to embeddings query documentation 2024-02-20 19:02:46 -05:00
davidmezzetti dc5d913ac6 Add graph search, closes #534, closes #540, closes #670 2024-02-20 11:55:28 -05:00
davidmezzetti 9aa1f7b453 Bump version 2024-02-18 07:26:42 -05:00
davidmezzetti 45aa002af7 Remove build script workaround and update install documentation 2024-02-17 17:09:08 -05:00
davidmezzetti 433a6d3f46 Temporary build script workaround 2024-02-16 12:20:30 -05:00
davidmezzetti 379ce4845d Adding training dependencies to notebooks, closes #669 2024-02-16 11:47:27 -05:00
David Mezzetti 6f17f29525 Merge pull request #666 from babinux/patch-1
Update 40_Text_to_Speech_Generation.ipynb
2024-02-14 11:31:12 -05:00
Jerome f1dd332ce7 Update 40_Text_to_Speech_Generation.ipynb
waveplot doesn't seem to be working anymore.
Updated the code with a fix.

waveshow
2024-02-13 23:51:30 -08:00
davidmezzetti e0f35d4859 Update documentation 2024-02-12 16:12:17 -05:00
davidmezzetti c09907f5fa Update documentation, closes #646 2024-02-12 16:03:23 -05:00
davidmezzetti b9375c8afe Sync use case examples with README 2024-02-09 07:01:54 -05:00
davidmezzetti fb3440a141 Add support for binary content and MessagePack, closes #630, closes #658 2024-02-06 11:39:30 -05:00
davidmezzetti fd6bf1263d Fix various issues with subindex reloading #618 2024-02-02 12:15:40 -05:00
davidmezzetti 6d7f7e6f2d Add configuration override to embeddings.load, closes #657 2024-02-02 06:14:33 -05:00
davidmezzetti 11035b70cf Fix documentation code filters, closes #656 2024-02-02 06:10:10 -05:00
davidmezzetti 29f49be53e Clear quantization configuration when a GPU is not available 2024-01-31 14:21:23 -05:00
davidmezzetti f2adc383eb Update HFTrainer to add PEFT support, closes #654 2024-01-31 13:52:47 -05:00
davidmezzetti 168f7e4efd Change default embeddings config to json, closes #652, Store index ids outside of config when content is disabled, closes #653. 2024-01-30 17:12:33 -05:00
davidmezzetti 3861b818ae Add external vectorization notebook, closes #651 2024-01-29 18:05:24 -05:00
davidmezzetti 12acc87e37 Resolve external vector transform functions, closes #650 2024-01-29 15:25:15 -05:00
davidmezzetti b4991cb696 Set tokenizer.pad_token when empty for all training paths, closes #649 2024-01-29 13:01:45 -05:00
davidmezzetti 3ff15c66f5 Add top level import for LLM, closes #648 2024-01-29 13:01:23 -05:00
davidmezzetti 55b10d8529 Update notebook 2024-01-23 18:14:29 -05:00
davidmezzetti 925a3b457b Add RAG with Semantic Graphs notebook, closes #645 2024-01-23 18:12:07 -05:00
davidmezzetti 0547f23b7b Update comment 2024-01-23 14:06:49 -05:00
davidmezzetti b35290ddab Add feature to return embeddings search results as graph, closes #644 2024-01-23 13:55:41 -05:00
davidmezzetti ea64551f34 Add indexing of embeddings graph relationships, closes #525 2024-01-22 10:16:00 -05:00
davidmezzetti 0b7aa775cf Benchmark script improvements, closes #641 2024-01-16 07:55:01 -05:00
davidmezzetti f1b9235887 Update documentation 2024-01-12 09:12:19 -05:00
davidmezzetti 190817fddb Fix benchmarks script, closes #636 2024-01-11 15:48:10 -05:00
davidmezzetti d1d869e0a7 Add notebook that covers API authorization and authentication, closes #628 2024-01-04 11:11:19 -05:00
davidmezzetti 25fc8ad39c Add documentation for API security, closes #627 2024-01-03 20:30:13 -05:00
davidmezzetti 3bc64fe752 Bump Torch CPU version 2024-01-02 14:35:40 -05:00
davidmezzetti f541272a26 Bump version 2024-01-02 14:35:24 -05:00
davidmezzetti b44d5778d8 Improve LiteLLM model detection method 2023-12-26 11:22:33 -05:00
davidmezzetti b907a5f99c Update test 2023-12-26 11:19:56 -05:00
davidmezzetti 8bc6940092 Add API dependencies and default token authorization. Migrate to FastAPI lifespan events. Closes #623. Closes #624. Closes #625. 2023-12-26 10:33:30 -05:00
davidmezzetti 7d3df12993 Update FAQ 2023-12-23 19:52:10 -05:00
davidmezzetti 55d205607a Add link to txtai.py 2023-12-22 15:28:37 -05:00
davidmezzetti 069a05e65f Add missing skl2onnx dependency, closes #622 2023-12-22 09:51:57 -05:00
davidmezzetti 2eca3e8962 Fix error with changed LiteLLM exception type, closes #620 2023-12-22 08:37:28 -05:00
davidmezzetti f9229bc27c Update test 2023-12-13 09:53:59 -05:00
davidmezzetti ece50e47eb Update model guide 2023-12-13 07:46:47 -05:00
davidmezzetti 12646f2bc2 Update documentation 2023-12-09 20:04:07 -05:00
davidmezzetti 783d266f6a Add notebook showing how to use llama.cpp, LiteLLM and custom generation models, closes #615 2023-12-09 20:03:51 -05:00
davidmezzetti a515d30b4d Update error message and change argument parsing 2023-12-09 13:08:25 -05:00
davidmezzetti 3dab4d8653 Update LLM to extend from Pipeline 2023-12-09 11:44:22 -05:00
davidmezzetti 6ce37d4cfc Refactor LLM pipeline to support multiple framework methods. Closes #614. Closes #611. Closes #554 2023-12-09 11:39:39 -05:00
davidmezzetti 28d1ff5746 Extractor (RAG) pipeline improvements, closes #613 2023-12-09 11:19:46 -05:00
davidmezzetti 57812b7f2c Fix issue with subdirectories and zip compression, closes #609 2023-12-04 13:35:42 -05:00
davidmezzetti c11fc7bf81 Update documentation 2023-12-04 12:56:46 -05:00
davidmezzetti 6e14cfef41 Handle None input in Tokenizer, closes #607 2023-12-03 10:35:47 -05:00
davidmezzetti 07069adce0 Documentation updates 2023-12-02 10:26:34 -05:00
davidmezzetti 6766b41922 Add notebook on how to build RAG pipelines, closes #605 2023-11-29 05:40:43 -05:00
davidmezzetti 77f9545a6d Update text extraction notebook, closes #604 2023-11-28 17:12:09 -05:00
davidmezzetti 5de34a667b Only add page breaks if requested via configuration 2023-11-28 16:35:12 -05:00
davidmezzetti 591e7307e3 Enhance textractor to better support RAG use cases, closes #603 2023-11-28 15:52:11 -05:00
davidmezzetti 4eeb0b920d Add txtai.cloud note 2023-11-22 10:44:36 -05:00
davidmezzetti 8a00a01c65 Update documentation 2023-11-19 09:30:01 -05:00
davidmezzetti 6f8963d301 Bump version 2023-11-08 13:32:29 -05:00
davidmezzetti f0cb32e8ff Update documentation 2023-11-08 09:29:23 -05:00
davidmezzetti 9768ae380f Update documentation to note SQL bind parameters, closes #596 2023-11-07 16:57:02 -05:00
davidmezzetti 7b2546883e Add support for SQL bind parameters, closes #564 2023-11-07 11:00:11 -05:00
davidmezzetti a4541ad2db Update featured articles 2023-11-06 18:27:06 -05:00
davidmezzetti 65c923cb78 Update documentation 2023-11-04 10:02:17 -04:00
davidmezzetti 7176802968 Update Faiss ANN to support IVF strings without number of cells, closes #594 2023-11-04 09:50:18 -04:00
davidmezzetti 826a248746 Update build script 2023-11-02 08:17:43 -04:00
davidmezzetti 2904036703 Update build script 2023-11-01 17:25:58 -04:00
davidmezzetti e7552a62cc Add env variable to disable macOS MPS devices, closes #592 2023-11-01 15:11:11 -04:00
davidmezzetti df3b810849 Update build script 2023-11-01 14:42:33 -04:00
davidmezzetti 4a1cd250d2 Add API extensions notebook, closes #591 2023-11-01 13:51:31 -04:00
davidmezzetti 51c978db2f Add quantization notebook, closes #588 2023-10-30 19:56:23 -04:00
davidmezzetti 42a55430ac Update benchmarks script 2023-10-30 14:22:13 -04:00
davidmezzetti a6889664dd Update benchmarks to use argparse #586 2023-10-30 09:33:22 -04:00
davidmezzetti 7774fe7255 Add support for scalar data to torch and numpy ANN backends, closes #587 2023-10-27 15:09:23 -04:00
davidmezzetti df6b304a5f Update benchmarks to read configuration, closes #586 2023-10-27 15:02:28 -04:00
davidmezzetti 0f35409219 Add scalar quantization support to vectors, closes #583 2023-10-27 15:01:40 -04:00
davidmezzetti bbbb4a20e2 Move vector normalization to vectors module, closes #584 2023-10-27 15:00:36 -04:00
davidmezzetti 840a13002f Update torch version in Dockerfile, closes #589 2023-10-27 14:58:32 -04:00
davidmezzetti 20ececc1ac Update build script 2023-10-27 06:40:04 -04:00
davidmezzetti 130e1fafd3 Update build script 2023-10-27 06:25:19 -04:00
davidmezzetti 3847e0f9fe Update documentation, closes #582 2023-10-27 05:58:52 -04:00
davidmezzetti 4447685ef9 Extractor pipeline improvements, closes #577 2023-10-14 11:15:02 -04:00
davidmezzetti fee257fbc6 Pass additional parameters to extractor task question template #575 2023-10-14 11:14:35 -04:00
davidmezzetti 5800445cc8 Reorganize tests to work with GitHub action memory constraints 2023-10-10 11:32:34 -04:00
davidmezzetti 1b368ede71 Reorganize tests to work with GitHub action memory constraints 2023-10-10 10:51:29 -04:00
davidmezzetti eb41320b7d Reorganize tests to work with GitHub action memory constraints 2023-10-10 10:35:32 -04:00
davidmezzetti 2ba32af615 Update recommended models, closes #573 2023-10-10 09:37:19 -04:00
davidmezzetti 7abf4fa809 Update test 2023-10-10 08:21:54 -04:00
davidmezzetti 7bd8717122 Update test 2023-10-09 20:28:27 -04:00
davidmezzetti 2548248778 Skip unit test on Windows 2023-10-09 19:49:05 -04:00
davidmezzetti fad9301dee Skip unit test on Windows 2023-10-09 17:02:49 -04:00
davidmezzetti 39d2b1e21c Fix inconsistency in Embeddings behavior in Applications, closes #571 2023-10-09 16:37:48 -04:00
davidmezzetti 89397b7e91 Add CLS pooling, closes #565 2023-10-09 12:18:51 -04:00
davidmezzetti 96acee4f6b Update LLM pipeline to support template parameter, closes #566 2023-10-03 14:39:03 -04:00
davidmezzetti f8a6c6381b Add flatten parameter to RetrieveTask, closes #569 2023-10-03 12:42:31 -04:00
davidmezzetti 46a8ef813e Add prefix parameter for object storage, closes #568 2023-10-03 12:41:50 -04:00
davidmezzetti 68fc138cd7 Bump version 2023-09-26 17:09:20 -04:00
davidmezzetti 0012321ee5 Fix issues related to torch device lookup for non-CUDA GPU devices, closes #551 2023-09-26 11:58:16 -04:00
davidmezzetti b1b07de49a Remove build script workaround, closes #542 2023-09-26 08:45:56 -04:00
davidmezzetti 17ab948c84 Update documentation to rename query column #563 2023-09-23 13:08:56 -04:00
davidmezzetti 26b87f7452 Remove deprecated option, closes #562 2023-09-22 12:54:19 -04:00
davidmezzetti 46ee7a34e1 Add application reindex method, closes #547. Add weights and index parameters, closes #561 2023-09-22 12:30:12 -04:00
davidmezzetti c79562083c Refresh notebook 2023-09-22 11:45:00 -04:00
davidmezzetti aadda6b5f7 Update reindex action to support new 6.x configuration, closes #557 2023-09-19 15:31:47 -04:00
davidmezzetti ba6888993c Update build script 2023-09-19 09:16:19 -04:00
davidmezzetti a475ffa122 Update build script 2023-09-19 09:14:29 -04:00
davidmezzetti 64308184cc Document how to run API via HTTPS, closes #553 2023-09-19 08:45:28 -04:00
David Mezzetti c7a7e6b436 Merge pull request #550 from cstech-carl-camilleri/patch-1
Align API parameter data type to translation pipeline
2023-09-11 13:12:39 -04:00
cstech-carl-camilleri 8678672ce2 Align API parameter data type to translation pipeline 2023-09-08 14:12:48 +02:00
davidmezzetti ff2a1c7a26 Add external database integration notebook, closes #549 2023-09-07 14:13:27 -04:00
davidmezzetti dbe0e8fe7f Add way to load database connection URL via environment variable, closes #548 2023-09-07 11:55:05 -04:00
davidmezzetti 9f39d9b3b6 Update comment 2023-09-06 17:24:27 -04:00
davidmezzetti e48a8885ce Add support for custom scoring instances, closes #544 2023-09-06 17:21:56 -04:00
davidmezzetti ce5a2fc687 Update build script #542 2023-09-02 10:28:44 -04:00
davidmezzetti ab16d54d1c Fix issue with scoring tags on upsert, closes #529 2023-09-02 09:58:55 -04:00
davidmezzetti 789a4555cb Update comment 2023-08-29 11:36:23 -04:00
davidmezzetti 1f72bc43a2 Update comment 2023-08-28 21:49:51 -04:00
davidmezzetti ae4f2a8a7e Add documentation for columns config 2023-08-28 15:52:03 -04:00
davidmezzetti c911f3438f Update test 2023-08-25 21:01:01 -04:00
davidmezzetti a1b92e0a33 Add metadata support for client-server databases, closes #532 2023-08-25 20:47:34 -04:00
davidmezzetti 5f93b21250 Fix notebook typo, closes #528 2023-08-20 14:29:58 -04:00
davidmezzetti cf30ca6f76 Update documentation 2023-08-20 14:24:43 -04:00
davidmezzetti 308b7c4357 Reorganize lists of examples 2023-08-18 15:26:25 -04:00
davidmezzetti 9151ae728d Add hybrid search notebook, closes #526 2023-08-18 13:43:02 -04:00
davidmezzetti 464b3dfc43 Add sparse keyword benchmark notebook, closes #523 2023-08-17 15:40:04 -04:00
davidmezzetti fa305a987b Add benchmarks script, closes #522 2023-08-17 09:23:58 -04:00
davidmezzetti b461135b6b Refresh introducing txtai notebook, closes #520 2023-08-15 09:30:54 -04:00
davidmezzetti 84dc026806 Update introducing txtai article link 2023-08-15 09:30:34 -04:00
davidmezzetti 38d0288857 Update documentation 2023-08-14 15:38:47 -04:00
davidmezzetti fe667abe13 Update documentation 2023-08-11 11:10:22 -04:00
davidmezzetti 5370378a13 Bump version 2023-08-10 07:42:59 -04:00
davidmezzetti 37d39ba687 Add 6.0 parameters to documentation 2023-08-09 22:31:22 -04:00
davidmezzetti c85c907a7f Add whats new in txtai 6.0 notebook, closes #519 2023-08-09 22:30:57 -04:00
davidmezzetti 16c9b154c1 Split Makefile into separate calls 2023-08-09 22:30:12 -04:00
davidmezzetti aebca3c2d1 Revert Makefile change 2023-08-09 22:01:41 -04:00
davidmezzetti 66da38b150 Revert skipped unit tests 2023-08-09 21:24:36 -04:00
davidmezzetti 9c504ec8a4 Refactor database tests to fix class structure 2023-08-09 20:51:09 -04:00
davidmezzetti 073f41b226 Split unit tests into separate calls 2023-08-09 15:47:16 -04:00
davidmezzetti b86afc7703 Update tests 2023-08-09 15:00:16 -04:00
davidmezzetti 7ec9ff335a Update tests 2023-08-09 14:58:39 -04:00
davidmezzetti 942a3c8e0b Update tests 2023-08-09 14:33:25 -04:00
davidmezzetti 4f1919e6b4 Update tests 2023-08-09 12:41:02 -04:00
davidmezzetti 1eff5dd4ba Update tests 2023-08-09 12:15:34 -04:00
davidmezzetti 3d2f12127a Update tests 2023-08-09 11:47:30 -04:00
davidmezzetti 653c4e5719 Skip test on Windows 2023-08-09 11:12:22 -04:00
davidmezzetti 4fd40f7086 Improvements when indexing through Applications, closes #518 2023-08-09 10:38:38 -04:00
davidmezzetti 3fbbdc1d2f Update comment 2023-08-09 07:27:54 -04:00
davidmezzetti ea7c811b82 Add additional indexes for embeddings, closes #515 2023-08-09 07:19:25 -04:00
davidmezzetti aaa5a72273 Add count method to database, closes #517 2023-08-09 07:18:30 -04:00
davidmezzetti d8be34f28e Fix issues with graph.infertopics, closes #516 2023-08-09 07:18:06 -04:00
davidmezzetti 2f73729101 Update image 2023-08-07 08:57:43 -04:00
davidmezzetti 8c60d0597a Move version strings to separate file to cleanup top level imports #514 2023-08-06 21:02:16 -04:00
davidmezzetti da42909007 Add top level imports, closes #514 2023-08-06 19:18:40 -04:00
davidmezzetti f2e89d9b2d Update documentation 2023-08-06 18:59:18 -04:00
davidmezzetti a8f8ae6e82 Update documentation for 6.0, closes #513 2023-08-06 13:51:56 -04:00
davidmezzetti 20d8df17b0 Add support for configurable text/object fields, closes #512 2023-07-28 22:15:21 -04:00
davidmezzetti 26634f8cbc Add multilingual graph topic modeling, closes #511 2023-07-28 22:13:43 -04:00
davidmezzetti febf636de2 Hybrid search, closes #509 2023-07-26 10:57:09 -04:00
davidmezzetti 97b8a00553 ANN improvements, closes #510 2023-07-25 17:39:07 -04:00
davidmezzetti ea9b9a2e9e Update comment 2023-07-25 17:30:04 -04:00
davidmezzetti e2a037e221 Update test 2023-07-20 11:21:48 -04:00
davidmezzetti f0886c4a82 Update tests 2023-07-20 10:39:19 -04:00
davidmezzetti 442e370c54 Update tests 2023-07-20 09:59:31 -04:00
davidmezzetti 0c00587a25 Update tests 2023-07-20 09:16:27 -04:00
davidmezzetti 88e0a9e84d Skip test on Windows due to GitHub Actions out of memory error 2023-07-20 08:36:03 -04:00
davidmezzetti 5251d17150 Skip test on Windows due to GitHub Actions out of memory error 2023-07-20 07:40:04 -04:00
davidmezzetti 75b4a8e7a2 Better BM25, closes #508 2023-07-20 06:38:56 -04:00
davidmezzetti dcd8067eed Support Unicode Text Segmentation in Tokenizer, closes #507 2023-07-18 15:30:39 -04:00
davidmezzetti b21df33603 Bump version, reorganize install_requires list 2023-07-18 15:14:01 -04:00
davidmezzetti f745a0e579 Update comment 2023-07-18 15:13:04 -04:00
davidmezzetti 59fc73f752 Add UUID auto-id, closes #505 2023-07-10 15:15:53 -04:00
davidmezzetti fe2d91370d Specify np.int64 as the dtype for clarity given it's the default 2023-07-10 15:15:22 -04:00
davidmezzetti dd40e88660 Reorganize embeddings configuration documentation, closes #504 2023-07-10 15:14:34 -04:00
davidmezzetti d3f8b255fc Update build and docs to address OpenMP issues on macOS and how to address. Closes #377 2023-07-10 13:01:16 -04:00
davidmezzetti f8ea07bdbc Update build script 2023-07-10 07:49:17 -04:00
davidmezzetti d328470d23 Update build script 2023-07-10 06:53:19 -04:00
davidmezzetti 1dda35baff Update build script 2023-07-10 06:27:29 -04:00
davidmezzetti 40695176c3 Update build script 2023-07-10 06:25:22 -04:00
davidmezzetti 319a11cacf Add autoid, closes #502. Add kwargs, closes #503 2023-07-09 15:18:09 -04:00
davidmezzetti 9740126622 Add ability for extractor to reference another pipeline in applications, closes #501 2023-07-08 16:44:51 -04:00
davidmezzetti 4c205c26da Support passing model parameters in pipelines, closes #500 2023-07-08 16:42:12 -04:00
davidmezzetti 197f681c8e Improve Pooling tokenizer load method, closes #499 2023-07-08 16:26:23 -04:00
davidmezzetti b35f5c7121 Add examples to documentation 2023-07-08 16:14:58 -04:00
davidmezzetti 56f0bceee3 Fix issue with empty string embeddings indexing, closes #496 2023-07-07 19:28:18 -04:00
davidmezzetti 3b554d64c9 Reduce image sizes 2023-07-04 13:41:42 -04:00
davidmezzetti 3b5f7c756b Update notebook 2023-07-03 13:56:43 -04:00
davidmezzetti 483f24765e Update txtai app image 2023-07-03 13:12:52 -04:00
davidmezzetti 50fc05db7d Update txtai app image 2023-07-03 09:57:48 -04:00
davidmezzetti a4348cdad5 Update documentation 2023-07-02 17:51:05 -04:00
davidmezzetti 4f4ff6c523 Update documentation 2023-07-02 17:40:35 -04:00
davidmezzetti d675cdc499 Update documentation 2023-07-02 17:39:29 -04:00
davidmezzetti b99650d77e Update documentation 2023-07-02 17:03:55 -04:00
davidmezzetti 83b4c35362 Update documentation 2023-07-02 16:54:27 -04:00
davidmezzetti 95b2afa928 Update documentation 2023-07-02 16:42:44 -04:00
davidmezzetti f197cce928 Update documentation 2023-07-02 16:39:30 -04:00
davidmezzetti ee67d8e568 Documentation updates, closes #495 2023-07-02 16:30:26 -04:00
davidmezzetti 847b7e42e8 Refactor Sequences and Generator pipeline into single LLM pipeline, closes #494 2023-07-02 15:56:26 -04:00
davidmezzetti a833eeff5d Add support for passing torch devices to embeddings and pipelines, closes #492 2023-06-19 08:10:18 -04:00
davidmezzetti 5ed0a3c52b Update setup.py 2023-06-15 17:03:19 -04:00
davidmezzetti e2c9ca4699 Add support for alternative acceleration devices, closes #489 2023-06-15 12:11:30 -04:00
davidmezzetti b30a96d9c2 Add WAL option for SQLite, closes #488 2023-06-14 13:06:10 -04:00
davidmezzetti e011e480e6 Update build script #486 2023-06-13 14:05:42 -04:00
davidmezzetti 0e7f705240 Update build script 2023-06-13 12:08:58 -04:00
davidmezzetti 702eb4389c Update minimum Python version to 3.8, closes #485 2023-06-13 11:47:38 -04:00
davidmezzetti affcfa5478 Update example application 2023-06-13 11:41:33 -04:00
davidmezzetti 64f333d5d3 Update example application 2023-06-09 14:48:24 -04:00
davidmezzetti 47749c4cd9 Update example application 2023-06-09 10:01:09 -04:00
davidmezzetti e77c01bd81 Update example application 2023-06-08 22:03:07 -04:00
davidmezzetti de41e01e7a Update example application 2023-06-08 15:21:38 -04:00
davidmezzetti a9d4cf6424 Update example application 2023-06-08 14:43:27 -04:00
davidmezzetti 3f225045b9 Add check for wget to Makefile #473 2023-06-07 08:32:17 -04:00
davidmezzetti aa55cf8572 Update documentation 2023-06-07 07:41:59 -04:00
davidmezzetti 712e346418 Add baseball example application, closes #484 2023-06-06 17:06:52 -04:00
davidmezzetti 4f359a2c8a Update notebook 2023-05-16 09:49:23 -04:00
davidmezzetti 1c95b2d546 Change build scripts back to Python 3.7 given timm 0.9.1 patch. Will update to 3.8 when txtai discontinues 3.7 support. 2023-05-12 13:10:01 -04:00
davidmezzetti 6a6ce21802 Update build scripts to require Python >= 3.8 given 3.7 EOL in June. Minimum setup.py Python version will be updated to require >= 3.8 soon. 2023-05-12 11:49:08 -04:00
davidmezzetti 7b16eb59e3 Update test 2023-05-12 11:17:12 -04:00
davidmezzetti 6b4979e670 Add accelerate dependency, closes #477 2023-05-10 15:16:00 -04:00
davidmezzetti 6b840ca238 Improve derivation of default embeddings model path, closes #476 2023-05-10 14:03:36 -04:00
davidmezzetti dc28294881 Fix unique constraint error with DuckDB, closes #475 2023-05-10 12:22:09 -04:00
davidmezzetti d5af40c699 Update notebook 2023-05-04 10:11:22 -04:00
davidmezzetti fa9d21ed20 Add notebook covering embeddings configuration options, closes #470 2023-05-04 09:21:09 -04:00
davidmezzetti a2a4ff3448 Refactor NumPy/Torch ANN backends to consolidate common code 2023-05-04 07:35:48 -04:00
davidmezzetti 85125c2c02 Add PyTorch and NumPy ANN backends, close #468, close #469 2023-05-03 07:34:56 -04:00
davidmezzetti e9d18d0064 Bump version 2023-04-27 18:29:05 -04:00
davidmezzetti 4fb8cb29b7 Update build script 2023-04-27 15:05:30 -04:00
davidmezzetti 1696a9713c Update build script 2023-04-27 14:48:09 -04:00
davidmezzetti 0001d8bfec Dot release 2023-04-27 14:32:01 -04:00
davidmezzetti 80d4f340f7 Raise error message when DuckDB backend not found, closes #464 2023-04-21 11:17:36 -04:00
davidmezzetti 7e9864c03e Update documentation 2023-04-20 13:51:53 -04:00
davidmezzetti ec1e6239fc Bump version 2023-04-20 12:55:14 -04:00
davidmezzetti 37dee5451b Update documentation 2023-04-20 10:06:50 -04:00
davidmezzetti 4c9d972de9 Update tests 2023-04-18 19:06:41 -04:00
davidmezzetti 82d43beb63 Remove unnecessary code 2023-04-18 18:30:21 -04:00
davidmezzetti fb094e4226 Update notebook 2023-04-18 18:16:43 -04:00
davidmezzetti a993d67cdc Update README 2023-04-18 17:59:47 -04:00
davidmezzetti 1adf8c371c Update comments 2023-04-18 17:56:03 -04:00
davidmezzetti d4dc811f18 Add DuckDB support, closes #462 2023-04-18 17:23:27 -04:00
davidmezzetti 2e606ec801 Add comment 2023-04-17 15:45:36 -04:00
davidmezzetti 178f4c26dc Add workflow streams, closes #461 2023-04-17 15:34:58 -04:00
davidmezzetti f393b95eea Replace original prompt in text generation pipeline, closes #459 2023-04-14 17:51:47 -04:00
davidmezzetti ddf610ba2c Fix issue with latest version of Transformers and TokenDetection.save_pretrained, closes #458 2023-04-14 17:51:27 -04:00
davidmezzetti aa07d4c010 Move models to txtinstruct project 2023-04-14 16:51:10 -04:00
davidmezzetti 39a41fa865 Pass generation keyword arguments, closes #457 2023-04-11 11:25:07 -04:00
davidmezzetti aa6e012880 Update documentation 2023-04-01 12:42:58 -04:00
davidmezzetti b4e9291705 Update documentation 2023-04-01 11:00:59 -04:00
davidmezzetti 523549cadf Update documentation 2023-03-31 19:30:34 -04:00
davidmezzetti a82e88991d Ensure extractor input queue is not empty, closes #456 2023-03-29 16:01:00 -04:00
davidmezzetti f0acf2afb4 Update notebooks 2023-03-29 14:40:20 -04:00
davidmezzetti a9032e6ab3 Update documentation 2023-03-29 14:27:27 -04:00
davidmezzetti 8434fa5aec Update example notebooks 2023-03-29 14:26:56 -04:00
davidmezzetti 49c2b8350f Documentation update 2023-03-29 10:14:53 -04:00
davidmezzetti 4cc6b8ca8d Refactor and simplify workflow builder to use Applications, closes #454 2023-03-22 09:15:35 -04:00
davidmezzetti 5b572dd553 Update constructor signatures for consistency across pipelines, update documentation 2023-03-11 11:01:51 -05:00
davidmezzetti d001dd6a87 Update constant 2023-03-11 07:52:32 -05:00
David Mezzetti 8ecfd019e7 Merge pull request #444 from saucam/txt_423
Add custom detection function for language detection
2023-03-11 06:38:52 -05:00
Yash Datta e96bc931f1 Fix failing tests 2023-03-11 11:46:37 +08:00
Yash Datta dbda61c376 Use constant 2023-03-11 10:49:00 +08:00
Yash Datta 797da5ac0f Fix according to comments 2023-03-11 10:31:23 +08:00
davidmezzetti 71022c824e Fix compatibility issue with latest version of onnxmltools, closes #449 2023-03-10 17:38:35 -05:00
davidmezzetti 33d83d75cb Fix bugs with embeddings graphs. Closes #421, closes #435, closes #453 2023-03-10 15:45:03 -05:00
davidmezzetti 27c7d7edf0 Bump version 2023-03-06 11:30:26 -05:00
davidmezzetti 5933bed469 Add prompt template and task chaining example notebook, closes #451 2023-03-03 13:43:09 -05:00
davidmezzetti d758e1fa76 Improve temporary file creation logic 2023-03-03 13:38:07 -05:00
davidmezzetti ee0cc5afcd Add lfs tracking for embeddings files, closes #450 2023-03-03 11:21:03 -05:00
davidmezzetti cc899b0c77 Pin onnxmltools dependency #449 2023-03-03 08:41:15 -05:00
davidmezzetti 12b632fe57 Pin onnxmltools #449 2023-03-03 07:46:44 -05:00
davidmezzetti 07b78adf16 Update documentation 2023-03-02 22:54:30 -05:00
davidmezzetti 20526e6bd7 Add tests 2023-03-02 17:35:29 -05:00
davidmezzetti cb9e5b4acf Add template task, closes #448 2023-03-02 17:34:11 -05:00
davidmezzetti c533be56dc Allow task action arguments to be dictionaries in addition to tuples, closes #447 2023-03-02 17:31:05 -05:00
davidmezzetti dc2d07bb8c Add extractor reference output format, closes #446 2023-03-02 17:27:52 -05:00
davidmezzetti 18325be256 Add terms method to embeddings, closes #445 2023-03-02 17:24:17 -05:00
davidmezzetti 82cb295867 Use logger instance vs logging package 2023-03-02 16:46:32 -05:00
davidmezzetti b9a8678e0a Update comment formatting 2023-03-02 16:45:58 -05:00
davidmezzetti 9989eec954 Remove ONNX macOS build workaround, closes #377 2023-02-28 07:05:15 -05:00
Yash Datta eb7f5ed68b Add custom detection function for language detection 2023-02-26 00:51:20 +08:00
davidmezzetti 873cc40729 Remove print statement 2023-02-25 06:55:01 -05:00
davidmezzetti 210f2f3f17 Extractor pipeline improvements, closes #443 2023-02-25 06:30:54 -05:00
davidmezzetti 8e8929725c Update README 2023-02-25 06:16:17 -05:00
davidmezzetti 472ef5495c Resolve application references in pipelines, closes #441 2023-02-23 15:35:48 -05:00
davidmezzetti b6667c7143 Update documentation 2023-02-20 19:31:12 -05:00
davidmezzetti 79e758da71 Add notebook for syncing embeddings with the cloud, closes #434 2023-02-20 19:24:18 -05:00
davidmezzetti 94e6eac30a Update documentation 2023-02-20 15:34:17 -05:00
davidmezzetti e3ddc5e9de Update pylint and black versions in pre-commit 2023-02-19 14:28:07 -05:00
davidmezzetti 9899ba0a56 Update comment 2023-02-19 13:58:46 -05:00
davidmezzetti 5aeefc3ab8 Update tests 2023-02-19 13:49:13 -05:00
davidmezzetti 0163727228 Update documentation 2023-02-19 13:46:22 -05:00
davidmezzetti 95697322c9 Add huggingface-hub integration, closes #430. Add cloud object storage support for standard embeddings indexes, closes #431. Add support for custom cloud providers, closes #432. Add support for storing embeddings config as JSON, closes #433. 2023-02-19 13:45:52 -05:00
davidmezzetti 61290f022a Update package names from compress to archive 2023-02-19 13:19:08 -05:00
davidmezzetti 399dc56bef Refactor archive module into separate package, closes #429 2023-02-19 13:18:18 -05:00
davidmezzetti e749d1bf14 Add support for instruction-based embeddings, closes #428 2023-02-19 13:11:20 -05:00
davidmezzetti fe5edd211f Update model path 2023-02-19 13:06:07 -05:00
davidmezzetti 9e095f4c11 Add sample parameter to Faiss ANN, closes #427 2023-02-16 19:55:19 -05:00
davidmezzetti defdd7103b Pin onnxruntime for macOS build #425 2023-02-10 23:22:24 -05:00
David Mezzetti 0ce31eed88 Merge pull request #424 from saucam/txt_383
Add translation pipeline parameter to return selected models and detected language
2023-02-10 23:10:02 -05:00
Yash Datta 363ef72bbd Remove defaultdict 2023-02-11 07:32:36 +08:00
Yash Datta e1081ffbf5 Incorporate review comments 2023-02-10 07:52:07 +08:00
Yash Datta c646210d1f code cleanup 2023-02-09 23:59:25 +08:00
Yash Datta 5b947b7990 Add translation pipeline parameter to return selected models and
detected language
2023-02-09 23:53:26 +08:00
David Mezzetti 679ba5f9d9 Merge pull request #422 from hsm207/docs
Mention the default storage engine
2023-02-07 10:25:22 -05:00
hsm207 ead9957f6d Mention the default storage engine 2023-02-07 14:48:33 +01:00
davidmezzetti bfa3147171 Bump version 2023-02-06 21:19:53 -05:00
davidmezzetti bb06a41db5 Skip additional test on Windows due to GitHub Actions memory constraints 2023-02-06 15:24:16 -05:00
davidmezzetti e288b7bd35 Update parameter order in API.search 2023-02-05 19:13:07 -05:00
davidmezzetti a40ccdfdbb Update article link 2023-02-05 08:45:50 -05:00
davidmezzetti b2914a17ec Add article link 2023-02-05 08:35:47 -05:00
davidmezzetti 5251777f63 Make texts parameter optional for extractor pipeline in applications, closes #420 2023-02-05 08:35:32 -05:00
davidmezzetti 0370269a1d Add new article to documentation 2023-02-03 09:33:39 -05:00
davidmezzetti 88fb779a6c Update notebook 2023-02-02 16:02:11 -05:00
davidmezzetti 7bda001ca5 Update documentation 2023-02-02 15:41:27 -05:00
davidmezzetti deaf1e7eaf Update documentation 2023-02-02 15:32:27 -05:00
davidmezzetti a0b488aaf1 Fix issue with extractor query method 2023-02-01 20:37:35 -05:00
davidmezzetti 33110c12ba Add notebook for prompt-driven search with LLMs, closes #418 2023-02-01 15:53:30 -05:00
davidmezzetti 7458eba386 Update documentation 2023-02-01 11:30:09 -05:00
davidmezzetti 6bbdeb0b25 Extractor pipeline updates, closes #417 2023-02-01 11:18:04 -05:00
davidmezzetti 60d9d52a36 Update documentation 2023-01-31 09:33:49 -05:00
davidmezzetti 592f8cf430 Add language-generation and token-detection training tasks. Closes #414. Closes #415. 2023-01-31 09:14:12 -05:00
davidmezzetti 0bfb5961ce Add generator pipeline for text generation, closes #416 2023-01-31 09:10:55 -05:00
davidmezzetti 27be4fa701 Update comment 2023-01-31 09:00:05 -05:00
davidmezzetti 8c315e5c80 Update build 2023-01-27 11:14:49 -05:00
davidmezzetti 842e7a21c9 Update build 2023-01-27 10:55:17 -05:00
hsm207 e2c4b92afe Add note to restart kernel if running in Google Colab (#410)
* Add note to restart kernel if running in Google Colab

Context: #409

* Revert "Add note to restart kernel if running in Google Colab
"

This reverts commit 6dca57d956.

* Move note to the examples section

Moving the note to restart the kernel to the examples section since this
happens in a lot of notebooks and is a bit unpredictable.

* Revert "Move note to the examples section"

This reverts commit cee9df3abe.

* Move note to FAQ section
2023-01-25 19:24:39 -05:00
davidmezzetti de5aeca831 Add FAQ section to documentation, closes #413 2023-01-24 11:44:29 -05:00
davidmezzetti e2e9036639 Add clear error when starting API and config file not found, closes #412 2023-01-24 10:04:38 -05:00
davidmezzetti 974a14f5aa Update documentation 2023-01-24 09:40:06 -05:00
davidmezzetti 38cf0d2abb Update documentation images 2023-01-16 09:03:14 -05:00
davidmezzetti 4fb67b88a3 Update documentation 2023-01-12 11:30:59 -05:00
davidmezzetti f89d7aa93c Fix whitespace 2023-01-12 10:55:25 -05:00
davidmezzetti 36f13b50a9 Add language modeling example notebook, closes #408 2023-01-12 10:54:14 -05:00
davidmezzetti d92a076c06 Fix issue with ORDER BY case sensitivity, closes #405 2023-01-09 16:52:02 -05:00
davidmezzetti d926dbcf4f Update build actions 2023-01-09 12:58:33 -05:00
davidmezzetti 3a6c108b53 Add language-modeling task to HFTrainer, closes #403 2023-01-09 10:34:08 -05:00
davidmezzetti 0a8638c9ba Only normalize topn scores 2022-12-27 19:13:55 -05:00
davidmezzetti e609f8c7e2 Normalize scores, closes #401 2022-12-27 18:45:10 -05:00
davidmezzetti 2726cfa2b4 Bump version 2022-12-20 12:39:51 -05:00
davidmezzetti 7f53458521 Documentation update 2022-12-20 09:37:32 -05:00
davidmezzetti 5cb5cc749a Update build 2022-12-16 15:05:38 -05:00
davidmezzetti c3d1529037 Build PyTorch 1.13.1 with macOS 2022-12-16 14:56:04 -05:00
davidmezzetti 1d5f4b1204 Fix bug with embeddings functions and application config, closes #400 2022-12-12 14:02:03 -05:00
davidmezzetti 677b848500 Update test 2022-12-12 13:46:43 -05:00
davidmezzetti edda6b65e8 Improve batchtransform performance, closes #396, closes #399 2022-12-12 11:53:40 -05:00
davidmezzetti a8c8bd88ae Pass evaluation metrics to underlying Trainer, closes #398 2022-12-12 11:52:19 -05:00
David Mezzetti 7560e192bd Merge pull request #397 from adin786/fix-logging-setup
Modified logger configuration in __init__.py (libraries shouldn't modify root logger)
2022-12-12 10:50:49 -05:00
Azam Din 11ab5ac8ab Summarised comment lines to keep the code tidy 2022-12-12 15:23:40 +00:00
Azam Din c8ccf5fd89 Removed root logger configuration as this should be handled by application code 2022-12-12 14:25:36 +00:00
davidmezzetti bb62355b53 Add additional format support, update comments 2022-12-03 08:26:09 -05:00
davidmezzetti 3707daaa95 Add default configuration for Embeddings, closes #393 2022-12-02 21:19:57 -05:00
davidmezzetti c90d78126c Transcription pipeline improvements, closes #392 2022-12-02 20:39:47 -05:00
davidmezzetti 53876d0aed Add YouTube tutorial links 2022-12-02 09:21:09 -05:00
davidmezzetti 7f9d009b33 Update title 2022-11-29 18:18:05 -05:00
davidmezzetti 277068b4c2 Add documentation for Text To Speech pipeline 2022-11-29 18:12:19 -05:00
davidmezzetti 184cb7bdba Add TextToSpeech Notebook, closes #391 2022-11-29 17:56:04 -05:00
davidmezzetti 1feaaf1efb Modify transcription pipeline to accept raw waveform data, closes #390 2022-11-29 14:14:52 -05:00
davidmezzetti 65a110e9fb Add TextToSpeech pipeline, closes #389 2022-11-29 11:51:10 -05:00
davidmezzetti cd089d6364 Update data package to handle label arrays, closes #388 2022-11-29 11:35:27 -05:00
davidmezzetti 69f0171c9d Split pipeline extras by function area, closes #387 2022-11-29 11:32:06 -05:00
davidmezzetti fd6dc6d613 Update build script 2022-11-21 19:49:58 -05:00
davidmezzetti d5b92ae3af Test build 2022-11-21 19:36:49 -05:00
davidmezzetti b030b0531a Add images to documentation 2022-11-21 08:03:22 -05:00
davidmezzetti f223a949b0 Add images to documentation 2022-11-21 08:00:16 -05:00
davidmezzetti caefddbab2 Add conda link 2022-11-20 13:27:44 -05:00
davidmezzetti a46bd67824 Add conda link 2022-11-20 13:25:29 -05:00
davidmezzetti ca9b92a9e5 Add conda install link 2022-11-20 13:16:44 -05:00
davidmezzetti c78e329631 Update coveralls badge 2022-11-19 19:29:34 -05:00
davidmezzetti b2517ae987 Update notebook to use specific image to make results reproducible, closes #357 2022-11-19 12:07:34 -05:00
davidmezzetti 096927a133 Fix issue with similar and bracket SQL expressions embedded in functions, closes #382 2022-11-19 11:45:29 -05:00
davidmezzetti 1f99694f76 Fix issue with select distinct, closes #379 2022-11-19 10:44:55 -05:00
davidmezzetti fa547a7892 Filter HF API list models request, closes #381 2022-11-19 10:42:27 -05:00
davidmezzetti 30453ed313 Update build script 2022-11-18 14:47:17 -05:00
davidmezzetti 63f63dd408 Update build script 2022-11-18 14:39:44 -05:00
davidmezzetti 61e78165de Update build script 2022-11-18 14:37:20 -05:00
davidmezzetti 73ec9950da Test macOS 12 with latest PyTorch #377 2022-11-18 14:20:59 -05:00
davidmezzetti aba2d551d0 Update build script and tests to address issues with latest version of FastAPI, closes #380 2022-11-18 14:08:08 -05:00
davidmezzetti 677f5aa139 Update build script 2022-11-18 11:49:54 -05:00
davidmezzetti 82461b4fd9 Update build script 2022-11-18 11:23:57 -05:00
davidmezzetti 3e8d63be86 Add article link 2022-11-12 13:18:31 -05:00
davidmezzetti 3294ec11f9 Update documentation 2022-11-10 08:05:12 -05:00
davidmezzetti f5aa36c241 Update documentation 2022-11-10 07:56:37 -05:00
davidmezzetti a8b00f661a Update documentation 2022-11-05 10:19:55 -04:00
davidmezzetti 9dba5493b4 Update build 2022-11-01 17:10:51 -04:00
davidmezzetti f6808c713a Update build 2022-11-01 17:06:30 -04:00
davidmezzetti 2527ab9afd Pin macOS build to torch 1.12.1 #377 2022-11-01 14:30:25 -04:00
davidmezzetti de8b2ee599 Consolidate compression logic into single package, closes #376 2022-11-01 13:55:44 -04:00
davidmezzetti 41bb1b89db Add documentation for #372 2022-10-25 14:03:03 -04:00
davidmezzetti 30f82a62b0 Add cross-encoder pipeline, closes #372 2022-10-25 13:35:48 -04:00
davidmezzetti e085cff3d9 Update article links 2022-10-21 19:27:16 -04:00
davidmezzetti bbd16ede2b Fix various issues with notebook, closes #369 2022-10-21 19:20:50 -04:00
davidmezzetti b6cddd1378 Update onnx quantization call to remove MatMul warnings #369 2022-10-19 20:09:00 -04:00
davidmezzetti ad27e105cb Bump version 2022-10-18 12:43:27 -04:00
davidmezzetti 35be4524e6 Move mkdocs dependencies from docs.yml to setup.py, closes #368 2022-10-17 13:22:49 -04:00
davidmezzetti 5938b76e30 Fix issue with Application autosequencing, closes #367 2022-10-17 12:53:03 -04:00
davidmezzetti 8afd5efb1b Update translation notebook, closes #366 2022-10-17 12:52:45 -04:00
davidmezzetti 4868bdcc42 Update transcription notebook, closes #365 2022-10-17 12:52:24 -04:00
davidmezzetti cd43c47fc9 Improve default max length logic, closes #364 2022-10-17 10:09:42 -04:00
davidmezzetti a8b1a7b4b5 Only pass tokenizer to pipeline when necessary, closes #363 2022-10-17 08:19:57 -04:00
davidmezzetti e8cce346c5 Update transcription pipeline to call automatic-speech-recognition pipeline, closes #362 2022-10-16 09:19:18 -04:00
davidmezzetti f3a185c339 Update caption pipeline to call image-to-text pipeline, closes #361 2022-10-16 09:18:37 -04:00
davidmezzetti 313f66fd93 Update translation pipeline to have broader model support and an option to always use the base model, closes #355 2022-10-16 09:16:40 -04:00
davidmezzetti a5b9968213 Add notebook covering classic topic modeling with BM25, closes #360 2022-10-13 11:26:09 -04:00
davidmezzetti 4b9ac385ac Support authentication parameters in storage task, closes #332 2022-10-12 10:46:38 -04:00
davidmezzetti 3ecdded75f Add target architecture to Dockerfile. Supports building multiarch images. Closes #324 2022-10-11 16:39:37 -04:00
davidmezzetti a8ee067b1f Update build script 2022-10-11 09:00:01 -04:00
davidmezzetti 922b8eb0f5 Use tags fields in application.add, closes #359 2022-10-11 08:09:57 -04:00
davidmezzetti dcd57de2a7 Update build script 2022-10-10 08:25:35 -04:00
davidmezzetti d71f87d3f7 Update build script 2022-10-10 08:17:48 -04:00
davidmezzetti 16dcaa3ea5 Add notes for known issues 2022-10-05 13:47:36 -04:00
davidmezzetti 785c9ffcaa Update build workflow 2022-10-05 11:38:49 -04:00
davidmezzetti 1ad0705051 Update build workflow 2022-10-05 11:36:11 -04:00
davidmezzetti 09b8b3c999 Update test 2022-10-05 10:41:12 -04:00
davidmezzetti bc91beeec5 Update scoring algorithms, closes #351 2022-10-04 09:40:10 -04:00
davidmezzetti 9b74d6a7c5 Add topic stop words, closes #352 2022-10-04 09:39:21 -04:00
davidmezzetti 5ad2331f94 Bump version 2022-09-27 13:04:01 -04:00
davidmezzetti 539daf9ad5 Update article list 2022-09-27 13:03:49 -04:00
davidmezzetti fa5ad86564 Fix console error with compressed indexes, closes #347 2022-09-27 09:14:27 -04:00
davidmezzetti fee71cf66f Add note regarding extras packages 2022-09-27 09:13:57 -04:00
David Mezzetti 8f2b240f26 Merge pull request #346 from lipusz/lipusz-patch-1
Fix docker command "--it"
2022-09-26 14:49:36 -04:00
Tibor Lipusz 98f329fbdc Fix docker command "--it" 2022-09-23 19:42:29 +02:00
davidmezzetti 51fc6a6676 Fix typo 2022-09-22 10:20:20 -04:00
davidmezzetti f460ddfac2 Update audio transcription notebook, closes #345 2022-09-22 10:07:30 -04:00
davidmezzetti 0957e7bde1 Update documentation 2022-09-21 14:17:08 -04:00
davidmezzetti f1906bd891 Allow custom ann, database and graph instances, closes #344 2022-09-20 13:55:12 -04:00
davidmezzetti 0a23cbd88a Add graph documentation, closes #343 2022-09-20 08:12:16 -04:00
davidmezzetti 4198a1380c Add notebook covering Semantic Graphs, closes #341 2022-09-16 13:02:06 -04:00
davidmezzetti 35c452c448 Update typo in comment 2022-09-16 12:40:24 -04:00
davidmezzetti 33bc4261be Fix cached_path error, closes #340 2022-09-15 09:28:05 -04:00
davidmezzetti 4018cd968d Remove old out of date README file 2022-09-15 09:26:56 -04:00
davidmezzetti f9f570327b Add graph extra to all 2022-09-14 11:20:42 -04:00
davidmezzetti 8bd6bc7b38 Add a semantic graph component, closes #339 2022-09-14 11:18:18 -04:00
davidmezzetti 60d1c7c2d7 Add SQL expression columns, closes #338 2022-09-14 11:14:50 -04:00
davidmezzetti c346df20db Fix scoring.index with no tokens parsed resulting in error, closes #337 2022-09-12 10:14:55 -04:00
davidmezzetti 8fd8e10eb4 Update workflow documentation to note generator execution, closes #336 2022-09-12 10:13:49 -04:00
davidmezzetti c2c3216449 Support non-text document elements in Applications, closes #335 2022-09-12 10:12:33 -04:00
davidmezzetti 3f824ec275 Update ANN package to make terminology more consistent, closes #334 2022-09-12 10:11:17 -04:00
davidmezzetti 4f479056b4 Bump version 2022-09-12 10:07:21 -04:00
davidmezzetti 7e9ee71cdf Update pylint statement 2022-09-12 10:05:57 -04:00
davidmezzetti f28a1c0154 Update console to conditionally import library, closes #333 2022-09-12 10:04:23 -04:00
davidmezzetti 26db3cc61a Bump version 2022-09-12 10:00:37 -04:00
davidmezzetti 8a9e559229 Update build workflow 2022-09-01 12:11:02 -04:00
davidmezzetti 66babae717 Test build library 2022-09-01 11:48:52 -04:00
davidmezzetti c59bf8c743 Test build library 2022-09-01 11:35:32 -04:00
davidmezzetti 42afe5a174 Test build library 2022-09-01 11:25:57 -04:00
davidmezzetti e316460a5b Update build workflow 2022-08-25 16:22:59 -04:00
davidmezzetti febd4be8e0 Test macOS build 2022-08-25 16:14:10 -04:00
davidmezzetti b983704d0c Update notebook 2022-08-25 07:25:16 -04:00
davidmezzetti 96b4ab797c Add notebook demonstrating functionality of individual embeddings components, #328 2022-08-24 12:28:01 -04:00
davidmezzetti fcb5886600 Add notebook demonstrating functionality of individual embeddings components, closes #328 2022-08-24 12:26:52 -04:00
davidmezzetti 48fa74d87a Add scoring.count() #327 2022-08-24 11:47:47 -04:00
davidmezzetti 215196a748 Add scoring-based search, closes #327 2022-08-24 09:06:08 -04:00
davidmezzetti 5f1e4e8587 Modify embeddings search candidate default logic, closes #326 2022-08-24 08:54:46 -04:00
davidmezzetti bbae444bdf Clarify embeddings.save documentation, closes #325 2022-08-24 08:46:51 -04:00
davidmezzetti f2a6136d7c Update Dockerfile to use latest PyTorch CPU package 2022-08-15 11:46:31 -04:00
davidmezzetti cfc7ecbc0d Bump version 2022-08-15 11:45:49 -04:00
davidmezzetti 7642d6c0b9 Update build workflow 2022-08-14 21:47:47 -04:00
davidmezzetti 2025a0fc55 Test latest version of PyTorch with macOS 2022-08-14 21:37:03 -04:00
davidmezzetti cfc8cafc6f Update build workflow 2022-08-14 21:08:08 -04:00
davidmezzetti e2c58e28ee Change build to only limit torch==1.11.0 for macOS #300 2022-08-05 20:37:29 -04:00
davidmezzetti a218ef2162 Change build to only limit torch==1.11.0 for macOS #300 2022-08-05 20:06:11 -04:00
davidmezzetti 6efe6d8046 Revert change, seg faults still an issue with torch==1.12.1 #300 2022-08-05 19:35:05 -04:00
davidmezzetti 47bfd88739 Test torch==1.12.1 with OMP_NUM_THREADS=3 #300 2022-08-05 19:26:27 -04:00
davidmezzetti 19cf624ab3 Test torch==1.12.1 with OMP_NUM_THREADS=3 #300 2022-08-05 19:18:38 -04:00
davidmezzetti 9b28b7a391 Test torch==1.12.1 with OMP_NUM_THREADS=3 #300 2022-08-05 19:15:04 -04:00
davidmezzetti dd3191e126 Revert change, seg faults still an issue with torch==1.12.1 #300 2022-08-05 19:00:01 -04:00
davidmezzetti 31dc4fd16c Update build 2022-08-05 18:40:26 -04:00
davidmezzetti 60344f500f Test torch==1.12.1 #300 2022-08-05 18:23:39 -04:00
davidmezzetti c4caf708ee Improve embeddings performance with large query limits, closes #318 2022-08-04 10:06:01 -04:00
davidmezzetti 3ced24d7e3 Restore torch==1.11.0, build still failing after new Transformers release 2022-07-27 12:04:25 -04:00
davidmezzetti e3bf889a28 Test PyTorch 1.12 with latest version of Transformers 2022-07-27 11:48:36 -04:00
davidmezzetti d73a556b8c Update labels pipeline to work with upstream text classification pipeline changes, closes #295 2022-07-25 15:03:21 -04:00
davidmezzetti 4f02a7e6e4 Restore torch==1.11.0 2022-07-25 08:52:31 -04:00
davidmezzetti 5715399ab2 Test PyTorch 1.12 2022-07-25 07:36:03 -04:00
davidmezzetti 4f5609ae8a Fix GitHub light/dark mode selector in README 2022-07-24 12:46:41 -04:00
davidmezzetti fdb2ae2828 Update documentation with new demo and diagrams, closes #313 2022-07-24 12:43:02 -04:00
davidmezzetti eae295bbfa Add indexing guide to docs, closes #312 2022-07-22 11:44:17 -04:00
davidmezzetti 4db72769c0 Move quantize config param to Faiss, closes #311 2022-07-22 11:26:35 -04:00
davidmezzetti cc91d5e56d Use single constant for current pickle protocol, closes #310 2022-07-21 16:29:35 -04:00
davidmezzetti 332b232349 Embeddings vector batch improvements, closes #309 2022-07-21 15:48:28 -04:00
davidmezzetti 8bee0184f3 Skip test on Windows due to lack of mmap support 2022-07-20 20:55:55 -04:00
davidmezzetti a1d4ddd336 Update documentation 2022-07-20 20:11:38 -04:00
davidmezzetti 75dd514a14 Add mmap parameter to Faiss, closes #308 2022-07-20 20:02:59 -04:00
davidmezzetti a51e0f4ad6 Add Hashnode tutorial series to further reading 2022-07-15 11:28:18 -04:00
davidmezzetti 7bd291da1e Add Slack channel to README 2022-07-14 08:48:38 -04:00
davidmezzetti 9312a6ba64 Reformat test 2022-07-13 14:36:09 -04:00
davidmezzetti 2f96536042 Add cloud config to application.upsert method, closes #306 2022-07-13 13:42:28 -04:00
davidmezzetti e325db9fd5 Fix bug with missing application locks, closes #305 2022-07-13 13:21:33 -04:00
davidmezzetti 5f5167ce6e Update notebook 2022-07-11 17:19:23 -04:00
davidmezzetti 09a92335a5 Add notebook on running txtai with native code, closes #304 2022-07-11 14:47:49 -04:00
davidmezzetti 4e84fcea19 Lower required version of Pillow to 7.1.2, closes #303 2022-07-11 13:53:21 -04:00
davidmezzetti f690d26d77 Lower required version of Pillow to 7.2.0, closes #303 2022-07-11 13:44:44 -04:00
davidmezzetti 1743974bf7 Update webpage summary image generation notebook #299 2022-07-02 22:50:02 -04:00
davidmezzetti df58bbd5d4 Update webpage summary image generation notebook #299 2022-07-02 09:07:08 -04:00
davidmezzetti 8925341a3c Update build script 2022-06-30 23:08:58 -04:00
davidmezzetti ac05a85235 Update build script 2022-06-30 22:59:56 -04:00
davidmezzetti 52c67abe4a Update build script 2022-06-30 22:52:03 -04:00
davidmezzetti 896afc7a04 Update build script 2022-06-30 22:47:39 -04:00
davidmezzetti 9bb098665a Update build script 2022-06-30 22:05:20 -04:00
davidmezzetti a51a689906 Update build script 2022-06-30 22:02:50 -04:00
davidmezzetti 8ad154fdda Update build script 2022-06-30 21:55:27 -04:00
davidmezzetti 680c33debd Update build script 2022-06-30 15:46:00 -04:00
davidmezzetti 723889acbc Update build script 2022-06-30 15:40:43 -04:00
davidmezzetti 85789ac155 Update build script 2022-06-30 15:37:06 -04:00
davidmezzetti 16f8470ea7 Add webpage summary image generation notebook, closes #299 2022-06-30 14:54:28 -04:00
davidmezzetti a7aed3cf46 Update documentation 2022-06-28 09:51:11 -04:00
davidmezzetti 1a3848bac0 Unpin protobuf as issue is fixed upstream, closes #285 2022-06-18 12:52:08 -04:00
davidmezzetti a31cc4d5ab Update tabular notebook, closes #297 2022-06-17 11:11:23 -04:00
davidmezzetti 84d782c146 Skip checking for null when column is a list, closes #296 2022-06-17 10:35:49 -04:00
davidmezzetti 3077a1524f Pin transformers version to workaround 4.20.x change 2022-06-16 21:29:04 -04:00
davidmezzetti c28327b07c Add comment 2022-06-16 21:28:36 -04:00
davidmezzetti 10102cbb52 Only increment index offset by number of items passed to ANN index, closes #294 2022-06-16 16:22:14 -04:00
davidmezzetti e444d771ee Add sql offset clause support, closes #293 2022-06-13 10:16:48 -04:00
davidmezzetti ef9c2355b2 Add video tutorial to documentation 2022-06-07 14:26:14 -04:00
davidmezzetti 822832008b Update documentation 2022-06-04 08:55:18 -04:00
davidmezzetti fb3bbf3d8c Add video tutorial to documentation 2022-06-04 08:50:06 -04:00
davidmezzetti d6e98d635c Update pipeline workflow notebook, closes #292 2022-06-03 16:44:23 -04:00
davidmezzetti 67b776ca43 Consume generator outputs in workflow tasks, closes #291 2022-06-03 09:27:33 -04:00
davidmezzetti 917b2cfe59 Add ability to resolve workflows within applications, closes #290 2022-06-03 09:27:08 -04:00
davidmezzetti 4aafae4a79 Update build dependency #289 2022-05-29 20:40:55 -04:00
davidmezzetti db70d102b6 Update build script dependency, closes #289 2022-05-29 20:32:28 -04:00
David Mezzetti 7884cdd659 Merge pull request #287 from csnelsonchu/fix/readme-api
the key should be writable instead of path
2022-05-29 20:18:56 -04:00
Nelson Chu 9eb343f60e the key should be writable instead of path 2022-05-29 13:15:29 +08:00
davidmezzetti 410cdc8382 Workaround protobuf and onnxruntime compatibility issue #285 2022-05-28 07:58:13 -04:00
davidmezzetti e36b0e7851 Update documentation 2022-05-28 07:45:11 -04:00
davidmezzetti 5f82b46577 Update documentation 2022-05-27 08:21:33 -04:00
davidmezzetti bd3db1aece Update documentation 2022-05-27 08:12:00 -04:00
davidmezzetti 667ed023f6 Update documentation 2022-05-27 08:03:25 -04:00
davidmezzetti ace1b04161 Add transform workflow action to Application, closes #281 2022-05-20 08:35:24 -04:00
davidmezzetti fda7fd70f4 Bump version 2022-05-17 11:40:45 -04:00
davidmezzetti 248acc1f15 Fix summary pipeline issue with transformers>=4.19.0, closes #278 2022-05-12 13:26:55 -04:00
davidmezzetti 1a8a8f1ca4 Add logic to detect external vectors method, closes #277 2022-05-12 12:31:17 -04:00
davidmezzetti b8c29666de Refactor vectors package to improve code reuse, closes #276 2022-05-11 07:18:49 -04:00
davidmezzetti ddd5074308 Improve efficiency of external vectors, closes #275 2022-05-10 21:28:04 -04:00
davidmezzetti 1f537e88ba Improve efficiency of external vectors, #275 2022-05-10 15:19:35 -04:00
davidmezzetti bee9585075 Add CITATION file, closes #273 2022-05-04 13:07:38 -04:00
davidmezzetti b073f4a16e Update documentation 2022-05-04 10:49:53 -04:00
davidmezzetti 0ccd415281 Add QA database example notebook, closes #272 2022-05-04 10:37:41 -04:00
davidmezzetti ba9a5fce9d Update test 2022-04-28 13:28:24 -04:00
davidmezzetti f085a8dec7 Update query translation model scripts 2022-04-28 12:59:54 -04:00
davidmezzetti c11b66e485 Use local logger 2022-04-28 08:33:25 -04:00
davidmezzetti 2e8cb047f9 Add scripts to train bashsql query translation model, closes #271 2022-04-27 15:53:52 -04:00
davidmezzetti 8fcab0699a Bump version 2022-04-20 11:52:08 -04:00
davidmezzetti bb158d5be3 Add notebook for query translation, closes #269 2022-04-20 07:33:25 -04:00
davidmezzetti a2aa1b16bf Update documentation 2022-04-19 07:46:45 -04:00
davidmezzetti 1d638e0344 Update documentation 2022-04-18 17:27:27 -04:00
davidmezzetti af9ac030d9 Update documentation 2022-04-18 16:50:18 -04:00
davidmezzetti d77786197b Add query translation logic in embeddings searches, closes #266 2022-04-18 15:58:04 -04:00
davidmezzetti 3c925f8848 Add scripts to train query translation models, closes #265 2022-04-18 10:38:47 -04:00
davidmezzetti be73e53ce8 Update parameters 2022-04-16 08:42:15 -04:00
davidmezzetti f4e76caf43 Update HFTrainer to support sequence-sequence models, closes #262 2022-04-16 08:35:50 -04:00
davidmezzetti 2d4f905a7c Add sequences pipeline, closes #261 2022-04-16 08:34:50 -04:00
davidmezzetti 4c89e20348 Revert change to limit transformers version, fixed upstream, closes #258 2022-04-13 10:57:40 -04:00
davidmezzetti a5829456d6 Skip test on Windows 2022-04-09 20:16:01 -04:00
davidmezzetti 353fef1483 Update precommit to use latest version of psf black, closes #259 2022-04-09 09:52:34 -04:00
davidmezzetti 48b8c5f054 Limit transformers to < 4.18.0 for now #258 2022-04-09 09:08:05 -04:00
davidmezzetti 78c325a8ee Fix documentation error, closes #256 2022-04-09 08:02:07 -04:00
davidmezzetti 3e898a8bac Revert change limiting tokenizer version #253 2022-04-01 08:25:03 -04:00
davidmezzetti f107ca20b3 Limit tokenizers to < 0.12.0 for now #253 2022-03-31 12:37:01 -04:00
davidmezzetti be6bda4da4 Add article 2022-03-31 09:42:44 -04:00
davidmezzetti 2c76a79d4a Fix issue with Windows paths being interpreted as escape characters 2022-03-30 09:18:51 -04:00
davidmezzetti 42814e2c90 Update test 2022-03-29 23:11:14 -04:00
davidmezzetti d41f5c1c00 Update test 2022-03-29 16:59:32 -04:00
davidmezzetti 09320cbc1b Update test 2022-03-29 16:57:57 -04:00
davidmezzetti e1f52f8b0f Update test 2022-03-29 14:49:27 -04:00
davidmezzetti edbbadfcd5 Update test 2022-03-29 13:53:46 -04:00
davidmezzetti 16ffac2741 Add txtai console, closes #252 2022-03-29 13:05:00 -04:00
davidmezzetti dba8e51ee4 Add logic to better handle explainability when using SQL statements #248 2022-03-29 12:57:27 -04:00
davidmezzetti 3d13348c25 Add notebook for model explainability, closes #249 2022-03-24 16:47:16 -04:00
davidmezzetti 0615976b6b Refactor embeddings method 2022-03-24 15:20:34 -04:00
davidmezzetti 540a637c03 Add semantic search explainability, closes #248 2022-03-24 15:11:51 -04:00
davidmezzetti fa342a4f6a Add clarification on building word vector backed models with scoring #247 2022-03-17 10:05:03 -04:00
davidmezzetti fd954eaf68 Bump version 2022-03-11 20:23:16 -05:00
davidmezzetti 5800b33bb5 Update torch version 2022-03-11 20:23:01 -05:00
davidmezzetti 4856956aa8 Bump version 2022-03-11 15:07:23 -05:00
davidmezzetti a86e161d9b Fix word embeddings regression with batch transformation, closes #245 2022-03-11 15:05:41 -05:00
davidmezzetti 564953b275 Update build script 2022-03-09 20:09:22 -05:00
davidmezzetti 22bd1e5ae9 Bump version 2022-03-09 20:09:11 -05:00
646 changed files with 103072 additions and 12207 deletions
+1
View File
@@ -2,6 +2,7 @@
source = src/python
concurrency = multiprocessing,thread
disable_warnings = no-data-collected
omit = **/__main__.py
[combine]
disable_warnings = no-data-collected
+40 -17
View File
@@ -10,44 +10,67 @@ jobs:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
timeout-minutes: 60
timeout-minutes: 75
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- name: Checkout code
uses: actions/checkout@v6
- name: Install Python
uses: actions/setup-python@v6
with:
python-version: 3.7
- uses: actions/setup-java@v1
python-version: "3.11"
- name: Install Java
uses: actions/setup-java@v5
with:
java-version: 1.8
distribution: "zulu"
java-version: 21
- name: Install dependencies - Linux
run: sudo apt-get install libsndfile1
run: |
sudo apt-get update
sudo apt-get install libportaudio2 libsndfile1 libegl1 libgles2
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
if: matrix.os == 'ubuntu-latest'
- name: Install dependencies - MacOS
- name: Install dependencies - macOS
run: |
brew install libomp
pip install annoy==1.16.3
echo "PYTORCH_MPS_DISABLE=1" >> $GITHUB_ENV
echo "LLAMA_NO_METAL=1" >> $GITHUB_ENV
echo "TIKA_STARTUP_SLEEP=30" >> $GITHUB_ENV
echo "TIKA_STARTUP_MAX_RETRY=10" >> $GITHUB_ENV
brew install portaudio
pip install torch==2.12.1 torchvision==0.27.1
if: matrix.os == 'macos-latest'
- name: Install dependencies - Windows
run: choco install wget
run: |
"PYTHONIOENCODING=utf-8" >> $env:GITHUB_ENV
choco install wget
if: matrix.os == 'windows-latest'
- name: Build
run: |
pip install -U pip
pip install -U wheel coverage coveralls
pip install .[all]
python -c "import nltk; nltk.download('punkt')"
pip install -U wheel
pip install .[all,dev]
pip cache purge
python -c "import nltk; nltk.download(['punkt', 'punkt_tab', 'averaged_perceptron_tagger_eng'])"
python --version
make data coverage
env:
HF_HUB_ETAG_TIMEOUT: 100
HF_HUB_DOWNLOAD_TIMEOUT: 100
HF_XET_CHUNK_CACHE_SIZE_BYTES: 0
DOCLING_DEVICE: "cpu"
DOCLING_INFERENCE_COMPILE_TORCH_MODELS: false
- uses: pre-commit/action@v2.0.0
- uses: pre-commit/action@v3.0.1
if: matrix.os == 'ubuntu-latest'
- name: Test Coverage
run: coveralls --service=github
run: |
coverage report --fail-under=100
coveralls --service=github
if: matrix.os == 'ubuntu-latest'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+13 -6
View File
@@ -7,12 +7,19 @@ jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
- name: Checkout code
uses: actions/checkout@v6
- name: Install Python
uses: actions/setup-python@v6
with:
python-version: 3.7
- run: |
python-version: "3.11"
- name: Install txtai
run: |
pip install -U pip wheel
pip install mkdocs-material mkdocstrings mkdocs-autorefs==0.3.1 .[all]
- run: mkdocs gh-deploy --force
pip install .[all,dev]
- name: Deploy documentation
run: mkdocs gh-deploy --force
+22
View File
@@ -0,0 +1,22 @@
# GitHub Actions minimal build
name: minimal
on: ["push", "pull_request"]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Install Python
uses: actions/setup-python@v6
with:
python-version: "3.11"
- name: Minimal install
run: |
pip install -U pip wheel
MINIMAL=1 pip install .
python -c "import txtai"
+1
View File
@@ -7,3 +7,4 @@ __pycache__/
.coverage
.coverage.*
*.pyc
.vscode/
+3 -2
View File
@@ -1,13 +1,14 @@
repos:
- repo: https://github.com/pycqa/pylint
rev: v2.12.1
rev: v3.3.1
hooks:
- id: pylint
args:
- -d import-error
- -d duplicate-code
- -d too-many-positional-arguments
- repo: https://github.com/ambv/black
rev: 21.11b1
rev: 24.10.0
hooks:
- id: black
language_version: python3
+2 -3
View File
@@ -12,9 +12,8 @@ max-locals=40
max-returns=10
max-attributes=20
min-public-methods=0
max-public-methods=80
[FORMAT]
max-line-length=150
[MESSAGES CONTROL]
disable=R0201
max-module-lines=1500
+11
View File
@@ -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 AI framework"
abstract: "txtai is an all-in-one open-source AI framework 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
+30 -2
View File
@@ -14,10 +14,16 @@ 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/v3.5.0/tests.tar.gz -P /tmp
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
@@ -26,5 +32,27 @@ test:
# Run tests while calculating code coverage
coverage:
coverage run -m unittest discover -v -s ${TEST_DIR}
coverage run -m unittest discover -v -k testagent -s ${TEST_DIR}
coverage run -m unittest discover -v -k testann -s ${TEST_DIR}
coverage run -m unittest discover -v -k testapi -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 testlibrary -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.testaudio -s ${TEST_DIR}
coverage run -m unittest discover -v -k testpipeline.testdata -s ${TEST_DIR}
coverage run -m unittest discover -v -k testpipeline.testimage -s ${TEST_DIR}
coverage run -m unittest discover -v -k testpipeline.testllm -s ${TEST_DIR}
coverage run -m unittest discover -v -k testpipeline.testtext -s ${TEST_DIR}
coverage run -m unittest discover -v -k testpipeline.testtrain -s ${TEST_DIR}
coverage run -m unittest discover -v -k testscoring -s ${TEST_DIR}
coverage run -m unittest discover -v -k testserialize -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
+186 -123
View File
@@ -2,85 +2,182 @@
<img src="https://raw.githubusercontent.com/neuml/txtai/master/logo.png"/>
</p>
<h3 align="center">
<p>Build AI-powered semantic search applications</p>
</h3>
<p align="center">
<b>All-in-one AI framework</b>
</p>
<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/releases">
<img src="https://img.shields.io/github/release-date/neuml/txtai.svg?style=flat&color=blue" alt="GitHub Release Date"/>
<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://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 href="https://join.slack.com/t/txtai/shared_invite/zt-37c1zfijp-Y57wMty6YOx_hyIHEQvQJA">
<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/coveralls/github/neuml/txtai" alt="Coverage Status">
<img src="https://img.shields.io/coverallsCoverage/github/neuml/txtai" alt="Coverage Status">
</a>
</p>
-------------------------------------------------------------------------------------------------------------------------------------------------------
txtai is an all-in-one AI framework for semantic search, LLM orchestration and language model workflows.
txtai executes machine-learning workflows to transform data and build AI-powered semantic search applications.
![architecture](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/architecture.png#gh-light-mode-only)
![architecture](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/architecture-dark.png#gh-dark-mode-only)
![demo](https://raw.githubusercontent.com/neuml/txtai/master/demo.gif)
The key component of txtai is an embeddings database, which is a union of vector indexes (sparse and dense), graph networks and relational databases.
Traditional search systems use keywords to find data. Semantic search applications have an understanding of natural language and identify results that have the same meaning, not necessarily the same keywords.
This foundation enables vector search and/or serves as a powerful knowledge source for large language model (LLM) applications.
Backed by state-of-the-art machine learning models, data is transformed into vector representations for search (also known as embeddings). Innovation is happening at a rapid pace, models can understand concepts in documents, audio, images and more.
Build autonomous agents, retrieval augmented generation (RAG) processes, multi-model workflows and more.
Summary of txtai features:
- 🔎 Large-scale similarity search with multiple index backends ([Faiss](https://github.com/facebookresearch/faiss), [Annoy](https://github.com/spotify/annoy), [Hnswlib](https://github.com/nmslib/hnswlib))
- 📄 Create embeddings for text snippets, documents, audio, images and video. Supports transformers and word vectors.
- 💡 Machine-learning pipelines to run extractive question-answering, zero-shot labeling, transcription, translation, summarization and text extraction
- ↪️️ Workflows that join pipelines together to aggregate business logic. txtai processes can be microservices or full-fledged indexing workflows.
- 🔗 API bindings 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)
- ☁️ Cloud-native architecture that scales out with container orchestration systems (e.g. Kubernetes)
- 🔎 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.
- 🤖 Agents that intelligently connect embeddings, pipelines, workflows and other agents together to autonomously solve complex problems
- ⚙️ Web and Model Context Protocol (MCP) APIs. 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).
- 🔋 Batteries included with defaults to get up and running fast
- ☁️ Run local or scale out with container orchestration
Applications range from similarity search to complex NLP-driven data extractions to generate structured databases. The following applications are powered by txtai.
txtai is built with Python 3.11+, [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.
![apps](https://raw.githubusercontent.com/neuml/txtai/master/apps.jpg)
| Application | Description |
|:----------|:-------------|
| [paperai](https://github.com/neuml/paperai) | AI-powered literature discovery and review engine for medical/scientific papers |
| [tldrstory](https://github.com/neuml/tldrstory) | AI-powered understanding of headlines and story text |
| [neuspo](https://neuspo.com) | 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 with Python 3.7+, [Hugging Face Transformers](https://github.com/huggingface/transformers), [Sentence Transformers](https://github.com/UKPLab/sentence-transformers) and [FastAPI](https://github.com/tiangolo/fastapi)
> [!NOTE]
>
> [NeuML](https://neuml.com) is the company behind txtai and we provide AI consulting services around our stack. [Schedule a meeting](https://cal.com/neuml/intro) or [send a message](mailto:[email protected]) to learn more.
>
> We're also building an easy and secure way to run hosted txtai applications with [txtai.cloud](https://txtai.cloud).
## Why txtai?
![why](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/why.png#gh-light-mode-only)
![why](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/why-dark.png#gh-dark-mode-only)
In addition to traditional search systems, a growing number of semantic search solutions are available, so why txtai?
New vector databases, LLM frameworks and everything in between are sprouting up daily. Why build with txtai?
- `pip install txtai` is all you need
- 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
from txtai.embeddings import Embeddings
import txtai
embeddings = Embeddings({"path": "sentence-transformers/all-MiniLM-L6-v2"})
embeddings.index([(0, "Correct", None), (1, "Not what we hoped", None)])
embeddings = txtai.Embeddings()
embeddings.index(["Correct", "Not what we hoped"])
embeddings.search("positive", 1)
#[(0, 0.2986203730106354)]
#[(0, 0.29862046241760254)]
```
- Works well with both small and big data - scale up as needed
- Rich data processing framework (pipelines and workflows) to pre and post process data
- Work in your programming language of choice via the API
- Modular with low footprint - install additional dependencies when you need them
- [Learn by example](#examples) - notebooks cover all available functionality
- 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 70 [example notebooks and applications](https://neuml.github.io/txtai/examples) are also available.
### Semantic Search
Build semantic/similarity/vector/neural search applications.
![demo](https://raw.githubusercontent.com/neuml/txtai/master/demo.gif)
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.
![search](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/search.png#gh-light-mode-only)
![search](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/search-dark.png#gh-dark-mode-only)
Get started with the following examples.
| 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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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| [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/38_Introducing_the_Semantic_Graph.ipynb) |
### LLM Orchestration
Autonomous agents, retrieval augmented generation (RAG), chat with your data, pipelines and workflows that interface with large language models (LLMs).
![llm](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/llm.png)
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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/57_Build_knowledge_graphs_with_LLM_driven_entity_extraction.ipynb) |
| [Parsing the stars with txtai](https://github.com/neuml/txtai/blob/master/examples/72_Parsing_the_stars_with_txtai.ipynb) | Explore an astronomical knowledge graph of known stars, planets, galaxies | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/72_Parsing_the_stars_with_txtai.ipynb) |
#### Agents
Agents connect embeddings, pipelines, workflows and other agents together to autonomously solve complex problems.
![agent](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/agent.png)
txtai agents are built on top of the [smolagents](https://github.com/huggingface/smolagents) framework. This supports all LLMs txtai supports (Hugging Face, llama.cpp, OpenAI / Claude / AWS Bedrock via LiteLLM). Agent prompting with [`agents.md`](https://github.com/agentsmd/agents.md) and [`skill.md`](https://agentskills.io/specification) are also supported.
Check out this [Agent Quickstart Example](https://github.com/neuml/txtai/blob/master/examples/agent_quickstart.py). Additional examples are listed below.
| Notebook | Description | |
|:----------|:-------------|------:|
| [Granting autonomy to agents](https://github.com/neuml/txtai/blob/master/examples/69_Granting_autonomy_to_agents.ipynb) | Agents that iteratively solve problems as they see fit | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/69_Granting_autonomy_to_agents.ipynb) |
| [TxtAI got skills](https://github.com/neuml/txtai/blob/master/examples/83_TxtAI_got_skills.ipynb) | Integrate skill.md files with your agent | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/83_TxtAI_got_skills.ipynb) |
| [Agent Tools](https://github.com/neuml/txtai/blob/master/examples/84_Agent_Tools.ipynb) [▶️](https://www.youtube.com/watch?v=RDNaFXQy3GQ) | Learn about the txtai agent toolkit | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/84_Agent_Tools.ipynb) |
| [Analyzing LinkedIn Company Posts with Graphs and Agents](https://github.com/neuml/txtai/blob/master/examples/71_Analyzing_LinkedIn_Company_Posts_with_Graphs_and_Agents.ipynb) | Exploring how to improve social media engagement with AI | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/71_Analyzing_LinkedIn_Company_Posts_with_Graphs_and_Agents.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".
![rag](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/rag.png#gh-light-mode-only)
![rag](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/rag-dark.png#gh-dark-mode-only)
Check out this [RAG Quickstart Example](https://github.com/neuml/txtai/blob/master/examples/rag_quickstart.py). Additional examples are listed below.
| Notebook | Description | |
|:----------|:-------------|------:|
| [Build RAG pipelines with txtai](https://github.com/neuml/txtai/blob/master/examples/52_Build_RAG_pipelines_with_txtai.ipynb) [▶️](https://www.youtube.com/watch?v=t_OeAc8NVfQ) | Guide on retrieval augmented generation including how to create citations | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/52_Build_RAG_pipelines_with_txtai.ipynb) |
| [RAG is more than Vector Search](https://github.com/neuml/txtai/blob/master/examples/79_RAG_is_more_than_Vector_Search.ipynb) | Context retrieval via Web, SQL and other sources | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/79_RAG_is_more_than_Vector_Search.ipynb) |
| [GraphRAG with Wikipedia and GPT OSS](https://github.com/neuml/txtai/blob/master/examples/77_GraphRAG_with_Wikipedia_and_GPT_OSS.ipynb) | Deep graph search powered RAG | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/77_GraphRAG_with_Wikipedia_and_GPT_OSS.ipynb) |
| [Speech to Speech RAG](https://github.com/neuml/txtai/blob/master/examples/65_Speech_to_Speech_RAG.ipynb) [▶️](https://www.youtube.com/watch?v=tH8QWwkVMKA) | Full cycle speech to speech workflow with RAG | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/65_Speech_to_Speech_RAG.ipynb) |
### Language Model Workflows
Language model workflows, also known as semantic workflows, connect language models together to build intelligent applications.
![flows](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/flows.png#gh-light-mode-only)
![flows](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/flows-dark.png#gh-dark-mode-only)
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.
Check out this [Workflow Quickstart Example](https://github.com/neuml/txtai/blob/master/examples/workflow_quickstart.py). Additional examples are listed below.
| 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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/12_Translate_text_between_languages.ipynb) |
## Installation
@@ -89,107 +186,73 @@ embeddings.search("positive", 1)
The easiest way to install is via pip and PyPI
pip install txtai
```
pip install txtai
```
Python 3.7+ is supported. Using a Python [virtual environment](https://docs.python.org/3/library/venv.html) is recommended.
Python 3.11+ is supported. Using a Python [virtual environment](https://docs.python.org/3/library/venv.html) is recommended.
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) and how to [run with containers](https://neuml.github.io/txtai/cloud).
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), [lightweight minimal installation](https://neuml.github.io/txtai/install/#minimal-install) and how to [run with containers](https://neuml.github.io/txtai/cloud).
## Examples
## Model guide
![examples](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/examples.png#gh-light-mode-only)
![examples](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/examples-dark.png#gh-dark-mode-only)
![models](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/models.png)
The examples directory has a series of notebooks and applications giving an overview of txtai. See the sections below.
See the table below for the current recommended models. These models all allow commercial use and offer a blend of speed and performance.
### Semantic Search
| 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) | [DeBERTa v3 Zeroshot](https://hf.co/MoritzLaurer/deberta-v3-base-zeroshot-v2.0-c) |
| [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) | [Gemma 4 31B](https://hf.co/google/gemma-4-31B) |
| [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) |
Build semantic/similarity/vector/neural search applications.
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.
| Notebook | Description | |
|:----------|:-------------|------:|
| [Introducing txtai](https://github.com/neuml/txtai/blob/master/examples/01_Introducing_txtai.ipynb) | Overview of the functionality provided by txtai | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/13_Similarity_search_with_images.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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/15_Distributed_embeddings_cluster.ipynb) |
| [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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/24_Whats_new_in_txtai_4_0.ipynb) |
| [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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/29_Anatomy_of_a_txtai_index.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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/30_Embeddings_SQL_custom_functions.ipynb) |
See the following links to learn more.
### Pipelines
- [Hugging Face Tasks](https://hf.co/tasks)
- [Hugging Face Model Hub](https://hf.co/models)
- [Embeddings Leaderboard](https://hf.co/spaces/mteb/leaderboard)
- [LLM Leaderboard](https://hf.co/spaces/lmarena-ai/arena-leaderboard)
Transform data with NLP-backed pipelines.
## Powered by txtai
| 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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/10_Extract_text_from_documents.ipynb) |
| [Transcribe audio to text](https://github.com/neuml/txtai/blob/master/examples/11_Transcribe_audio_to_text.ipynb) | Convert audio files to text | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/31_Near_duplicate_image_detection.ipynb) |
| [API Gallery](https://github.com/neuml/txtai/blob/master/examples/08_API_Gallery.ipynb) | Using txtai in JavaScript, Java, Rust and Go | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/08_API_Gallery.ipynb) |
The following applications are powered by txtai.
### Workflows
![apps](https://raw.githubusercontent.com/neuml/txtai/master/apps.jpg)
Efficiently process data at scale.
| Application | Description |
|:------------ |:-------------|
| [rag](https://github.com/neuml/rag) | Retrieval Augmented Generation (RAG) application |
| [ncoder](https://github.com/neuml/ncoder) | Open-Source AI coding agent |
| [paperai](https://github.com/neuml/paperai) | AI for medical and scientific papers |
| [annotateai](https://github.com/neuml/annotateai) | Automatically annotate papers with LLMs |
| Notebook | Description | |
|:----------|:-------------|------:|
| [Run pipeline workflows](https://github.com/neuml/txtai/blob/master/examples/14_Run_pipeline_workflows.ipynb) | Simple yet powerful constructs to efficiently process data | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/28_Push_notifications_with_workflows.ipynb) |
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.
### Model Training
## Further Reading
Train NLP models.
![further](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/further.png#gh-light-mode-only)
![further](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/further-ghdark.png#gh-dark-mode-only)
| 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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/19_Train_a_QA_model.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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/21_Export_and_run_other_machine_learning_models.ipynb) |
- [Introducing txtai, the all-in-one AI framework](https://medium.com/neuml/introducing-txtai-the-all-in-one-ai-framework-0660ecfc39d7)
- [txtai: An All-in-One AI Framework for Semantic Search and LLM Workflows](https://github.com/neuml/papers/blob/master/txtai/txtai.pdf)
- [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 9.0](https://medium.com/neuml/whats-new-in-txtai-9-0-d522bb150afa) | [8.0](https://medium.com/neuml/whats-new-in-txtai-8-0-2d7d0ab4506b) | [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) | [rag](https://medium.com/neuml/getting-started-with-rag-9a0cca75f748)
- [Running txtai at scale](https://medium.com/neuml/running-at-scale-with-txtai-71196cdd99f9)
- [Vector search & RAG Landscape: A review with txtai](https://medium.com/neuml/vector-search-rag-landscape-a-review-with-txtai-a7f37ad0e187)
### Applications
## Documentation
Series of example applications with txtai. Links to hosted versions on [Hugging Face Spaces](https://hf.co/spaces) also provided.
[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.
| 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)|
| [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)|
### Documentation
[Full documentation on txtai](https://neuml.github.io/txtai) including configuration settings for pipelines, workflows, indexing and the API.
### Further Reading
![further](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/further.png)
- [Introducing txtai, AI-powered semantic search built on Transformers](https://towardsdatascience.com/introducing-txtai-an-ai-powered-search-engine-built-on-transformers-37674be252ec)
- [Tutorial series on dev.to](https://dev.to/neuml/tutorial-series-on-txtai-ibg)
- [Run machine-learning workflows to transform data and build AI-powered semantic search applications with txtai](https://towardsdatascience.com/run-machine-learning-workflows-to-transform-data-and-build-ai-powered-text-indices-with-txtai-43d769b566a7)
- [Semantic search on the cheap](https://towardsdatascience.com/semantic-search-on-the-cheap-55940c0fcdab)
- [What's new in txtai 4.0](https://towardsdatascience.com/whats-new-in-txtai-4-0-bbc3a65c3d1c)
- [Serverless vector search with txtai](https://towardsdatascience.com/serverless-vector-search-with-txtai-96f6163ab972)
### Contributing
## Contributing
For those who would like to contribute to txtai, please see [this guide](https://github.com/neuml/.github/blob/master/CONTRIBUTING.md).
-155
View File
@@ -1,155 +0,0 @@
<p align="center">
<img src="https://raw.githubusercontent.com/neuml/txtai/master/logo.png"/>
</p>
<h3 align="center">
<p>Build AI-powered semantic search applications</p>
</h3>
<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/releases">
<img src="https://img.shields.io/github/release-date/neuml/txtai.svg?style=flat&color=blue" alt="GitHub Release Date"/>
</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://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/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/coveralls/github/neuml/txtai" alt="Coverage Status">
</a>
</p>
-------------------------------------------------------------------------------------------------------------------------------------------------------
txtai는 데이터를 변환하고 AI를 기반으로 한 의미론적 검색 애플리케이션을 만들기 위해 머신러닝 워크플로우를 실행합니다.
![demo](https://raw.githubusercontent.com/neuml/txtai/master/demo.gif)
기존에 사용하던 검색 시스템은 데이터를 찾기 위해서 키워드를 사용합니다. 의미론적 검색 애플리케이션은 자연어를 이해하고, 단지 동일한 키워드를 가진게 아닌 동일한 의미를 갖는 결과를 식별합니다.
최첨단 머신 러닝 모델의 지원에 의해, 데이터는 검색을 위한 벡터 표현(임베딩(embeddings)이라고 알려진)으로 변환됩니다. 혁신은 빠른 속도로 일어나고 있으며, 이 모델은 문서, 오디오, 이미지 등의 개념을 이해할 수 있습니다.
txtai 특징 요약:
- 🔎 다수의 index backends를 이용해 대규모 유사성 검색 ([Faiss](https://github.com/facebookresearch/faiss), [Annoy](https://github.com/spotify/annoy), [Hnswlib](https://github.com/nmslib/hnswlib))
- 📄 텍스트 조각, 문서, 오디오, 이미지 및 비디오에 대한 embeddings를 만듭니다. 변환기와 단어 벡터를 지원합니다.
- 💡 머신 러닝 파이프라인은 회신, zero-shot 라벨링, 표기, 번역, 요약 및 텍스트 추출과 같은 질문을 추출하기 위해 사용됩니다.
- ↪️️ 워크플로우는 파이프라인을 연결하여 비즈니스 로직을 합칩니다. txtai 프로세스는 마이크로 서비스 또는 완전한 인덱싱 워크플로우일 수 있습니다.
- 🔗 [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)용 API 바인딩
- ☁️ 컨테이너 배포 관리 시스템 (예: Kubernetes)으로 확장되는 Cloud-native 구조
응용 프로그램은 복잡한 NLP기반 데이터 추출을 위한 유사성 검색에서 구조화된 데이터베이스를 생성하기까지의 범위입니다. 다음의 애플리케이션은 txtai를 기반으로 구동됩니다.
| 응용 프로그램 | 설명 |
|:----------|:-------------|
| [paperai](https://github.com/neuml/paperai) | 의료/과학 논문을 위한 AI기반 문헌 발견 및 검토 엔진 |
| [tldrstory](https://github.com/neuml/tldrstory) | 헤드라인과 본문에 대한 AI기반 이해 |
| [neuspo](https://neuspo.com) | 사실 기반의 실시간 스포츠 이벤트 및 뉴스 사이트 |
| [codequestion](https://github.com/neuml/codequestion) | 터미널에서 직접 코딩에 관한 질문을 합니다. |
txtai는 Python 3.7+, [Hugging Face Transformers](https://github.com/huggingface/transformers), [Sentence Transformers](https://github.com/UKPLab/sentence-transformers) 그리고 [FastAPI](https://github.com/tiangolo/fastapi) 로 만들어졌습니다.
## 왜 txtai인가요?
기존 검색 시스템 외에도 점점 더 많은 의미론적 검색 솔루션을 사용할 수 있는데, 왜 txtai를 사용해야 하죠?
- `pip install txtai` 만 있으면 시작할 수 있습니다.
- 소규모 데이터와 빅 데이터에서 모두 잘 작동하며, 프로토타입을 몇 줄의 코드로 제작할 수 있고, 필요에 따라 확장할 수 있습니다.
- 사전 및 사후 처리 데이터를 위한 풍부한 데이터 프로세싱 프레임워크(파이프라인과 워크플로우)
- API를 통해 선택한 프로그래밍 언어로 작업할 수 있습니다.
- 설치 공간이 적고, 대부분의 종속성이 선택적이며, 필요할 때만 모듈을 요구할 수 있습니다.
- 예시로 알아봅시다. 설명서는 모든 기능을 다룹니다.
## 설치
가장 쉬운 설치 방법은 via pip 과 PyPI입니다.
pip install txtai
Python 3.7+ 이 지원됩니다.. 파이썬 [가상 환경](https://docs.python.org/3/library/venv.html) 을 사용하는 걸 추천드립니다.
[소스 설치](https://neuml.github.io/txtai/install/#install-from-source),
[환경별 필수 구성 요소](https://neuml.github.io/txtai/install/#environment-specific-prerequisites) 및
[선택적 종속성](https://neuml.github.io/txtai/install/#optional-dependencies) 에 대한 자세한 정보는 [설치 지침](https://neuml.github.io/txtai/install) 을 참조하십시오.
## 예시
examples 디렉토리에는 txtai의 개요를 제공하는 일련의 설명서(문서) 및 애플리케이션이 있습니다. 아래 섹션을 참조하십시오.
### 의미론적 검색
의미론적/유사성/벡터 검색 애플리케이션을 제작합니다.
| 문서 | 설명 | |
|:----------|:-------------|------:|
| [txtai 소개](https://github.com/neuml/txtai/blob/master/examples/01_Introducing_txtai.ipynb) | txtai에서 제공하는 기능 개요 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/01_Introducing_txtai.ipynb) |
| [Hugging Face 데이터 셋으로 임베딩 인덱스 구축](https://github.com/neuml/txtai/blob/master/examples/02_Build_an_Embeddings_index_with_Hugging_Face_Datasets.ipynb) | Hugging Face 데이터 셋 색인 및 검색 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/02_Build_an_Embeddings_index_with_Hugging_Face_Datasets.ipynb) |
| [데이터 소스로 임베딩 인덱스 구축](https://github.com/neuml/txtai/blob/master/examples/03_Build_an_Embeddings_index_from_a_data_source.ipynb) | 단어 임베딩을 이용한 데이터 소스 색인 및 검색 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/03_Build_an_Embeddings_index_from_a_data_source.ipynb) |
| [Elasticsearch에 의미론적 검색 추가](https://github.com/neuml/txtai/blob/master/examples/04_Add_semantic_search_to_Elasticsearch.ipynb) | 존재하는 검색 시스템에 의미론적 검색 추가 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/04_Add_semantic_search_to_Elasticsearch.ipynb) |
| [API 갤러리](https://github.com/neuml/txtai/blob/master/examples/08_API_Gallery.ipynb) | JavaScript, Java, Rust와 Go에서 txtai 사용 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/08_API_Gallery.ipynb) |
| [이미지를 이용한 유사성 검색](https://github.com/neuml/txtai/blob/master/examples/13_Similarity_search_with_images.ipynb) | 검색을 위해 포함된 이미지와 텍스트를 동일한 공간에 삽입 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/13_Similarity_search_with_images.ipynb) |
| [배포된 임베딩 클러스터](https://github.com/neuml/txtai/blob/master/examples/15_Distributed_embeddings_cluster.ipynb) | 여러 데이터 노드에 임베딩 인덱스 배포 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/15_Distributed_embeddings_cluster.ipynb) |
### 파이프라인 및 워크플로우
NLP 지원 데이터를 파이프라인과 워크플로우로 변환합니다.
| 문서 | 설명 | |
|:----------|:-------------|------:|
| [txtai에 관한 질의응답](https://github.com/neuml/txtai/blob/master/examples/05_Extractive_QA_with_txtai.ipynb) | txtai에 관한 질의응답 소개 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/05_Extractive_QA_with_txtai.ipynb) |
| [Elasticsearch에 관한 질의응답](https://github.com/neuml/txtai/blob/master/examples/06_Extractive_QA_with_Elasticsearch.ipynb) | Elasticsearch에 관한 질의응답을 실행 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/06_Extractive_QA_with_Elasticsearch.ipynb) |
| [구조화된 데이터 구축에 관한 질의응답](https://github.com/neuml/txtai/blob/master/examples/20_Extractive_QA_to_build_structured_data.ipynb) | 질의응답을 통해 구조화된 데이터 셋을 구축 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/20_Extractive_QA_to_build_structured_data.ipynb) |
| [zero-shot 분류로 레이블을 적용](https://github.com/neuml/txtai/blob/master/examples/07_Apply_labels_with_zero_shot_classification.ipynb) | 라벨링, 분류 및 주제 모델링을 위해 zero-shot 학습을 사용 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/07_Apply_labels_with_zero_shot_classification.ipynb) |
| [추상적인 텍스트 요약 작성](https://github.com/neuml/txtai/blob/master/examples/09_Building_abstractive_text_summaries.ipynb) | 추상적인 텍스트 요약을 실행 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/09_Building_abstractive_text_summaries.ipynb) |
| [문서로부터 텍스트를 추출](https://github.com/neuml/txtai/blob/master/examples/10_Extract_text_from_documents.ipynb) | PDF, Office, HTML 등으로부터 텍스트를 추출 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/10_Extract_text_from_documents.ipynb) |
| [오디오를 텍스트로 변환](https://github.com/neuml/txtai/blob/master/examples/11_Transcribe_audio_to_text.ipynb) | 오디오 파일을 텍스트로 변환 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/11_Transcribe_audio_to_text.ipynb) |
| [언어 간에 텍스트를 번역](https://github.com/neuml/txtai/blob/master/examples/12_Translate_text_between_languages.ipynb) | 기계 번역 및 언어 감지를 간소화 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/12_Translate_text_between_languages.ipynb) |
| [파이프라인과 워크플로우를 실행](https://github.com/neuml/txtai/blob/master/examples/14_Run_pipeline_workflows.ipynb) | 효율적으로 데이터를 처리하기 위한 간단하면서도 강력한 구조 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/14_Run_pipeline_workflows.ipynb) |
| [구성 가능한 워크플로우로 테이블 형식 데이터 변환](https://github.com/neuml/txtai/blob/master/examples/22_Transform_tabular_data_with_composable_workflows.ipynb) | 워크플로우로 테이블 형식 데이터를 변환, 색인 생성및 검색 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/22_Transform_tabular_data_with_composable_workflows.ipynb) |
### 모델 훈련
NLP 모델을 훈련한다.
| 문서 | 설명 | |
|:----------|:-------------|------:|
| [텍스트 레이블러를 훈련](https://github.com/neuml/txtai/blob/master/examples/16_Train_a_text_labeler.ipynb) | 텍스트 시퀀스 분류 모델을 구축 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/16_Train_a_text_labeler.ipynb) |
| [레이블을 제외하고 훈련](https://github.com/neuml/txtai/blob/master/examples/17_Train_without_labels.ipynb) | 새로운 모델을 훈련하기위해 zero-shot 분류기를 사용 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/17_Train_without_labels.ipynb) |
| [QA 모델을 훈련](https://github.com/neuml/txtai/blob/master/examples/19_Train_a_QA_model.ipynb) | 질의응답 모델 구축 및 미세 조정 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/19_Train_a_QA_model.ipynb) |
| [ONNX로 모델 내보내기 및 실행](https://github.com/neuml/txtai/blob/master/examples/18_Export_and_run_models_with_ONNX.ipynb) | ONNX로 모델을 내보내고, JavaScript, Java와 Rust에서 기본적으로 실행 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/18_Export_and_run_models_with_ONNX.ipynb) |
| [다른 머신 러닝 모델들을 내보내기 및 실행](https://github.com/neuml/txtai/blob/master/examples/21_Export_and_run_other_machine_learning_models.ipynb) | scikit-learn, PyTorch 등에서 모델을 내보내기 및 실행 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/21_Export_and_run_other_machine_learning_models.ipynb) |
### 응용 프로그램
txtai를 이용한 일련의 애플리케이션 예시입니다. [Hugging Face Spaces](https://hf.co/spaces)에서 호스팅된 버전에 대한 링크도 제공됩니다.
| 응용 프로그램 | 설명 | |
|:-------------|:-------------|------:|
| [Basic similarity search](https://github.com/neuml/txtai/blob/master/examples/similarity.py) | 기본 유사성 검색 예시입니다. 원래 txtai 데모에서 사용되었습니다. |[🤗](https://hf.co/spaces/NeuML/similarity)|
| [Book search](https://github.com/neuml/txtai/blob/master/examples/books.py) | 도서 유사성 검색 애플리케이션입니다. 자연어 문장을 사용하여 책 설명 및 요청을 색인화합니다. |*오직 로컬에서만 실행*|
| [Image search](https://github.com/neuml/txtai/blob/master/examples/images.py) | 이미지 유사성 검색 애플리케이션입니다. 이미지 디렉토리를 인덱싱하고 검색을 실행하여 입력한 요청과 유사한 이미지를 식별합니다. |[🤗](https://hf.co/spaces/NeuML/imagesearch)|
| [Wiki search](https://github.com/neuml/txtai/blob/master/examples/wiki.py) | 위키백과를 검색하는 애플리케이션입니다. 위키백과 API를 요청하고 상위 결과를 요약합니다. |[🤗](https://hf.co/spaces/NeuML/wikisummary)|
| [Workflow builder](https://github.com/neuml/txtai/blob/master/examples/workflows.py) | txtai 워크플로우를 구축하고 실행합니다. 요약, 텍스트 추출, 사본(transcription), 번역 및 유사성 검색 파이프라인을 함께 연결하여 통합 워크플로우를 실행합니다. |[🤗](https://hf.co/spaces/NeuML/txtai)|
### 문서
파이프라인, 워크플로우, 인덱싱 및 API에 대한 구성 설정을 포함한 [txtai 전체 설명서](https://neuml.github.io/txtai)입니다.
### 추가적인 읽기
- [Introducing txtai, AI-powered semantic search built on Transformers](https://towardsdatascience.com/introducing-txtai-an-ai-powered-search-engine-built-on-transformers-37674be252ec)
- [Run machine-learning workflows to transform data and build AI-powered semantic search applications with txtai](https://towardsdatascience.com/run-machine-learning-workflows-to-transform-data-and-build-ai-powered-text-indices-with-txtai-43d769b566a7)
- [Semantic search on the cheap](https://towardsdatascience.com/semantic-search-on-the-cheap-55940c0fcdab)
- [Tutorial series on dev.to](https://dev.to/neuml/tutorial-series-on-txtai-ibg)
### 기여하기
txtai에 기여하고 싶은 사람은 [해당 가이드](https://github.com/neuml/.github/blob/master/CONTRIBUTING.md)를 참조하십시오.
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 211 KiB

After

Width:  |  Height:  |  Size: 295 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 41 KiB

+1
View File
@@ -8,6 +8,7 @@ from txtai.api import API
APP = None
# pylint: disable=W0603,W0613
def handler(event, context):
"""
+9 -6
View File
@@ -1,11 +1,14 @@
# Set base image
ARG BASE_IMAGE=ubuntu:20.04
ARG BASE_IMAGE=python:3.11-slim
FROM $BASE_IMAGE
# Install GPU-enabled version of PyTorch if set
ARG GPU
# Set Python version (i.e. 3, 3.7, 3.8)
# Target CPU architecture
ARG TARGETARCH
# Set Python version (i.e. 3, 3.11)
ARG PYTHON_VERSION=3
# List of txtai components to install
@@ -18,18 +21,18 @@ 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 && \
apt-get -y --no-install-recommends install libgomp1 libportaudio2 libsndfile1 libegl1 libgles2 libvulkan1 git 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} ]; then pip install --no-cache-dir pip install torch==1.10.2+cpu torchvision==0.11.3+cpu -f https://download.pytorch.org/whl/torch_stable.html; fi && \
if [ -z ${GPU} ]; then pip install --no-cache-dir torch==2.14.1+cpu torchvision==0.29.1+cpu -f https://download.pytorch.org/whl/torch -f https://download.pytorch.org/whl/torchvision; 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')" && \
python -c "import sys, importlib.util as util; 1 if util.find_spec('nltk') else sys.exit(); import nltk; nltk.download(['punkt', 'punkt_tab', 'averaged_perceptron_tagger_eng'])" && \
\
# Cleanup build packages
apt-get -y purge gcc g++ python${PYTHON_VERSION}-dev && apt-get -y autoremove
apt-get -y purge git gcc g++ python${PYTHON_VERSION}-dev && apt-get -y autoremove
# Set default working directory
WORKDIR /app
+20
View File
@@ -0,0 +1,20 @@
# Set base image
ARG BASE_IMAGE=python:3.11-slim
FROM $BASE_IMAGE
# Target CPU architecture
ARG TARGETARCH
# Set Python version (i.e. 3, 3.11)
ARG PYTHON_VERSION=3
# Locale environment variables
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
RUN \
# Install minimal txtai project and dependencies
MINIMAL=1 python -m pip install --no-cache-dir txtai_minimal
# Set default working directory
WORKDIR /app
+141
View File
@@ -0,0 +1,141 @@
# Configuration
An agent takes two main arguments, an LLM and a list of tools.
The txtai agent framework is built with [smolagents](https://github.com/huggingface/smolagents). Additional options can be passed in the `Agent` constructor.
```python
from datetime import datetime
from txtai import Agent
wikipedia = {
"name": "wikipedia",
"description": "Searches a Wikipedia database",
"provider": "huggingface-hub",
"container": "neuml/txtai-wikipedia"
}
arxiv = {
"name": "arxiv",
"description": "Searches a database of scientific papers",
"provider": "huggingface-hub",
"container": "neuml/txtai-arxiv"
}
def today() -> str:
"""
Gets the current date and time
Returns:
current date and time
"""
return datetime.today().isoformat()
agent = Agent(
model="Qwen/Qwen3-4B-Instruct-2507",
tools=[today, wikipedia, arxiv, "websearch"],
)
```
## model
```yaml
model: string|llm instance
```
LLM model path or LLM pipeline instance. The `llm` parameter is also supported for backwards compatibility.
See the [LLM pipeline](../../pipeline/text/llm) for more information.
## tools
```yaml
tools: list
```
List of tools to supply to the agent. Supports the following configurations.
### function
A function tool takes the following dictionary fields.
| Field | Description |
|:------------|:-------------------------|
| name | name of the tool |
| description | tool description |
| target | target method / callable |
A function or callable method can also be directly supplied in the `tools` list. In this case, the fields are inferred from the method documentation.
### embeddings
Embeddings indexes have built-in support. Provide the following dictionary configuration to add an embeddings index as a tool.
| Field | Description |
|:------------|:-------------------------------------------|
| name | embeddings index name |
| description | embeddings index description |
| **kwargs | Parameters to pass to [embeddings.load](../../embeddings/methods/#txtai.embeddings.Embeddings.load) |
### tool
The following shortcut strings load tools directly. Passing a Tool instance is also supported.
| Tool | Description |
|:------------|:----------------------------------------------------------|
| bash | Runs a shell command through subprocess |
| defaults | Loads all of these tools as the default toolkit |
| edit | Edits a file in place and returns a diff |
| glob | Finds matching file patterns in a directory |
| grep | Finds matching file content in a directory |
| http.* | HTTP Path to a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/docs/getting-started/intro) server |
| python | Runs a Python action |
| read | Reads file or url content, supports text extraction |
| todowrite | Generates a task list to organize complex tasks |
| websearch | Runs a websearch using the built-in websearch tool |
| webview | Extracts content from a web page. Alias for `read` tool |
| write | Writes content to file |
| *.md | Loads a [`skill.md`](https://agentskills.io/specification) file |
## instructions
```yaml
instructions: string|path
```
Supports loading an `agents.md` file. Can be provided directly as a string or as a path to a file.
[Read more about agents.md here](https://github.com/agentsmd/agents.md)
## template
```yaml
template: string
```
Customize the prompt template used by this agent. Supports Jinja templates. Uses a default template when this parameter is not provided.
Must include `{{ text }}` and `{{ memory }}` placeholders.
## memory
```yaml
memory: int
```
Keeps a rolling window of `memory` inputs and outputs. These are added to future prompts and serve as "agent memory".
Supports storing memory by `session` to enable multiple conversation threads. Defaults to shared memory when not set. See the [method documentation](../methods#txtai.agent.base.Agent.__call__) for more information.
## method
```yaml
method: code|tool
```
Sets the agent method. Supports either a `code` or `tool` (default) calling agent. A code agent generates Python code and executes that. A tool calling agent generates JSON blocks and calls the agents within those blocks.
Additional options can be directly passed. See [CodeAgent](https://huggingface.co/docs/smolagents/main/en/reference/agents#smolagents.CodeAgent) or [ToolCallingAgent](https://huggingface.co/docs/smolagents/main/en/reference/agents#smolagents.ToolCallingAgent) for a list of parameters.
[Read more here](https://huggingface.co/docs/smolagents/main/en/guided_tour).
+156
View File
@@ -0,0 +1,156 @@
# Agent
![agent](../images/agent.png)
An agent automatically creates workflows to answer multi-faceted user requests. Agents iteratively prompt and/or interface with tools to
step through a process and ultimately come to an answer for a request.
Agent prompting with [`agents.md`](https://github.com/agentsmd/agents.md) and [`skill.md`](https://agentskills.io/specification) are also supported. [Read the configuration](./configuration/#tool) for more on how to setup those up.
Agents excel at complex tasks where multiple tools and/or methods are required. They incorporate a level of randomness similar to different
people working on the same task. When the request is simple and/or there is a rule-based process, other methods such as RAG and Workflows
should be explored.
The following code snippet defines a basic agent.
```python
from datetime import datetime
from txtai import Agent
wikipedia = {
"name": "wikipedia",
"description": "Searches a Wikipedia database",
"provider": "huggingface-hub",
"container": "neuml/txtai-wikipedia"
}
arxiv = {
"name": "arxiv",
"description": "Searches a database of scientific papers",
"provider": "huggingface-hub",
"container": "neuml/txtai-arxiv"
}
def today() -> str:
"""
Gets the current date and time
Returns:
current date and time
"""
return datetime.today().isoformat()
agent = Agent(
model="Qwen/Qwen3-4B-Instruct-2507",
tools=[today, wikipedia, arxiv, "websearch"],
max_steps=10,
)
```
The agent above has access to two embeddings databases (Wikipedia and ArXiv) and the web. Given the user's input request, the agent decides the best tool to solve the task.
## Example
The first example will solve a problem with multiple data points. See below.
```python
agent("Which city has the highest population, Boston or New York?")
```
This requires looking up the population of each city before knowing how to answer the question. Multiple search requests are run to generate a final answer.
## Agentic RAG
Standard retrieval augmented generation (RAG) runs a single vector search to obtain a context and builds a prompt with the context + input question. Agentic RAG is a more complex process that goes through multiple iterations. It can also utilize multiple databases to come to a final conclusion.
The example below aggregates information from multiple sources and builds a report on a topic.
```python
researcher = """
You're an expert researcher looking to write a paper on {topic}.
Search for websites, scientific papers and Wikipedia related to the topic.
Write a report with summaries and references (with hyperlinks).
Write the text as Markdown.
"""
agent(researcher.format(topic="alien life"))
```
## Agent Teams
Agents can also be tools. This enables the concept of building "Agent Teams" to solve problems. The previous example can be rewritten as a list of agents.
```python
from txtai import Agent, LLM
llm = LLM("Qwen/Qwen3-4B-Instruct-2507")
websearcher = Agent(
model=llm,
tools=["websearch"],
)
wikiman = Agent(
model=llm,
tools=[{
"name": "wikipedia",
"description": "Searches a Wikipedia database",
"provider": "huggingface-hub",
"container": "neuml/txtai-wikipedia"
}],
)
researcher = Agent(
model=llm,
tools=[{
"name": "arxiv",
"description": "Searches a database of scientific papers",
"provider": "huggingface-hub",
"container": "neuml/txtai-arxiv"
}],
)
agent = Agent(
model=llm,
tools=[{
"name": "websearcher",
"description": "I run web searches, there is no answer a web search can't solve!",
"target": websearcher
}, {
"name": "wikiman",
"description": "Wikipedia has all the answers, I search Wikipedia and answer questions",
"target": wikiman
}, {
"name": "researcher",
"description": "I'm a science guy. I search arXiv to get all my answers.",
"target": researcher
}],
max_steps=10
)
```
This provides another level of intelligence to the process. Instead of just a single tool execution, each agent-tool combination has it's own reasoning engine.
```python
agent("""
Research fundamental concepts about Signal Processing and build a comprehensive report.
Write the output in Markdown.
""")
```
# More examples
Check out this [Agent Quickstart Example](https://github.com/neuml/txtai/blob/master/examples/agent_quickstart.py). Additional examples are listed below.
| Notebook | Description | |
|:----------|:-------------|------:|
| [What's new in txtai 8.0](https://github.com/neuml/txtai/blob/master/examples/67_Whats_new_in_txtai_8_0.ipynb) | Agents with txtai | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/67_Whats_new_in_txtai_8_0.ipynb) |
| [Analyzing Hugging Face Posts with Graphs and Agents](https://github.com/neuml/txtai/blob/master/examples/68_Analyzing_Hugging_Face_Posts_with_Graphs_and_Agents.ipynb) | Explore a rich dataset with Graph Analysis and Agents | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/68_Analyzing_Hugging_Face_Posts_with_Graphs_and_Agents.ipynb) |
| [Granting autonomy to agents](https://github.com/neuml/txtai/blob/master/examples/69_Granting_autonomy_to_agents.ipynb) | Agents that iteratively solve problems as they see fit | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/69_Granting_autonomy_to_agents.ipynb) |
| [Analyzing LinkedIn Company Posts with Graphs and Agents](https://github.com/neuml/txtai/blob/master/examples/71_Analyzing_LinkedIn_Company_Posts_with_Graphs_and_Agents.ipynb) | Exploring how to improve social media engagement with AI | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/71_Analyzing_LinkedIn_Company_Posts_with_Graphs_and_Agents.ipynb) |
| [Parsing the stars with txtai](https://github.com/neuml/txtai/blob/master/examples/72_Parsing_the_stars_with_txtai.ipynb) | Explore an astronomical knowledge graph of known stars, planets, galaxies | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/72_Parsing_the_stars_with_txtai.ipynb) |
| [Agentic College Search](https://github.com/neuml/txtai/blob/master/examples/82_Agentic_College_Search.ipynb) | Identify list of strong engineering colleges | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/82_Agentic_College_Search.ipynb) |
| [TxtAI got skills](https://github.com/neuml/txtai/blob/master/examples/83_TxtAI_got_skills.ipynb) | Integrate skill.md files with your agent | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/83_TxtAI_got_skills.ipynb) |
| [Agent Tools](https://github.com/neuml/txtai/blob/master/examples/84_Agent_Tools.ipynb) [▶️](https://www.youtube.com/watch?v=RDNaFXQy3GQ) | Learn about the txtai agent toolkit | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/84_Agent_Tools.ipynb) |
+4
View File
@@ -0,0 +1,4 @@
# Methods
## ::: txtai.agent.base.Agent.__init__
## ::: txtai.agent.base.Agent.__call__
+28 -3
View File
@@ -30,13 +30,38 @@ Path to save and load the embeddings index. Each API instance can only access a
### writable
```yaml
path: boolean
writable: boolean
```
Determines if the input embeddings index is writable (true) or read-only (false). This allows serving a read-only index.
Sets this embeddings index as writable (true) or read-only (false). This allows serving a read-only index. Defaults to read-only.
### reindex
```yaml
reindex: boolean
```
Enables re-indexing for this embeddings index (defaults to disabled).
Re-indexing accepts new configuration and should only be enabled when the configuration comes from trusted sources.
### cloud
[Cloud storage settings](../../embeddings/configuration#cloud) can be set under a `cloud` top level configuration group.
[Cloud storage settings](../../embeddings/configuration/cloud) can be set under a `cloud` top level configuration group.
## Agent
Agents are defined under a top level `agent` key. Each key under the `agent` key is the name of the agent. Constructor parameters can be passed under this key.
The following example defines an agent.
```yaml
agent:
researcher:
tools:
- websearch
llm:
path: Qwen/Qwen3-4B-Instruct-2507
```
## Pipeline
+25
View File
@@ -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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/54_API_Authorization_and_Authentication.ipynb) |
+12 -5
View File
@@ -54,8 +54,7 @@ workflow:
sumfrench:
tasks:
- action: textractor
task: storage
ids: false
task: url
- action: summary
- action: translation
args: ["fr"]
@@ -74,7 +73,7 @@ Assuming this YAML content is stored in a file named config.yml, the following c
CONFIG=config.yml uvicorn "txtai.api:app"
```
uvicorn is a full-featured production ready server with support for SSL and more. See the [uvicorn deployment guide](https://www.uvicorn.org/deployment/) for details.
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
@@ -96,7 +95,7 @@ A local instance can be instantiated. In this case, a txtai application runs int
The configuration above can be run in Python with:
```python
from txtai.app import Application
from txtai import Application
# Load and run workflow
app = Application(config.yml)
@@ -115,13 +114,21 @@ The API can be containerized and run. This will bring up an API instance without
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.
The API also supports hosting [OpenAI-compatible](./openai) and [Model Context Protocol (MCP)](./mcp) endpoints.
See the links below for detailed examples covering 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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/54_API_Authorization_and_Authentication.ipynb) |
| [OpenAI Compatible API](https://github.com/neuml/txtai/blob/master/examples/74_OpenAI_Compatible_API.ipynb) | Connect to txtai with a standard OpenAI client library | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/74_OpenAI_Compatible_API.ipynb) |
+34
View File
@@ -0,0 +1,34 @@
# Model Context Protocol
The [Model Context Protocol (MCP)](https://modelcontextprotocol.io/introduction) is an open standard that enables developers to build secure, two-way connections between their data sources and AI-powered tools.
The API can be configured to handle MCP requests. All enabled endpoints set in the API configuration are automatically added as MCP tools.
```yaml
mcp: boolean|dict
```
When `mcp` is a boolean, default arguments are used. When `mcp` is a dictionary it supports the following options.
```yaml
mcp:
clientargs: http client options (dict)
mcpargs: FastApiMCP options (dict)
```
See the following links for details on the options.
- [HTTP Client Arguments](https://www.python-httpx.org/api/#asyncclient)
- [FastApiMCP Arguments](https://github.com/tadata-org/fastapi_mcp/blob/main/fastapi_mcp/server.py#L22)
Once this configuration option is added, a new route is added to the application `/mcp`.
The [Model Context Protocol Inspector tool](https://www.npmjs.com/package/@modelcontextprotocol/inspector) is a quick way to explore how the MCP tools are exported through this interface.
Run the following and go to the local URL specified.
```
npx @modelcontextprotocol/inspector node build/index.js
```
Enter `http://localhost:8000/mcp` to see the full list of tools available.
+3 -1
View File
@@ -1,13 +1,15 @@
# Methods
::: txtai.api.API
selection:
options:
inherited_members: true
filters:
- "!__del__"
- "!flows"
- "!function"
- "!indexes"
- "!limit"
- "!pipes"
- "!read"
- "!resolve"
- "!weights"
+13
View File
@@ -0,0 +1,13 @@
# OpenAI-compatible API
The API can be configured to serve an OpenAI-compatible API as shown below.
```yaml
openai: True
```
See the link below for a detailed example.
| Notebook | Description | |
|:----------|:-------------|------:|
| [OpenAI Compatible API](https://github.com/neuml/txtai/blob/master/examples/74_OpenAI_Compatible_API.ipynb) | Connect to txtai with a standard OpenAI client library | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/74_OpenAI_Compatible_API.ipynb) |
+74
View File
@@ -0,0 +1,74 @@
# 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.dev/deployment/#running-behind-nginx) for more.
- [Uvicorn SSL Certificate](https://www.uvicorn.dev/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.
## Safe Open
Many components in txtai work with local files and have no restrictions on what files and urls can be accessed. The [textractor pipeline](../../pipeline/data/textractor) and [retrieve](../../workflow/task/retrieve) tasks both have a built-in option called `safeopen` which is enabled by default when running the API and applications. It enforces the following rules:
- Local files must be in the safeopen directory (defaults to temp dir)
- URLs must be public URLs (also has checks for redirects and DNS rebind attempts)
The following workflow only allows accessing files stored in a specific directory along with public urls.
```yaml
workflow:
textract:
tasks:
- action: textractor
```
A number of of pipelines support reading local files. For these it's recommended to wrap those pipelines as workflows with a `retrieve` task. Note that pipelines can be created in-line and don't need to be exposed via the API.
```yaml
workflow:
caption:
tasks:
- task: retrieve
action: caption
```
Additionally, internal pipelines can be created but not exposed via the API.
```yaml
routes:
caption: False
caption:
workflow:
caption:
tasks:
- task: retrieve
action: caption
```
+11 -6
View File
@@ -3,20 +3,21 @@
![cloud](images/cloud.png#only-light)
![cloud](images/cloud-dark.png#only-dark)
Scalable cloud-native applications can be built with txtai. The following container runtimes are supported.
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 (planned for future)
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.
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 significantly smaller.
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>
docker run -v <local dir>:/models -e TRANSFORMERS_CACHE=/models --rm -it <docker image>
```
## Build txtai images
@@ -29,8 +30,8 @@ Examples build commands below.
# Get Dockerfile
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/base/Dockerfile
# Build Ubuntu 18.04 image running Python 3.7
docker build -t txtai --build-arg BASE_IMAGE=ubuntu:18.04 --build-arg PYTHON_VERSION=3.7 .
# Build Ubuntu 22.04 image running Python 3.11
docker build -t txtai --build-arg BASE_IMAGE=ubuntu:22.04 --build-arg PYTHON_VERSION=3.11 .
# Build image with GPU support
docker build -t txtai --build-arg GPU=1 .
@@ -174,4 +175,8 @@ If successful, a local API instance is now running in a "serverless" fashion. Th
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://towardsdatascience.com/serverless-vector-search-with-txtai-96f6163ab972).
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.
-209
View File
@@ -1,209 +0,0 @@
# Configuration
## Embeddings
This following describes available embeddings configuration. These parameters are set via the [Embeddings constructor](../methods#txtai.embeddings.base.Embeddings.__init__).
### 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 Model 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|words|external
```
Sentence embeddings method to use. If the method is not provided, it is inferred using the `path`.
`sentence-transformers` and `words` require the [similarity](../../install/#similarity) extras package to be installed.
#### transformers
Builds sentence 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 sentence embeddings.
#### sentence-transformers
Same as transformers but loads models with the [sentence-transformers](https://github.com/UKPLab/sentence-transformers) library.
#### words
Builds sentence 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.
##### scoring
```yaml
scoring: bm25|tfidf|sif
```
A scoring model builds 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.
##### pca
```yaml
pca: int
```
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.
#### external
Sentence embeddings are loaded via an external model or API. Requires setting the [transform](#transform) parameter to a function that translates data into vectors.
##### transform
```yaml
transform: function
```
When method is `external`, this function transforms input content into embeddings.
### backend
```yaml
backend: faiss|hnsw|annoy
```
Approximate Nearest Neighbor (ANN) index backend for storing generated sentence embeddings. `Defaults to Faiss`. Additional backends require the
[similarity](../../install/#similarity) extras package to be installed.
Backend-specific settings are set with a corresponding configuration object having the same name as the backend (i.e. annoy, faiss, or hnsw). None of these are required and are set to defaults if omitted.
#### faiss
```yaml
faiss:
components: Comma separated list of components - defaults to "Flat" for small
indices and "IVFx,Flat" for larger indexes where
x = 4 * sqrt(embeddings count)
nprobe: search probe setting (int) - defaults to x/16 (as defined above)
for larger indexes
```
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)
- [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 (init) - 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.
### content
```yaml
content: string|boolean
```
Enables content storage. When true, the default content storage engine will be used. Otherwise, the string must specify the supported content storage engine to use.
### 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).
### quantize
```yaml
quantize: boolean
```
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.
### tokenize
```yaml
tokenize: boolean
```
Enables string tokenization (defaults to false). This method applies tokenization rules that only work with English language text and may increase the quality of
English language sentence embeddings in some situations.
## Cloud
This section describes parameters used to sync compressed indexes with cloud storage. These parameters are only enabled if an embeddings index is stored as compressed. They 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
```
The cloud storage provider, see [full list of providers here](https://libcloud.readthedocs.io/en/stable/storage/supported_providers.html).
### container
```yaml
container: string
```
Container/bucket/directory name.
### 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.
### 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.
### 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.
+175
View File
@@ -0,0 +1,175 @@
# ANN
Approximate Nearest Neighbor (ANN) index configuration for storing vector embeddings.
## backend
```yaml
backend: faiss|hnsw|annoy|ggml|milvus|numpy|rabitq|torch|turbovec|zvec|pgvector|sqlite|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)
Note: For macOS users, an existing bug in an upstream package restricts the number of processing threads to 1. This limitation is managed internally to prevent system crashes.
### 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.
### ggml
```yaml
ggml:
gpu: enable GPU - defaults to True
quantize: sets the tensor quantization - defaults to F32
querysize: query buffer size - defaults to 64
```
The [GGML](https://github.com/ggml-org/ggml) backend is a k-nearest neighbors backend. It stores tensors using GGML and [GGUF](https://huggingface.co/docs/hub/en/gguf). It supports GPU-enabled operations and supports quantization. GGML is the framework used by [llama.cpp](https://github.com/ggml-org/llama.cpp).
[See this](https://github.com/ggml-org/ggml/blob/master/include/ggml.h#L379) for a list of quantization types.
### milvus
```yaml
milvus:
m: number of HNSW links per element (int) - defaults to 50
```
### numpy
```yaml
numpy:
safetensors: stores vectors using the safetensors format
defaults to NumPy array storage
```
The NumPy backend is a k-nearest neighbors backend. It's designed for simplicity and works well with smaller datasets that fit into memory.
### rabitq
```yaml
rabitq:
mode: index mode (ivf or hnsw) - defaults to "ivf"
nbits: number of quantization bits per dimension (int) - defaults to 1,
supports 1 to 9 in both modes, ivf mode also supports 32 which
keeps raw vectors for reranking
clusters: number of IVF clusters (int) - defaults to
max(1, min(round(4 * sqrt(embeddings count)), embeddings count))
nprobe: search probe setting for ivf mode (int) - defaults to
max(1, round(num_clusters/16))
m: M param for hnsw mode (int) - defaults to 16
efconstruction: ef_construction param for hnsw mode (int) - defaults to 200
efsearch: ef search param for hnsw mode (int) - defaults to None and not set
randomseed: random-seed param for hnsw mode (int) - defaults to 100
```
The [rabitq](https://github.com/VectorDB-NTU/RaBitQ-Library) backend is a quantized index powered by the [RaBitQ algorithm](https://doi.org/10.1145/3725413). It supports ivf and hnsw search modes. Vectors are stored with 1-bit quantization by default. More bits increase accuracy at the cost of memory. The index is stored as a single file and no vectors are kept outside of it. With nbits set to 32, the vectors are stored in the index for reranking. The ivf mode supports upserts and deletes. Deleted rows keep their storage. Rows added after the first index are assigned to the clusters trained when the index was built, so recall can drop if the new data differs from the original data. Rebuild the index to train new clusters. Note that hnsw indexes can not be modified after creation, upserts/deletes and other modifications are not supported.
### torch
```yaml
torch:
safetensors: stores vectors using the safetensors format - defaults
to NumPy array storage if quantization is disabled
quantize:
type: quantization type (fp4, nf4, int8)
blocksize: quantization block size parameter
```
The Torch backend is a k-nearest neighbors backend like NumPy. It supports GPU-enabled operations. It also has support for quantization which enables fitting larger arrays into GPU memory.
When quantization is enabled, vectors are _always_ stored in safetensors. _Note that macOS support for quantization is limited._
### turbovec
```yaml
turbovec:
bitwidth: number of bits to store each vector dimension as. Supports 2, 3 or 4.
```
The [turbovec](https://github.com/RyanCodrai/turbovec) backend is a k-nearest neighbors backend powered by the [TurboQuant algorithm](https://arxiv.org/abs/2504.19874).
### zvec
```yaml
zvec:
efconstruction: ef_construction param for HnswIndexParam (int) - defaults to 200
m: number of HNSW links per element (int) - defaults to 50
efsearch: ef search param for HnswQueryParam (int) - defaults to 300
```
The [zvec](https://github.com/alibaba/zvec) backend is an embedded, path-based vector index.
### pgvector
```yaml
pgvector:
url: database url connection string, alternatively can be set via
ANN_URL environment variable
schema: database schema to store vectors - defaults to being
determined by the database
table: database table to store vectors - defaults to `vectors`
precision: vector float precision (half or full) - defaults to `full`
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.
### sqlite
```yaml
sqlite:
quantize: store vectors with x-bit precision vs 32-bit (boolean|int)
true sets 8-bit precision, false disables, int sets specified
precision
table: database table to store vectors - defaults to `vectors`
```
The SQLite backend stores embeddings in a SQLite database using [sqlite-vec](https://github.com/asg017/sqlite-vec). This backend supports 1-bit and 8-bit quantization at the storage level.
See [this note](https://alexgarcia.xyz/sqlite-vec/python.html#macos-blocks-sqlite-extensions-by-default) on how to run this ANN on MacOS.
+110
View File
@@ -0,0 +1,110 @@
# 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). Use the text shown in the `Provider Constant` column as lower case.
- 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.
### prefix
```yaml
prefix: string
```
Optional object prefix. Object storage doesn't have the concept of a directory but a prefix is similar. For example, a prefix could be `base/dir`. This helps with organizing data in an object storage bucket.
More can be found at the following links.
- [Organizing objects using prefixes](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html)
- [libcloud container method documentation](https://libcloud.readthedocs.io/en/stable/storage/api.html#libcloud.storage.base.StorageDriver.iterate_container_objects)
### 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.
+83
View File
@@ -0,0 +1,83 @@
# 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.
### client
```yaml
schema: default database schema for the session - defaults to being
determined by the database
```
Additional settings for client-server databases. Also supported when the `content=url`.
### sqlite
```yaml
sqlite:
wal: enable write-ahead logging - allows concurrent read/write operations,
defaults to false
```
Additional settings for SQLite.
## 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. Each list element must be one of the following:
- function
- callable object
- dict with fields for name, argcount, function and deterministic
[An example can be found here](../../query#custom-sql-functions).
## expressions
```yaml
expressions: list
```
List of expression shortcuts. Each list element must be a dict with the following fields.
- `name`: name of the expression
- `expression`: SQL expression, defaults to `name` when empty
- `index`: if this expression should have a database index, defaults to False when not provided
The expression can be a json data column, sql function or anything that can be run as a SQL snippet.
## 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.
+83
View File
@@ -0,0 +1,83 @@
# General
General configuration options.
## keyword
```yaml
keyword: boolean|string
```
Enables sparse keyword indexing for this embeddings.
When set to a boolean, this parameter creates a BM25 index for full text search. When set to a string, it expects a [keyword method](../scoring#method).
It also implicitly disables the [defaults](#defaults) setting for vector search.
## sparse
```yaml
sparse: boolean|path
```
Enables sparse vector indexing for this embeddings.
When set to `True`, this parameter creates a sparse vector index using the [default sparse index model](https://huggingface.co/prithivida/Splade_PP_en_v2). When set to a string, it expects a local or Hugging Face model path.
It also implicitly disables the [defaults](#defaults) setting for vector search.
## dense
```yaml
dense: boolean|string
```
Alias for the [vector model path](../vectors/#path). When set to `True`, the [default transformers vector model](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2) is used.
## hybrid
```yaml
hybrid: boolean
```
Enables hybrid (sparse + dense) indexing for this embeddings.
When enabled, this parameter creates a BM25 index for full text search. It has no effect on the [defaults](#defaults) or [path](../vectors/#path) settings.
## defaults
```yaml
defaults: boolean
```
Uses default vector model path when enabled (default setting is True) and `path` is not provided. See [this link](../) for an example.
## 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
store: limit json data fields to this list of columns
```
Sets the `text` and `object` column names. Defaults to `text` and `object` if not provided.
`store` sets a list of columns to store in the JSON data field. When this isn't provided, all columns are stored (default). When `store` is set to `None`, no JSON columns are stored. This is useful is a field is only needed at indexing time but not search time.
## format
```yaml
format: json|pickle
```
Sets the configuration storage format. Defaults to `json`.
Note that `pickle` configuration is deprecated and will raise an error with the default settings. Its only kept for reading legacy indexes and requires setting the `ALLOW_PICKLE` environment variable. Only enable for local and/or trusted sources.
+80
View File
@@ -0,0 +1,80 @@
# 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
schema: database schema to store graph - defaults to being
determined by the database
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.
## copyattributes
```yaml
copyattributes: boolean|list
```
Copy these attributes from input dictionaries in the `insert` method. If this is set to `True`, all attributes are copied. Otherwise, only the
attributes specified in this list are copied to the graph as attributes.
+51
View File
@@ -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 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 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.
+128
View File
@@ -0,0 +1,128 @@
# 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|pgtext|sparse|custom
```
Sets the scoring method. Add custom scoring via setting this parameter to the fully resolvable class string.
### pgtext
```yaml
schema: database schema to store keyword index - defaults to being
determined by the database
```
Additional settings for Postgres full-text keyword indexes.
### sparse
```yaml
path: sparse vector model path
vectormethod: vector embeddings method
vectornormalize: enable vector embeddings normalization (boolean)
gpu: boolean|int|string|device
normalize: enable score normalization (boolean|float|string|dict)
batch: Sets the transform batch size
encodebatch: Sets the encode batch size
vectors: additional model init args
encodeargs: additional encode() args
backend: ivfsparse|pgsparse|zvecsparse
```
Sparse vector scoring options. The sparse scoring instance combines a sparse vector model with a sparse approximate nearest neighbor index (ANN). This method supports both vector normalization and score normalization.
Vector normalization normalizes all vectors to have a magnitude of 1. By extension, all generated scores will be 0 to 1.
Score normalization scales the output between 0 and 1. This setting supports:
- `True` for default scale normalization
- `float` normalize using this as the scale factor
- `"bayes"` for Bayesian normalization using dynamic candidate score statistics
- `{method: "bayes", alpha: 1.0, beta: null}` for Bayesian normalization with optional custom parameters
#### ivfsparse
```yaml
ivfsparse:
sample: percent of data to use for model training (0.0 - 1.0)
nfeatures: top n features to use for model training, defaults to all features (int)
nlist: desired number of clusters (int)
nprobe: search probe setting (int)
minpoints: minimum number of points for a cluster (int)
```
Inverted file (IVF) index with flat vector file storage and sparse array support.
#### pgsparse
Sparse ANN backed by Postgres. Supports same options as the [pgvector](../ann/#pgvector) ANN.
#### zvecsparse
```yaml
zvecsparse:
efconstruction: ef_construction param for HnswIndexParam (int) - defaults to 200
m: number of HNSW links per element (int) - defaults to 50
efsearch: ef search param for HnswQueryParam (int) - defaults to 300
```
Sparse ANN backed by [zvec](https://github.com/alibaba/zvec). Stores sparse vectors in an embedded, path-based vector index. Requires the [ann](../../../install/#ann) extras package.
## terms
```yaml
terms: boolean|dict
```
Enables term frequency sparse arrays for a scoring instance. This is the backend for sparse keyword indexes.
Supports a `dict` with the parameters `cachelimit` and `cutoff`.
`cachelimit` is the maximum amount of resident memory in bytes to use during indexing before flushing to disk. This parameter is an `int`.
`cutoff` is used during search to determine what constitutes a common term. This parameter is a `float`, i.e. 0.1 for a cutoff of 10%.
When `terms` is set to `True`, default parameters are used for the `cachelimit` and `cutoff`. Normally, these defaults are sufficient.
### Wildcard queries
Keyword queries containing `*` expand matching terms using SQL `LIKE`. Within these
expressions, `%` matches any sequence and `_` matches one character. To match a literal
percent sign, underscore or backslash, use `\%`, `\_` or `\\`, respectively.
For example, `report\_*` matches `report_2026`, while `report_*` also matches `reportX2026`.
Use a tokenizer that preserves these characters, such as `tokenizer: {whitespace: true}`,
or pass pre-tokenized query terms. Queries without `*` retain exact-term matching.
## normalize
```yaml
normalize: boolean|str|dict
```
Enables normalized scoring (ranging from 0 to 1). This setting supports:
- `True` for standard score normalization
- `"bayes"` | `"bb25"` for Bayesian normalization using dynamic candidate score statistics
- `{method: "bayes", alpha: 1.0, beta: null}` for Bayesian normalization with optional custom parameters
When standard normalization is enabled, statistics from the index are used to calculate normalized scores.
When Bayesian/BB25 normalization is enabled, it uses positive-score candidates, dynamic `beta=median(scores)`, adaptive
`alpha_eff=alpha/std(scores)` and a sigmoid transform (likelihood-only variant with flat prior) to map scores to `[0, 1]`.
Bayesian normalization references:
- [https://github.com/instructkr/bb25](https://github.com/instructkr/bb25)
- [https://github.com/cognica-io/bayesian-bm25](https://github.com/cognica-io/bayesian-bm25)
## tokenizer
```yaml
tokenizer: dict
```
Set tokenization rules. Passes these arguments to the underlying [Tokenization pipeline](../../../pipeline/data/tokenizer#txtai.pipeline.Tokenizer.__init__).
+200
View File
@@ -0,0 +1,200 @@
# 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|model2vec|external|
words
```
Embeddings method to use. If the method is not provided, it is inferred using the `path`.
`sentence-transformers`, `llama.cpp`, `litellm`, `model2vec` 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.
`mean`, `cls`, `last`, `late` and `max` pooling are supported and automatically inferred from the model. The pooling method can be overwritten by changing the method from `transformers` to `meanpooling`, `clspooling`, `lastpooling`, `latepooling` or `maxpooling` respectively.
Setting `maxlength` to `True` enables truncating inputs to the `max_seq_length`. Setting `maxlength` to an integer will truncate inputs to that value. When omitted (default), the `maxlength` will be set to either the model or tokenizer maxlength.
Supports loading ONNX models directly. [See this section for more](../../../examples/#model-training).
### 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](https://github.com/abetlen/llama-cpp-python) 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.
### model2vec
Builds embeddings using a [Model2Vec](https://github.com/MinishLab/model2vec) model. Model2Vec is a knowledge-distilled version of a transformers model with static vectors.
### words
Builds embeddings using a word embeddings model and static vectors. While Transformers models are preferred in most cases, this method can be useful for low resource and historical languages where there isn't much linguistic data available.
#### 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, list of numpy arrays or list of float arrays.
Note that this method is deprecated and will raise an error with the default settings. Adding a custom `Vectors` implementation is a cleaner approach. The `ALLOW_RESOLVE_TRANSFORM` environment variable must be set to enable. Only enable for trusted and/or reviewed code.
## 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.
The `sentence-transformers` method supports encoding with multiple GPUs. This can be enabled by setting the gpu parameter to `all`.
## 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 vector quantization at the specified precision. Supports 1-bit through 8-bit quantization. Scalar quantization transforms continuous floating point values to discrete unsigned integers. The `faiss`, `pgvector`, `numpy` and `torch` ANN backends support storing these vectors.
This parameter supports booleans for backwards compatibility. When set to true/false, this flag sets [faiss.quantize](../ann/#faiss).
In addition to vector-level quantization, some ANN backends have the ability to quantize vectors at the storage layer. See the [ANN](../ann) configuration options for more.
## 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.
`txtai` automatically loads prompts stored in `config_sentence_transformers.json` except if this parameter is set. For some older models such as [E5-base](https://huggingface.co/intfloat/e5-base), instructions still need to be provided via this parameter.
## 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.
### center
```yaml
center: boolean | dict
```
Centers normalized late-interaction token vectors and normalizes them again before MUVERA or LEMUR encoding. Centering is applied to
both query and document vectors. `true` uses batch scope and `false` disables centering. An explicit setting always takes precedence.
When omitted, a LEMUR artifact with a stored collection mean uses collection scope. Other LEMUR artifacts and late-interaction models
default to batch scope only when they load more than one `torch.nn.Linear` layer; models with zero or one loaded linear layer keep their
previous output.
Dictionary configuration supports the following scopes:
```yaml
center:
scope: document | batch | collection
```
`document` subtracts the mean of each document or query independently. `batch` subtracts the mean of all real token rows in the current
model batch. Explicit `collection` scope requires a caller-provided, one-dimensional mean vector through either `mean` (an array-like
value) or `path` (a safetensors file containing a `center.mean` tensor), but not both. LEMUR artifacts can provide this mean
automatically. Zero-padding rows are never centered and remain zero.
### muvera
```yaml
muvera:
repetitions: defaults 20
hashes: defaults to 5
projection: defaults 16
```
Settings to control the size of MUVERA fixed dimensional outputs. Default is 20 * 2^5 * 16 = 10,240 dimensions.
Set `muvera` to `false` to disable it or `true` to use the default settings. `false` only makes sense when the multi-vector output
is consumed directly, for example through `PoolingFactory`. Embeddings vectors require `muvera` or `lemur`.
### lemur
```yaml
lemur:
path: local artifact directory or Hugging Face Hub path
```
Loads a trained [LEMUR](../../../pipeline/train/lemur) fixed dimensional encoder. LEMUR artifacts are corpus-specific and must be
created with `LemurTrainer` before configuring an embeddings index. A bare string is treated as the artifact path. Query vectors are
summed learned features and document vectors are ordinary least squares weights over the artifact's stored token sample. Each artifact
contains `config.json` and `model.safetensors`; newly trained artifacts also store the collection token mean as `lemur.center`. Loading that mean automatically
selects collection centering unless `center` is explicitly configured. Artifacts without `lemur.center` retain the previous default.
The Safetensors file contains inference state only. See the trainer page for score filtering and Faiss exact/IVF search behavior.
### trust_remote_code
```yaml
trust_remote_code: boolean
```
Parameter for trusting the code from Hugging Face models with custom implementations.
+59
View File
@@ -0,0 +1,59 @@
# Index format
![format](../images/format.png#only-light)
![format](../images/format-dark.png#only-dark)
This section documents the txtai index format. Each component is designed to ensure open access to the underlying data in a programmatic and platform independent way
If an underlying library has an index format, that is used. Otherwise, txtai persists content with [MessagePack](https://msgpack.org/index.html) serialization.
To learn more about how these components work together, read the [Index Guide](../indexing) and [Query Guide](../query).
## ANN
Approximate Nearest Neighbor (ANN) index configuration for storing vector embeddings.
| Component | Storage Format |
| ------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| [Faiss](https://github.com/facebookresearch/faiss) | Local file format provided by library |
| [Hnswlib](https://github.com/nmslib/hnswlib) | Local file format provided by library |
| [Annoy](https://github.com/spotify/annoy) | Local file format provided by library |
| [NumPy](https://github.com/numpy/numpy) | Local NumPy array files via np.save / np.load |
| [Postgres via pgvector](https://github.com/pgvector/pgvector) | Vector tables in a Postgres database |
## Core
Core embeddings index files.
| Component | Storage Format |
| ------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| [Configuration](https://www.json.org/) | Embeddings index configuration stored as JSON |
| [Index Ids](https://msgpack.org/index.html) | Embeddings index ids serialized with MessagePack. Only enabled when when content storage (database) is disabled. |
## Database
Databases store metadata, text and binary content.
| Component | Storage Format |
| ------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| [SQLite](https://www.sqlite.org/) | Local database files with SQLite |
| [DuckDB](https://github.com/duckdb/duckdb) | Local database files with DuckDB |
| [Postgres](https://www.postgresql.org/) | Postgres relational database via [SQLAlchemy](https://github.com/sqlalchemy/sqlalchemy). Supports additional databases via this library. |
## Graph
Graph nodes and edges for an embeddings index
| Component | Storage Format |
| ------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| [NetworkX](https://github.com/networkx/networkx) | Nodes and edges exported to local file serialized with MessagePack |
| [Postgres](https://github.com/aplbrain/grand) | Nodes and edges stored in a Postgres database. Supports additional databases. |
## Scoring
Sparse/keyword indexing
| Component | Storage Format |
| ------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| [Local index](https://www.sqlite.org/) | Metadata serialized with MessagePack. Terms stored in SQLite. |
| [Postgres](https://www.postgresql.org/docs/current/textsearch.html) | Text indexed with Postgres Full Text Search (FTS) |
+51 -18
View File
@@ -3,15 +3,15 @@
![embeddings](../images/embeddings.png#only-light)
![embeddings](../images/embeddings-dark.png#only-dark)
Embeddings is 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.
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
from txtai import Embeddings
# Create embeddings model, backed by sentence-transformers & transformers
embeddings = Embeddings({"path": "sentence-transformers/nli-mpnet-base-v2"})
embeddings = Embeddings(path="sentence-transformers/nli-mpnet-base-v2")
data = [
"US tops 5 million confirmed virus cases",
@@ -24,10 +24,10 @@ data = [
"Make huge profits without work, earn up to $100,000 a day"
]
# Create an index for the list of text
embeddings.index([(uid, text, None) for uid, text in enumerate(data)])
# Index the list of text
embeddings.index(data)
print("%-20s %s" % ("Query", "Best Match"))
print(f"{'Query':20} Best Match")
print("-" * 50)
# Run an embeddings search for each query
@@ -38,28 +38,32 @@ for query in ("feel good story", "climate change", "public health story", "war",
uid = embeddings.search(query, 1)[0][0]
# Print text
print("%-20s %s" % (query, data[uid]))
print(f"{query:20} {data[uid]}")
```
## Build
An embeddings instance can be created as follows:
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({"path": "sentence-transformers/nli-mpnet-base-v2"})
embeddings = Embeddings()
```
The example above builds a transformers based embeddings instance. In this case, when loading and searching for data, a transformers model is used to vectorize data. The embeddings instance is [configuration driven](configuration) based on what is passed in the constructor. A number of different options are supported to cover a wide variety of use cases.
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.
After creating a new embeddings instance, the next step is adding data to it.
```python
embeddings.index([(uid, text, None) for uid, text in enumerate(data)])
embeddings.index(rows)
```
The index method takes an iterable collection of tuples with three values.
The index method takes an iterable and supports the following formats for each element.
- `(id, data, tags)` - default processing format
| Element | Description |
| ----------- | ------------------------------------------------------------- |
@@ -67,9 +71,19 @@ The index method takes an iterable collection of tuples with three values.
| 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 |
The input iterable can be a list and/or a 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.
- `(id, data)`
txtai buffers data to temporary storage along the way during indexing as embeddings vectors can be quite large (for example 768 dimensions of float32 is 768 * 4 = 3072 bytes per vector).
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
@@ -79,10 +93,29 @@ Once data is indexed, it is ready for search.
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/#content) is stored or not.
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 disabled
- List of `{**query columns}` when content is enabled
- 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).
## Resource management
Embeddings databases are context managers. The following blocks automatically [close](methods/#txtai.embeddings.base.Embeddings.close) and free resources upon completion.
```python
# Create a new Embeddings database, index data and save
with Embeddings() as embeddings:
embeddings.index(rows)
embeddings.save(path)
# Search a saved Embeddings database
with Embeddings().load(path) as embeddings:
embeddings.search(query)
```
While calling `close` isn't always necessary (resources will be garbage collected), it's best to free shared resources like database connections as soon as they aren't needed.
## More examples
+136
View File
@@ -0,0 +1,136 @@
# Index guide
![indexing](../images/indexing.png#only-light)
![indexing](../images/indexing-dark.png#only-dark)
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.
The columns used for text, object and JSON data storage are set via [column configuration](../configuration/general#columns).
## 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
Enabling a [graph network](../configuration/graph) adds a semantic graph at index time as data is being vectorized. Vector embeddings are used to automatically create relationships in the graph. Relationships can also be manually specified at index time.
```python
# Manual relationships by id
embeddings.index([{"id": "0", "text": "...", "relationships": ["2"]}])
# Manual relationships with additional edge attributes
embeddings.index(["id": "0", "text": "...", "relationships": [
{"id": "2", "type": "MEMBER_OF"}
]])
```
Additionally, graphs can be used for topic modeling. Dimensionality reduction with UMAP combined with HDBSCAN is a popular topic modeling method found in a number of libraries. txtai takes a different approach using community detection algorithms to build topic clusters.
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()
```
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 [sparse keyword indexes](../configuration/general#keyword) (BM25, TF-IDF) and [sparse vector indexes](../configuration/general#sparse) (SPLADE). 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.
+13 -3
View File
@@ -1,10 +1,20 @@
# Methods
::: txtai.embeddings.Embeddings
selection:
options:
filters:
- "!columns"
- "!createann"
- "!createcloud"
- "!createdatabase"
- "!creategraph"
- "!createids"
- "!createindexes"
- "!createscoring"
- "!checkarchive"
- "!configure"
- "!createdatabase"
- "!defaultallowed"
- "!defaults"
- "!initindex"
- "!loadquery"
- "!loadvectors"
- "!normalize"
+171 -28
View File
@@ -1,5 +1,8 @@
# Query guide
![query](../images/query.png#only-light)
![query](../images/query-dark.png#only-dark)
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
@@ -11,11 +14,11 @@ embeddings.search("feel good story")
embeddings.search("wildlife")
```
The queries above 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.
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/#content) is enabled. txtai has a translation layer that analyzes input SQL statements and combines similarity results with content stored in a relational database.
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.
@@ -29,40 +32,52 @@ 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')
SELECT id, text, score FROM txtai WHERE similar('feel good story')
```
The similar clause takes two arguments:
The similar clause takes the following arguments:
```sql
similar("query", "number of candidates")
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 has to join 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 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 as additional filtering could occur. If this is not specified, it defaults to 10 times the number of desired results.
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
When a query orders results by score, its `offset` adds to 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, then content is primarily filtered with similar clauses. If data is a dictionary, then all fields in the dictionary are indexed and searchable.
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([(0, {"text": "text to index", "flag": True,
"entry": "2022-01-01"}, None)])
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, entry FROM txtai WHERE similar('query') AND flag = 1
AND entry >= '2022-01-01'
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.
@@ -70,16 +85,30 @@ txtai's query layer automatically detects columns and translates queries into a
Nested dictionaries/JSON is supported and can be escaped with bracket statements.
```python
embeddings.index([(0, {"text": "text to index",
"parent": {"child element": "abc"}}, None)])
embeddings.index([{"text": "text to index",
"parent": {"child element": "abc"}}])
```
```sql
SELECT text FROM txtai WHERE [parent.child element] ='abc'
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.
@@ -98,16 +127,26 @@ SELECT count(*), flag FROM txtai GROUP BY flag ORDER BY count(*) DESC
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")
request = open("demo.gif", "rb")
# Insert record
embeddings.index([("txtai", {"text": "txtai executes machine-learning workflows.",
"object": request.read()}, None)])
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"
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
@@ -119,26 +158,130 @@ Custom, user-defined SQL functions extend selection, filtering and ordering clau
translate = Translation()
# Create embeddings index
embeddings = Embeddings({"path": "sentence-transformers/nli-mpnet-base-v2",
"content": True,
"functions": [translate]})
embeddings = Embeddings(path="sentence-transformers/nli-mpnet-base-v2",
content=True,
functions=[translate]})
# Run a search using a custom SQL function
embeddings.search("""
select
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
FROM txtai WHERE similar('feel good story')
LIMIT 1
""")
```
## Expressions
Expression shortcuts expand into more complex SQL snippets. This is useful for making SQL queries more concise. Indexing is also available on expressions as a performance improvement.
The following example indexes a json extraction field (`filepath`) and the length of each field.
```python
# Create embeddings index
embeddings = Embeddings(
path="sentence-transformers/nli-mpnet-base-v2",
content=True,
expressions=[
{"name": "filepath", "index": True},
{"name": "textlength", "expression": "length(text)", "index": True}
]
)
embeddings.search("SELECT textlength, filepath FROM txtai 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.search("""
MATCH P=({id: 0})-[*1..3]->({id: 5})
RETURN P
""")
# Find related nodes for query matches
embeddings.search("""
MATCH P=(A)-[]->(B)
WHERE SIMILAR(A, "query")
RETURN B
ORDER BY A.score DESC
LIMIT 10
""")
# Standard embeddings search as graph
embeddings.search("query", graph=True)
```
## Subindexes
Subindexes can be queried as follows:
```python
# Build index with subindexes
embeddings = Embeddings(
content=True,
defaults=False,
indexes={
"keyword": {
"keyword": True
},
"dense":{
"dense": True
}
}
)
embeddings.index(stream())
# Query with index parameter
embeddings.search("query", index="keyword")
# Specify with SQL
embeddings.search("""
SELECT id, text, score FROM txtai
WHERE similar('query', 'keyword')
""")
```
## Combined index architecture
When content storage is enabled, txtai becomes a dual storage engine. Content is stored in an underlying database (currently supports SQLite) along with an Approximate Nearest Neighbor (ANN) index. These components combine to deliver similarity search alongside traditional structured search.
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 applied. This step takes those ids and effectively inserts them as part of the underlying database query.
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. This same concept can be expanded to other storage engines like PostgreSQL and could even work with NoSQL stores.
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.
+95 -10
View File
@@ -3,7 +3,7 @@
![examples](images/examples.png#only-light)
![examples](images/examples-dark.png#only-dark)
The examples directory has a series of notebooks and applications giving an overview of txtai. See the sections below.
See below for a comprehensive series of example notebooks and applications covering txtai.
## Semantic Search
@@ -11,19 +11,52 @@ Build semantic/similarity/vector/neural search applications.
| Notebook | Description | |
|:----------|:-------------|------:|
| [Introducing txtai](https://github.com/neuml/txtai/blob/master/examples/01_Introducing_txtai.ipynb) | Overview of the functionality provided by txtai | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/01_Introducing_txtai.ipynb) |
| [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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/13_Similarity_search_with_images.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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/15_Distributed_embeddings_cluster.ipynb) |
| [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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/24_Whats_new_in_txtai_4_0.ipynb) |
| [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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/29_Anatomy_of_a_txtai_index.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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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| [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/39_Classic_Topic_Modeling_with_BM25.ipynb) |
## LLM
Autonomous agents, 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) | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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) [▶️](https://www.youtube.com/watch?v=t_OeAc8NVfQ) | Guide on retrieval augmented generation including how to create citations | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/62_RAG_with_llama_cpp_and_external_API_services.ipynb) |
| [How RAG with txtai works](https://github.com/neuml/txtai/blob/master/examples/63_How_RAG_with_txtai_works.ipynb) | Create RAG processes, API services and Docker instances | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/63_How_RAG_with_txtai_works.ipynb) |
| [Speech to Speech RAG](https://github.com/neuml/txtai/blob/master/examples/65_Speech_to_Speech_RAG.ipynb) [▶️](https://www.youtube.com/watch?v=tH8QWwkVMKA) | Full cycle speech to speech workflow with RAG | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/65_Speech_to_Speech_RAG.ipynb) |
| [Analyzing Hugging Face Posts with Graphs and Agents](https://github.com/neuml/txtai/blob/master/examples/68_Analyzing_Hugging_Face_Posts_with_Graphs_and_Agents.ipynb) | Explore a rich dataset with Graph Analysis and Agents | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/68_Analyzing_Hugging_Face_Posts_with_Graphs_and_Agents.ipynb) |
| [Granting autonomy to agents](https://github.com/neuml/txtai/blob/master/examples/69_Granting_autonomy_to_agents.ipynb) | Agents that iteratively solve problems as they see fit | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/69_Granting_autonomy_to_agents.ipynb) |
| [Getting started with LLM APIs](https://github.com/neuml/txtai/blob/master/examples/70_Getting_started_with_LLM_APIs.ipynb) | Generate embeddings and run LLMs with OpenAI, Claude, Gemini, Bedrock and more | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/70_Getting_started_with_LLM_APIs.ipynb) |
| [Analyzing LinkedIn Company Posts with Graphs and Agents](https://github.com/neuml/txtai/blob/master/examples/71_Analyzing_LinkedIn_Company_Posts_with_Graphs_and_Agents.ipynb) | Exploring how to improve social media engagement with AI | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/71_Analyzing_LinkedIn_Company_Posts_with_Graphs_and_Agents.ipynb) |
| [Parsing the stars with txtai](https://github.com/neuml/txtai/blob/master/examples/72_Parsing_the_stars_with_txtai.ipynb) | Explore an astronomical knowledge graph of known stars, planets, galaxies | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/72_Parsing_the_stars_with_txtai.ipynb) |
| [Chunking your data for RAG](https://github.com/neuml/txtai/blob/master/examples/73_Chunking_your_data_for_RAG.ipynb) | Extract, chunk and index content for effective retrieval | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/73_Chunking_your_data_for_RAG.ipynb) |
| [Medical RAG Research with txtai](https://github.com/neuml/txtai/blob/master/examples/75_Medical_RAG_Research_with_txtai.ipynb) | Analyze PubMed article metadata with RAG | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/75_Medical_RAG_Research_with_txtai.ipynb) |
| [GraphRAG with Wikipedia and GPT OSS](https://github.com/neuml/txtai/blob/master/examples/77_GraphRAG_with_Wikipedia_and_GPT_OSS.ipynb) | Deep graph search powered RAG | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/77_GraphRAG_with_Wikipedia_and_GPT_OSS.ipynb) |
| [RAG is more than Vector Search](https://github.com/neuml/txtai/blob/master/examples/79_RAG_is_more_than_Vector_Search.ipynb) | Context retrieval via Web, SQL and other sources | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/79_RAG_is_more_than_Vector_Search.ipynb) |
| [OpenCode as a txtai LLM](https://github.com/neuml/txtai/blob/master/examples/81_OpenCode_as_a_txtai_LLM.ipynb) | Integrate OpenCode with the txtai ecosystem | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/81_OpenCode_as_a_txtai_LLM.ipynb) |
| [Agentic College Search](https://github.com/neuml/txtai/blob/master/examples/82_Agentic_College_Search.ipynb) | Identify a list of strong engineering colleges | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/82_Agentic_College_Search.ipynb) |
| [TxtAI got skills](https://github.com/neuml/txtai/blob/master/examples/83_TxtAI_got_skills.ipynb) | Integrate skill.md files with your agent | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/83_TxtAI_got_skills.ipynb) |
| [Agent Tools](https://github.com/neuml/txtai/blob/master/examples/84_Agent_Tools.ipynb) [▶️](https://www.youtube.com/watch?v=RDNaFXQy3GQ) | Learn about the txtai agent toolkit | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/84_Agent_Tools.ipynb) |
## Pipelines
Transform data with NLP-backed pipelines.
Transform data with language model backed pipelines.
| Notebook | Description | |
|:----------|:-------------|------:|
@@ -33,11 +66,11 @@ Transform data with NLP-backed pipelines.
| [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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/31_Near_duplicate_image_detection.ipynb) |
| [API Gallery](https://github.com/neuml/txtai/blob/master/examples/08_API_Gallery.ipynb) | Using txtai in JavaScript, Java, Rust and Go | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/08_API_Gallery.ipynb) |
## Workflows
@@ -45,34 +78,86 @@ Efficiently process data at scale.
| Notebook | Description | |
|:----------|:-------------|------:|
| [Run pipeline workflows](https://github.com/neuml/txtai/blob/master/examples/14_Run_pipeline_workflows.ipynb) | Simple yet powerful constructs to efficiently process data | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/14_Run_pipeline_workflows.ipynb) |
| [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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/36_Run_txtai_in_native_code.ipynb) |
| [Generative Audio](https://github.com/neuml/txtai/blob/master/examples/66_Generative_Audio.ipynb) | Storytelling with generative audio workflows | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/66_Generative_Audio.ipynb) |
## Model Training
Train NLP models.
Train, distill, fine-tune and export 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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/41_Train_a_language_model_from_scratch.ipynb) |
| [Distilling Knowledge into Tiny LLMs](https://github.com/neuml/txtai/blob/master/examples/80_Distilling_Knowledge_into_Tiny_LLMs.ipynb) [▶️](https://www.youtube.com/watch?v=Ol560ktgkf0) | Finetune tiny LLMs to enable inference using less resources | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/80_Distilling_Knowledge_into_Tiny_LLMs.ipynb) |
| [Progressive Distillation](https://github.com/neuml/txtai/blob/master/examples/85_Progressive_Distillation.ipynb) | Incrementally compress knowledge from a series of teachers | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/85_Progressive_Distillation.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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/54_API_Authorization_and_Authentication.ipynb) |
| [OpenAI Compatible API](https://github.com/neuml/txtai/blob/master/examples/74_OpenAI_Compatible_API.ipynb) | Connect to txtai with a standard OpenAI client library | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/74_OpenAI_Compatible_API.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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/47_Building_an_efficient_sparse_keyword_index_in_Python.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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/61_Integrate_txtai_with_Postgres.ipynb) |
| [Embeddings index format for open data access](https://github.com/neuml/txtai/blob/master/examples/64_Embeddings_index_format_for_open_data_access.ipynb) | Platform and programming language independent data storage with txtai | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/64_Embeddings_index_format_for_open_data_access.ipynb) |
| [Accessing Low Level Vector APIs](https://github.com/neuml/txtai/blob/master/examples/78_Accessing_Low_Level_Vector_APIs.ipynb) | Build a vector database using txtai's low-level APIs | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/78_Accessing_Low_Level_Vector_APIs.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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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 | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/59_Whats_new_in_txtai_7_0.ipynb) |
| [What's new in txtai 8.0](https://github.com/neuml/txtai/blob/master/examples/67_Whats_new_in_txtai_8_0.ipynb) | Agents with txtai | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/67_Whats_new_in_txtai_8_0.ipynb) |
| [What's new in txtai 9.0](https://github.com/neuml/txtai/blob/master/examples/76_Whats_new_in_txtai_9_0.ipynb) | Learned sparse vectors, late interaction models and rerankers | [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/neuml/txtai/blob/master/examples/76_Whats_new_in_txtai_9_0.ipynb) |
## Applications
Series of example applications with txtai. Links to hosted versions on [Hugging Face Spaces](https://hf.co/spaces) also provided.
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)|
| [Retrieval Augmented Generation](https://github.com/neuml/rag/) | RAG with txtai embeddings databases. Ask questions and get answers from LLMs bound by a context. |*Local run only*|
| [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)|
+151
View File
@@ -0,0 +1,151 @@
# FAQ
![faq](images/faq.png)
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 and debug a txtai process?
__Answer__
See the [observability](../observability) section for more on how this can be enabled in txtai processes.
txtai also has a console application. [This article](https://medium.com/neuml/insights-from-the-txtai-console-d307c28e149e) has more details.
----------
__Question__
How can models be externally loaded and passed to embeddings and pipelines?
__Answer__
Embeddings example.
```python
from transformers import AutoModel, AutoTokenizer
from txtai 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 import LLM
# Load Qwen3 0.6B
path = "Qwen/Qwen3-0.6B"
model = AutoModelForCausalLM.from_pretrained(
path,
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__
Set the following environment parameters.
- Disable OpenMP multithreading via `export OMP_NUM_THREADS=1`
- Workaround `OMP: Error #15` errors via `export KMP_DUPLICATE_LIB_OK=TRUE`
- Disable PyTorch MPS device via `export PYTORCH_MPS_DISABLE=1`
- Disable llama.cpp metal via `export LLAMA_NO_METAL=1`
For more details, refer to [this issue on GitHub](https://github.com/kyamagu/faiss-wheels/issues/73).
----------
__Issue__
Error running SQLite ANN on macOS
```
AttributeError: 'sqlite3.Connection' object has no attribute 'enable_load_extension'
```
__Solution__
See [this note](https://alexgarcia.xyz/sqlite-vec/python.html#macos-blocks-sqlite-extensions-by-default) for options on how to fix this.
----------
__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]'
```
+9 -7
View File
@@ -1,10 +1,12 @@
# Further reading
![further](images/further.png)
![further](images/further.png#only-light)
![further](images/further-dark.png#only-dark)
- [Introducing txtai, AI-powered semantic search built on Transformers](https://towardsdatascience.com/introducing-txtai-an-ai-powered-search-engine-built-on-transformers-37674be252ec)
- [Tutorial series on dev.to](https://dev.to/neuml/tutorial-series-on-txtai-ibg)
- [Run machine-learning workflows to transform data and build AI-powered semantic search applications with txtai](https://towardsdatascience.com/run-machine-learning-workflows-to-transform-data-and-build-ai-powered-text-indices-with-txtai-43d769b566a7)
- [Semantic search on the cheap](https://towardsdatascience.com/semantic-search-on-the-cheap-55940c0fcdab)
- [What's new in txtai 4.0](https://towardsdatascience.com/whats-new-in-txtai-4-0-bbc3a65c3d1c)
- [Serverless vector search with txtai](https://towardsdatascience.com/serverless-vector-search-with-txtai-96f6163ab972)
- [Introducing txtai, the all-in-one AI framework](https://medium.com/neuml/introducing-txtai-the-all-in-one-ai-framework-0660ecfc39d7)
- [txtai: An All-in-One AI Framework for Semantic Search and LLM Workflows](https://github.com/neuml/papers/blob/master/txtai/txtai.pdf)
- [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 9.0](https://medium.com/neuml/whats-new-in-txtai-9-0-d522bb150afa) | [8.0](https://medium.com/neuml/whats-new-in-txtai-8-0-2d7d0ab4506b) | [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) | [rag](https://medium.com/neuml/getting-started-with-rag-9a0cca75f748)
- [Running txtai at scale](https://medium.com/neuml/running-at-scale-with-txtai-71196cdd99f9)
- [Vector search & RAG Landscape: A review with txtai](https://medium.com/neuml/vector-search-rag-landscape-a-review-with-txtai-a7f37ad0e187)
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 290 KiB

After

Width:  |  Height:  |  Size: 337 KiB

+310 -377
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 294 KiB

After

Width:  |  Height:  |  Size: 338 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 420 KiB

+996
View File
@@ -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": {}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 422 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 112 KiB

+138 -310
View File
@@ -5,8 +5,8 @@
"elements": [
{
"type": "rectangle",
"version": 3020,
"versionNonce": 574956379,
"version": 3062,
"versionNonce": 456539957,
"isDeleted": false,
"id": "Ufh5VUA3qmvJowuFyEWz4",
"fillStyle": "hachure",
@@ -21,187 +21,119 @@
"backgroundColor": "transparent",
"width": 719.330217768941,
"height": 100.49478848195537,
"seed": 1218477931,
"groupIds": [
"xlXj5_q2htAY6GkFTIlfY"
],
"strokeSharpness": "sharp",
"boundElements": [
{
"type": "arrow",
"id": "QPHaiLoteZgu8lrk22yKh"
}
],
"updated": 1644866249723,
"link": null
"seed": 2109972213,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1688312603126,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 1748,
"versionNonce": 1788187605,
"version": 1798,
"versionNonce": 1560857173,
"isDeleted": false,
"id": "NDWbJgM53uVck-LSQzD-0",
"fillStyle": "cross-hatch",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 740.6664767795138,
"y": 67.41041395399299,
"y": 67.92614920483035,
"strokeColor": "#ffeb3b",
"backgroundColor": "#ffeb3b",
"width": 85,
"height": 84.17917209201391,
"seed": 1934943141,
"groupIds": [
"xlXj5_q2htAY6GkFTIlfY"
],
"strokeSharpness": "sharp",
"seed": 1782446165,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [
{
"type": "arrow",
"id": "xz4WiNbnK-neZmBN7EIi8"
},
{
"type": "arrow",
"id": "OH6z46_TWktLzJb31zpRF"
},
{
"type": "arrow",
"id": "b07pmUMsHbkm7ES3OaM12"
},
{
"id": "HXM4G7z36lQFPmJTUAy8G",
"type": "arrow"
},
{
"id": "BmtKHcjATX2AOVt484fin",
"type": "arrow"
},
{
"id": "nR4v3IHv93pXRqc8UUXjz",
"type": "arrow"
},
{
"id": "095ylTvsupuqCzyoolf44",
"type": "arrow"
},
{
"type": "text",
"id": "0VztU7lb7T9I5zoL2LjLt"
}
],
"updated": 1644866249723,
"link": null
"updated": 1688312605190,
"link": null,
"locked": false
},
{
"id": "0VztU7lb7T9I5zoL2LjLt",
"type": "text",
"x": 745.6664767795138,
"y": 98.99999999999994,
"width": 75,
"height": 21,
"angle": 0,
"strokeColor": "#000000",
"backgroundColor": "#7950f2",
"version": 385,
"versionNonce": 1280754907,
"isDeleted": false,
"id": "0VztU7lb7T9I5zoL2LjLt",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [
"xlXj5_q2htAY6GkFTIlfY"
],
"strokeSharpness": "sharp",
"seed": 604922325,
"version": 333,
"versionNonce": 1646133243,
"isDeleted": false,
"boundElements": null,
"updated": 1644866249723,
"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,
"text": "Container",
"locked": false,
"fontSize": 16,
"fontFamily": 1,
"text": "Container",
"textAlign": "center",
"verticalAlign": "middle",
"baseline": 15,
"containerId": "NDWbJgM53uVck-LSQzD-0",
"originalText": "Container"
"originalText": "Container",
"lineHeight": 1.3125,
"baseline": 15
},
{
"type": "rectangle",
"version": 1824,
"versionNonce": 1455313205,
"version": 1874,
"versionNonce": 847689653,
"isDeleted": false,
"id": "rr3YJsAyrrPqZbZ4qXh5x",
"fillStyle": "cross-hatch",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1175.874140249897,
"y": 70.42614920483032,
"y": 67.92614920483035,
"strokeColor": "#00e676",
"backgroundColor": "#00e676",
"width": 85,
"height": 84.17917209201391,
"seed": 1158748789,
"groupIds": [
"xlXj5_q2htAY6GkFTIlfY"
],
"strokeSharpness": "sharp",
"seed": 1491183381,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [
{
"type": "arrow",
"id": "xz4WiNbnK-neZmBN7EIi8"
},
{
"type": "arrow",
"id": "OH6z46_TWktLzJb31zpRF"
},
{
"type": "arrow",
"id": "b07pmUMsHbkm7ES3OaM12"
},
{
"id": "HXM4G7z36lQFPmJTUAy8G",
"type": "arrow"
},
{
"id": "BmtKHcjATX2AOVt484fin",
"type": "arrow"
},
{
"id": "nR4v3IHv93pXRqc8UUXjz",
"type": "arrow"
},
{
"id": "095ylTvsupuqCzyoolf44",
"type": "arrow"
},
{
"id": "9NBdG6TyrBqjuDKvzAZXN",
"type": "text"
},
{
"id": "9NBdG6TyrBqjuDKvzAZXN",
"type": "text"
},
{
"type": "text",
"id": "9NBdG6TyrBqjuDKvzAZXN"
}
],
"updated": 1644866249723,
"link": null
"updated": 1688312605190,
"link": null,
"locked": false
},
{
"type": "text",
"version": 404,
"versionNonce": 938625179,
"version": 456,
"versionNonce": 1820291451,
"isDeleted": false,
"id": "9NBdG6TyrBqjuDKvzAZXN",
"fillStyle": "hachure",
@@ -211,100 +143,65 @@
"opacity": 100,
"angle": 0,
"x": 1180.874140249897,
"y": 102.01573525083728,
"y": 99.51573525083731,
"strokeColor": "#000000",
"backgroundColor": "#7950f2",
"width": 75,
"height": 21,
"seed": 603698011,
"groupIds": [
"xlXj5_q2htAY6GkFTIlfY"
],
"strokeSharpness": "sharp",
"seed": 547748981,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1644866249723,
"updated": 1688312605190,
"link": null,
"locked": false,
"fontSize": 16,
"fontFamily": 1,
"text": "Container",
"baseline": 15,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "rr3YJsAyrrPqZbZ4qXh5x",
"originalText": "Container"
"originalText": "Container",
"lineHeight": 1.3125,
"baseline": 15
},
{
"type": "rectangle",
"version": 1814,
"versionNonce": 766010005,
"version": 1864,
"versionNonce": 1889532181,
"isDeleted": false,
"id": "ji9UBE590YJ5e8DKUKbPG",
"fillStyle": "cross-hatch",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 598.874140249897,
"y": 68.42614920483032,
"y": 67.92614920483035,
"strokeColor": "#ff7043",
"backgroundColor": "#ff7043",
"width": 85,
"height": 84.17917209201391,
"seed": 895199477,
"groupIds": [
"xlXj5_q2htAY6GkFTIlfY"
],
"strokeSharpness": "sharp",
"seed": 200844757,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [
{
"type": "arrow",
"id": "xz4WiNbnK-neZmBN7EIi8"
},
{
"type": "arrow",
"id": "OH6z46_TWktLzJb31zpRF"
},
{
"type": "arrow",
"id": "b07pmUMsHbkm7ES3OaM12"
},
{
"id": "HXM4G7z36lQFPmJTUAy8G",
"type": "arrow"
},
{
"id": "BmtKHcjATX2AOVt484fin",
"type": "arrow"
},
{
"id": "nR4v3IHv93pXRqc8UUXjz",
"type": "arrow"
},
{
"id": "095ylTvsupuqCzyoolf44",
"type": "arrow"
},
{
"id": "2fdy7dRwF7ZVaYPrb1Q7p",
"type": "text"
},
{
"id": "2fdy7dRwF7ZVaYPrb1Q7p",
"type": "text"
},
{
"type": "text",
"id": "2fdy7dRwF7ZVaYPrb1Q7p"
}
],
"updated": 1644866249723,
"link": null
"updated": 1688312605190,
"link": null,
"locked": false
},
{
"type": "text",
"version": 394,
"versionNonce": 695500091,
"version": 446,
"versionNonce": 673810971,
"isDeleted": false,
"id": "2fdy7dRwF7ZVaYPrb1Q7p",
"fillStyle": "hachure",
@@ -314,96 +211,65 @@
"opacity": 100,
"angle": 0,
"x": 603.874140249897,
"y": 100.01573525083728,
"y": 99.51573525083731,
"strokeColor": "#000000",
"backgroundColor": "#7950f2",
"width": 75,
"height": 21,
"seed": 507989211,
"groupIds": [
"xlXj5_q2htAY6GkFTIlfY"
],
"strokeSharpness": "sharp",
"seed": 1039082293,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1644866249723,
"updated": 1688312605190,
"link": null,
"locked": false,
"fontSize": 16,
"fontFamily": 1,
"text": "Container",
"baseline": 15,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "ji9UBE590YJ5e8DKUKbPG",
"originalText": "Container"
"originalText": "Container",
"lineHeight": 1.3125,
"baseline": 15
},
{
"type": "rectangle",
"version": 1754,
"versionNonce": 873023477,
"version": 1805,
"versionNonce": 281677429,
"isDeleted": false,
"id": "Kod3erHdgkFtJcsgqHeQQ",
"fillStyle": "cross-hatch",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 889.874140249897,
"y": 68.42614920483032,
"y": 67.92614920483035,
"strokeColor": "#03a9f4",
"backgroundColor": "#03a9f4",
"width": 85,
"height": 84.17917209201391,
"seed": 1941388379,
"groupIds": [
"xlXj5_q2htAY6GkFTIlfY"
],
"strokeSharpness": "sharp",
"seed": 1525609621,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [
{
"type": "arrow",
"id": "xz4WiNbnK-neZmBN7EIi8"
},
{
"type": "arrow",
"id": "OH6z46_TWktLzJb31zpRF"
},
{
"type": "arrow",
"id": "b07pmUMsHbkm7ES3OaM12"
},
{
"id": "HXM4G7z36lQFPmJTUAy8G",
"type": "arrow"
},
{
"id": "BmtKHcjATX2AOVt484fin",
"type": "arrow"
},
{
"id": "nR4v3IHv93pXRqc8UUXjz",
"type": "arrow"
},
{
"id": "095ylTvsupuqCzyoolf44",
"type": "arrow"
},
{
"id": "vA5QfvPySVZE9WnP6d7dp",
"type": "text"
},
{
"type": "text",
"id": "vA5QfvPySVZE9WnP6d7dp"
}
],
"updated": 1644866249723,
"link": null
"updated": 1688312605190,
"link": null,
"locked": false
},
{
"type": "text",
"version": 337,
"versionNonce": 1644633563,
"version": 390,
"versionNonce": 1682411195,
"isDeleted": false,
"id": "vA5QfvPySVZE9WnP6d7dp",
"fillStyle": "hachure",
@@ -413,104 +279,65 @@
"opacity": 100,
"angle": 0,
"x": 894.874140249897,
"y": 100.01573525083728,
"y": 99.51573525083731,
"strokeColor": "#000000",
"backgroundColor": "#7950f2",
"width": 75,
"height": 21,
"seed": 867011285,
"groupIds": [
"xlXj5_q2htAY6GkFTIlfY"
],
"strokeSharpness": "sharp",
"seed": 1588435445,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1644866249723,
"updated": 1688312605190,
"link": null,
"locked": false,
"fontSize": 16,
"fontFamily": 1,
"text": "Container",
"baseline": 15,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "Kod3erHdgkFtJcsgqHeQQ",
"originalText": "Container"
"originalText": "Container",
"lineHeight": 1.3125,
"baseline": 15
},
{
"type": "rectangle",
"version": 1863,
"versionNonce": 2078703957,
"version": 1916,
"versionNonce": 1103787989,
"isDeleted": false,
"id": "8p_AIsxC6UbaWESkrwl4g",
"fillStyle": "cross-hatch",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1035.874140249897,
"y": 69.42614920483032,
"strokeColor": "#5f3dc4",
"y": 67.92614920483035,
"strokeColor": "#7950f2",
"backgroundColor": "#7950f2",
"width": 85,
"height": 84.17917209201391,
"seed": 1712249051,
"groupIds": [
"xlXj5_q2htAY6GkFTIlfY"
],
"strokeSharpness": "sharp",
"seed": 842044245,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [
{
"type": "arrow",
"id": "xz4WiNbnK-neZmBN7EIi8"
},
{
"type": "arrow",
"id": "OH6z46_TWktLzJb31zpRF"
},
{
"type": "arrow",
"id": "b07pmUMsHbkm7ES3OaM12"
},
{
"id": "HXM4G7z36lQFPmJTUAy8G",
"type": "arrow"
},
{
"id": "BmtKHcjATX2AOVt484fin",
"type": "arrow"
},
{
"id": "nR4v3IHv93pXRqc8UUXjz",
"type": "arrow"
},
{
"id": "095ylTvsupuqCzyoolf44",
"type": "arrow"
},
{
"id": "AceuLTPujneYjRp_njhIl",
"type": "text"
},
{
"id": "AceuLTPujneYjRp_njhIl",
"type": "text"
},
{
"id": "AceuLTPujneYjRp_njhIl",
"type": "text"
},
{
"type": "text",
"id": "AceuLTPujneYjRp_njhIl"
}
],
"updated": 1644866249723,
"link": null
"updated": 1688312605190,
"link": null,
"locked": false
},
{
"type": "text",
"version": 443,
"versionNonce": 2092739195,
"version": 499,
"versionNonce": 1132199771,
"isDeleted": false,
"id": "AceuLTPujneYjRp_njhIl",
"fillStyle": "hachure",
@@ -519,28 +346,29 @@
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1040.874140249897,
"y": 101.01573525083728,
"x": 1041.907473074604,
"y": 99.51573525083731,
"strokeColor": "#000000",
"backgroundColor": "#7950f2",
"width": 75,
"width": 72.93333435058594,
"height": 21,
"seed": 1770780245,
"groupIds": [
"xlXj5_q2htAY6GkFTIlfY"
],
"strokeSharpness": "sharp",
"seed": 30236853,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1644866249723,
"updated": 1688312605190,
"link": null,
"locked": false,
"fontSize": 16,
"fontFamily": 1,
"text": "Container",
"baseline": 15,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "8p_AIsxC6UbaWESkrwl4g",
"originalText": "Container"
"originalText": "Container",
"lineHeight": 1.3125,
"baseline": 15
}
],
"appState": {
Binary file not shown.

Before

Width:  |  Height:  |  Size: 127 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 223 KiB

After

Width:  |  Height:  |  Size: 850 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

After

Width:  |  Height:  |  Size: 846 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 49 KiB

+306 -179
View File
@@ -5,8 +5,8 @@
"elements": [
{
"type": "rectangle",
"version": 623,
"versionNonce": 1614613512,
"version": 658,
"versionNonce": 56883131,
"isDeleted": false,
"id": "28knmXv7UWxhQgfO1Ap_e",
"fillStyle": "hachure",
@@ -23,14 +23,17 @@
"height": 19.163298353951955,
"seed": 333697800,
"groupIds": [],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641745822132
"updated": 1688314176184,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 724,
"versionNonce": 384800888,
"version": 759,
"versionNonce": 1321514357,
"isDeleted": false,
"id": "NWB9SsDdfRnKFM7WSMiDD",
"fillStyle": "hachure",
@@ -47,14 +50,17 @@
"height": 8.353548393013705,
"seed": 1799143800,
"groupIds": [],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641745822132
"updated": 1688314176184,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 838,
"versionNonce": 1137593096,
"version": 873,
"versionNonce": 1965246555,
"isDeleted": false,
"id": "o8mRXU1Pv0Lht3Kvw3LjM",
"fillStyle": "hachure",
@@ -71,14 +77,17 @@
"height": 10.760364257767161,
"seed": 84161032,
"groupIds": [],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641745822132
"updated": 1688314176184,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 817,
"versionNonce": 322230024,
"version": 852,
"versionNonce": 1473789653,
"isDeleted": false,
"id": "7XXBg9rngZPBd8BY3k-Dk",
"fillStyle": "hachure",
@@ -95,14 +104,17 @@
"height": 326.7582126998559,
"seed": 1645597304,
"groupIds": [],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641752945859
"updated": 1688314176185,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 785,
"versionNonce": 1088399880,
"version": 820,
"versionNonce": 1609532667,
"isDeleted": false,
"id": "1djoflJbPq1iZYxeG6vvs",
"fillStyle": "hachure",
@@ -119,14 +131,17 @@
"height": 8.353548393013705,
"seed": 1354805512,
"groupIds": [],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641745822132
"updated": 1688314176185,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 1012,
"versionNonce": 2110642808,
"version": 1047,
"versionNonce": 2087951413,
"isDeleted": false,
"id": "61SvR173kGBlNiM2hYx-i",
"fillStyle": "hachure",
@@ -143,14 +158,19 @@
"height": 35.19095464139164,
"seed": 497337208,
"groupIds": [],
"strokeSharpness": "round",
"frameId": null,
"roundness": {
"type": 1
},
"boundElements": [],
"updated": 1641745822132
"updated": 1688314176185,
"link": null,
"locked": false
},
{
"type": "text",
"version": 1144,
"versionNonce": 1288082440,
"version": 1179,
"versionNonce": 1800088987,
"isDeleted": false,
"id": "KweZDYL4pV266i29UQo2O",
"fillStyle": "hachure",
@@ -167,22 +187,26 @@
"height": 17,
"seed": 244666376,
"groupIds": [],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641745960277,
"updated": 1688314176185,
"link": null,
"locked": false,
"fontSize": 12.613804582094819,
"fontFamily": 1,
"text": "Show more",
"baseline": 12,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Show more"
"originalText": "Show more",
"lineHeight": 1.3477297741025214,
"baseline": 12
},
{
"type": "line",
"version": 1020,
"versionNonce": 354143096,
"version": 1055,
"versionNonce": 612126101,
"isDeleted": false,
"id": "6UHr1F9sbQjfc3Pn3AUC9",
"fillStyle": "hachure",
@@ -199,9 +223,14 @@
"height": 7.91335492900009,
"seed": 1278055544,
"groupIds": [],
"strokeSharpness": "round",
"frameId": null,
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1641745822132,
"updated": 1688314176185,
"link": null,
"locked": false,
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
@@ -224,11 +253,11 @@
},
{
"type": "rectangle",
"version": 1546,
"versionNonce": 871548936,
"version": 1593,
"versionNonce": 711508539,
"isDeleted": false,
"id": "pQ7Helj-RkhLonwDn4uxq",
"fillStyle": "cross-hatch",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
@@ -244,17 +273,20 @@
"groupIds": [
"0ClD8yewsWOTVzkWq2mkc"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641745822133
"updated": 1688314176185,
"link": null,
"locked": false
},
{
"type": "line",
"version": 758,
"versionNonce": 1334025336,
"version": 806,
"versionNonce": 522703605,
"isDeleted": false,
"id": "bI-A-gEMD-yvyhVvuajAH",
"fillStyle": "cross-hatch",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
@@ -270,9 +302,14 @@
"groupIds": [
"0ClD8yewsWOTVzkWq2mkc"
],
"strokeSharpness": "round",
"frameId": null,
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1641745822133,
"updated": 1688314176185,
"link": null,
"locked": false,
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
@@ -291,11 +328,11 @@
},
{
"type": "line",
"version": 768,
"versionNonce": 292325128,
"version": 816,
"versionNonce": 640336603,
"isDeleted": false,
"id": "X3L53b-aDRBM9J_i7xfIb",
"fillStyle": "cross-hatch",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
@@ -311,9 +348,14 @@
"groupIds": [
"0ClD8yewsWOTVzkWq2mkc"
],
"strokeSharpness": "round",
"frameId": null,
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1641745822133,
"updated": 1688314176185,
"link": null,
"locked": false,
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
@@ -332,11 +374,11 @@
},
{
"type": "rectangle",
"version": 1720,
"versionNonce": 1858686328,
"version": 1768,
"versionNonce": 956017749,
"isDeleted": false,
"id": "Fk7rL2dsob9lBYBWtqIaE",
"fillStyle": "cross-hatch",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
@@ -345,24 +387,27 @@
"x": 909.5034365835013,
"y": 461.80381850437016,
"strokeColor": "#000000",
"backgroundColor": "#03a9f4",
"backgroundColor": "#ffeb3b",
"width": 12.48277017202394,
"height": 62.41385086011974,
"seed": 1096491528,
"groupIds": [
"0ClD8yewsWOTVzkWq2mkc"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641745822134
"updated": 1688314176185,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 1590,
"versionNonce": 928409096,
"version": 1638,
"versionNonce": 656650107,
"isDeleted": false,
"id": "V3UV1tCb1upEwCUx2NF_U",
"fillStyle": "cross-hatch",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
@@ -371,24 +416,27 @@
"x": 940.7103620135604,
"y": 480.5279737624063,
"strokeColor": "#000000",
"backgroundColor": "#ffeb3b",
"backgroundColor": "#03a9f4",
"width": 12.482770172023953,
"height": 43.68969560208382,
"seed": 1860559480,
"groupIds": [
"0ClD8yewsWOTVzkWq2mkc"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641745822134
"updated": 1688314176185,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 1597,
"versionNonce": 1546706552,
"version": 1650,
"versionNonce": 793292539,
"isDeleted": false,
"id": "H9TFct1zEuli3oFZ0J6Pi",
"fillStyle": "cross-hatch",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
@@ -397,24 +445,27 @@
"x": 971.9172874436208,
"y": 474.28658867639376,
"strokeColor": "#000000",
"backgroundColor": "#00e676",
"backgroundColor": "#7950f2",
"width": 12.482770172023953,
"height": 49.9310806880958,
"seed": 1153016072,
"groupIds": [
"0ClD8yewsWOTVzkWq2mkc"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641745822134
"updated": 1688314179109,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 1754,
"versionNonce": 1655465224,
"version": 1806,
"versionNonce": 1066797083,
"isDeleted": false,
"id": "Yvl5ZFMXGqZoKBjooHuuL",
"fillStyle": "cross-hatch",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
@@ -423,21 +474,24 @@
"x": 1003.1242128736812,
"y": 468.04520359038156,
"strokeColor": "#000000",
"backgroundColor": "#ff7043",
"backgroundColor": "#00e676",
"width": 12.48277017202394,
"height": 56.172465774107785,
"seed": 905106296,
"groupIds": [
"0ClD8yewsWOTVzkWq2mkc"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641745822134
"updated": 1688314176185,
"link": null,
"locked": false
},
{
"type": "text",
"version": 785,
"versionNonce": 725387784,
"version": 820,
"versionNonce": 851598101,
"isDeleted": false,
"id": "k2RjGkR4842FWeQqwZNqP",
"fillStyle": "hachure",
@@ -454,22 +508,26 @@
"height": 46,
"seed": 351902216,
"groupIds": [],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746472537,
"updated": 1688314176185,
"link": null,
"locked": false,
"fontSize": 36,
"fontFamily": 1,
"text": "Results",
"baseline": 32,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Results"
"originalText": "Results",
"lineHeight": 1.2777777777777777,
"baseline": 32
},
{
"type": "line",
"version": 352,
"versionNonce": 1781891704,
"version": 387,
"versionNonce": 359943355,
"isDeleted": false,
"id": "9BG_CdPIU12PIVg57JFjb",
"fillStyle": "hachure",
@@ -488,9 +546,14 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "round",
"frameId": null,
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1641746497832,
"updated": 1688314176185,
"link": null,
"locked": false,
"startBinding": null,
"endBinding": null,
"lastCommittedPoint": null,
@@ -509,8 +572,8 @@
},
{
"type": "text",
"version": 924,
"versionNonce": 382863880,
"version": 959,
"versionNonce": 1682976885,
"isDeleted": false,
"id": "ooEpA700FaTXoHICTApB5",
"fillStyle": "hachure",
@@ -529,22 +592,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176185,
"link": null,
"locked": false,
"fontSize": 12.903833622972927,
"fontFamily": 1,
"text": "0",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "0"
"originalText": "0",
"lineHeight": 1.3556693953949979,
"baseline": 12
},
{
"type": "text",
"version": 996,
"versionNonce": 2125560440,
"version": 1031,
"versionNonce": 1818295643,
"isDeleted": false,
"id": "n9FAYaIZeMXggjqKvdYxs",
"fillStyle": "hachure",
@@ -563,22 +630,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176185,
"link": null,
"locked": false,
"fontSize": 12.903833622972932,
"fontFamily": 1,
"text": "1",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "1"
"originalText": "1",
"lineHeight": 1.3556693953949972,
"baseline": 12
},
{
"type": "text",
"version": 1072,
"versionNonce": 454265096,
"version": 1107,
"versionNonce": 1144805845,
"isDeleted": false,
"id": "fQfYp0ljtX1ESRr5wPM9b",
"fillStyle": "hachure",
@@ -597,22 +668,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176185,
"link": null,
"locked": false,
"fontSize": 12.903833622972925,
"fontFamily": 1,
"text": "2",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "2"
"originalText": "2",
"lineHeight": 1.3556693953949979,
"baseline": 12
},
{
"type": "text",
"version": 980,
"versionNonce": 2022402936,
"version": 1015,
"versionNonce": 1873713659,
"isDeleted": false,
"id": "6-kghWfO7GdeQUDWs_zBe",
"fillStyle": "hachure",
@@ -631,22 +706,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176185,
"link": null,
"locked": false,
"fontSize": 12.903833622972927,
"fontFamily": 1,
"text": "ID",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "ID"
"originalText": "ID",
"lineHeight": 1.3556693953949979,
"baseline": 12
},
{
"type": "text",
"version": 989,
"versionNonce": 952969224,
"version": 1024,
"versionNonce": 463230773,
"isDeleted": false,
"id": "UMowu2HWCm_mgorPKfHhX",
"fillStyle": "hachure",
@@ -665,22 +744,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176185,
"link": null,
"locked": false,
"fontSize": 12.903833622972925,
"fontFamily": 1,
"text": "_____",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "_____"
"originalText": "_____",
"lineHeight": 1.3556693953949979,
"baseline": 12
},
{
"type": "text",
"version": 1058,
"versionNonce": 1677671544,
"version": 1093,
"versionNonce": 1012900507,
"isDeleted": false,
"id": "1_YJ1fjNPFhQdtKIp-DSI",
"fillStyle": "hachure",
@@ -699,22 +782,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176185,
"link": null,
"locked": false,
"fontSize": 12.90383362297293,
"fontFamily": 1,
"text": "_____",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "_____"
"originalText": "_____",
"lineHeight": 1.3556693953949974,
"baseline": 12
},
{
"type": "text",
"version": 1133,
"versionNonce": 1274734344,
"version": 1168,
"versionNonce": 1960159381,
"isDeleted": false,
"id": "O5wbweMweVsQWwdNABtm7",
"fillStyle": "hachure",
@@ -733,22 +820,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176186,
"link": null,
"locked": false,
"fontSize": 12.903833622972925,
"fontFamily": 1,
"text": "____",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "____"
"originalText": "____",
"lineHeight": 1.3556693953949979,
"baseline": 12
},
{
"type": "text",
"version": 1033,
"versionNonce": 852553080,
"version": 1068,
"versionNonce": 723949371,
"isDeleted": false,
"id": "v3I-eUd4WMJ8VzvC_7rB_",
"fillStyle": "hachure",
@@ -767,22 +858,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176186,
"link": null,
"locked": false,
"fontSize": 12.903833622972927,
"fontFamily": 1,
"text": "Text",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Text"
"originalText": "Text",
"lineHeight": 1.3556693953949979,
"baseline": 12
},
{
"type": "text",
"version": 1084,
"versionNonce": 1360578056,
"version": 1119,
"versionNonce": 1906167285,
"isDeleted": false,
"id": "sdGrFMITxSJsejpV0zIFY",
"fillStyle": "hachure",
@@ -801,22 +896,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176186,
"link": null,
"locked": false,
"fontSize": 12.903833622972929,
"fontFamily": 1,
"text": "Score",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Score"
"originalText": "Score",
"lineHeight": 1.3556693953949976,
"baseline": 12
},
{
"type": "text",
"version": 1007,
"versionNonce": 2118418040,
"version": 1042,
"versionNonce": 1516632027,
"isDeleted": false,
"id": "5tPTHdBAi9oW2Cme01uST",
"fillStyle": "hachure",
@@ -835,22 +934,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176186,
"link": null,
"locked": false,
"fontSize": 12.903833622972929,
"fontFamily": 1,
"text": "0.851",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "0.851"
"originalText": "0.851",
"lineHeight": 1.3556693953949976,
"baseline": 12
},
{
"type": "text",
"version": 1082,
"versionNonce": 1428342024,
"version": 1117,
"versionNonce": 1627014997,
"isDeleted": false,
"id": "VkvcQQqVWAFSBPXeb-631",
"fillStyle": "hachure",
@@ -869,22 +972,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176186,
"link": null,
"locked": false,
"fontSize": 12.903833622972929,
"fontFamily": 1,
"text": "0.834",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "0.834"
"originalText": "0.834",
"lineHeight": 1.3556693953949976,
"baseline": 12
},
{
"type": "text",
"version": 1154,
"versionNonce": 387837816,
"version": 1189,
"versionNonce": 2016429179,
"isDeleted": false,
"id": "r5V4P6WY1YTnZqynbGcPW",
"fillStyle": "hachure",
@@ -903,22 +1010,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176186,
"link": null,
"locked": false,
"fontSize": 12.903833622972924,
"fontFamily": 1,
"text": "0.653",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "0.653"
"originalText": "0.653",
"lineHeight": 1.355669395394998,
"baseline": 12
},
{
"type": "text",
"version": 1129,
"versionNonce": 1704256520,
"version": 1164,
"versionNonce": 356553909,
"isDeleted": false,
"id": "tplkVB19dZGWPH04eoN3-",
"fillStyle": "hachure",
@@ -937,22 +1048,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176187,
"link": null,
"locked": false,
"fontSize": 12.903833622972922,
"fontFamily": 1,
"text": "Data",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Data"
"originalText": "Data",
"lineHeight": 1.3556693953949983,
"baseline": 12
},
{
"type": "text",
"version": 1056,
"versionNonce": 362889336,
"version": 1091,
"versionNonce": 1279786267,
"isDeleted": false,
"id": "-O_818hE0e37gLO8X85ED",
"fillStyle": "hachure",
@@ -971,22 +1086,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176187,
"link": null,
"locked": false,
"fontSize": 12.903833622972925,
"fontFamily": 1,
"text": "{____}",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "{____}"
"originalText": "{____}",
"lineHeight": 1.3556693953949979,
"baseline": 12
},
{
"type": "text",
"version": 1083,
"versionNonce": 7021320,
"version": 1118,
"versionNonce": 2048275989,
"isDeleted": false,
"id": "q_5ogcScUemL3g6XJyETb",
"fillStyle": "hachure",
@@ -1005,22 +1124,26 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176187,
"link": null,
"locked": false,
"fontSize": 12.903833622972925,
"fontFamily": 1,
"text": "{____}",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "{____}"
"originalText": "{____}",
"lineHeight": 1.3556693953949979,
"baseline": 12
},
{
"type": "text",
"version": 1076,
"versionNonce": 1771204984,
"version": 1111,
"versionNonce": 35627451,
"isDeleted": false,
"id": "hePUy_nbNvIpf6_6PBvbq",
"fillStyle": "hachure",
@@ -1039,17 +1162,21 @@
"groupIds": [
"RaIXn6GkWfnJt6NeXQ4tC"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641746497530,
"updated": 1688314176187,
"link": null,
"locked": false,
"fontSize": 12.903833622972925,
"fontFamily": 1,
"text": "{____}",
"baseline": 12.493332325933352,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "{____}"
"originalText": "{____}",
"lineHeight": 1.3556693953949979,
"baseline": 12
}
],
"appState": {
Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 62 KiB

+367
View File
@@ -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": {}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 KiB

+793
View File
@@ -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": {}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 526 KiB

+446
View File
@@ -0,0 +1,446 @@
{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [
{
"type": "rectangle",
"version": 564,
"versionNonce": 555415043,
"index": "aZV",
"isDeleted": false,
"id": "c8q6be5K81xmCJ-ukSRnZ",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 518,
"y": -130.82625000000002,
"strokeColor": "#03a9f4",
"backgroundColor": "#03a9f4",
"width": 261,
"height": 183,
"seed": 443859885,
"groupIds": [
"2ZFdM1ONmx5lh5aHlDXqH"
],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1724584360105,
"link": null,
"locked": false
},
{
"type": "text",
"version": 518,
"versionNonce": 1253679021,
"index": "aa",
"isDeleted": false,
"id": "uKvu2zcnLI9S3D-aFErJQ",
"fillStyle": "hachure",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 616.6083333333333,
"y": -129.82625000000002,
"strokeColor": "#1e1e1e",
"backgroundColor": "#03a9f4",
"width": 53.78333333333333,
"height": 35,
"seed": 848196621,
"groupIds": [
"2ZFdM1ONmx5lh5aHlDXqH"
],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1724584360105,
"link": null,
"locked": false,
"fontSize": 28,
"fontFamily": 5,
"text": "ANN",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "ANN",
"autoResize": true,
"lineHeight": 1.25
},
{
"type": "text",
"version": 480,
"versionNonce": 944506682,
"index": "ab",
"isDeleted": false,
"id": "DCqImwTRCBh0nmPIv-3zR",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 536.8249969482422,
"y": -85.17374999999998,
"strokeColor": "#1e1e1e",
"backgroundColor": "#03a9f4",
"width": 213.35000610351562,
"height": 125,
"seed": 1618350307,
"groupIds": [
"2ZFdM1ONmx5lh5aHlDXqH"
],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1724587151711,
"link": null,
"locked": false,
"fontSize": 20,
"fontFamily": 5,
"text": "- Faiss\n- HNSWLib\n- Annoy\n- NumPy\n- Postgres (pgvector)",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "- Faiss\n- HNSWLib\n- Annoy\n- NumPy\n- Postgres (pgvector)",
"autoResize": true,
"lineHeight": 1.25
},
{
"type": "rectangle",
"version": 780,
"versionNonce": 1085123203,
"index": "abV",
"isDeleted": false,
"id": "Jo5LO2bSebtz54pWb3XHT",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 810.5,
"y": -131.82625000000002,
"strokeColor": "#00e676",
"backgroundColor": "#00e676",
"width": 282.9999999999999,
"height": 182,
"seed": 848620899,
"groupIds": [
"hCyHVfABhzmE_8xEhUbGD"
],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1724584372798,
"link": null,
"locked": false
},
{
"type": "text",
"version": 717,
"versionNonce": 708473645,
"index": "ac",
"isDeleted": false,
"id": "wX4udz8nceRrNC3uUDLYf",
"fillStyle": "hachure",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 886.2583312988281,
"y": -121.82625000000002,
"strokeColor": "#1e1e1e",
"backgroundColor": "#03a9f4",
"width": 131.48333740234375,
"height": 35,
"seed": 16206083,
"groupIds": [
"hCyHVfABhzmE_8xEhUbGD"
],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1724584372798,
"link": null,
"locked": false,
"fontSize": 28,
"fontFamily": 5,
"text": "Database",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Database",
"autoResize": true,
"lineHeight": 1.25
},
{
"type": "text",
"version": 722,
"versionNonce": 1181998310,
"index": "ad",
"isDeleted": false,
"id": "-5HdWsMbtE_7EnREtXBfc",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 831.1999969482422,
"y": -77.17374999999998,
"strokeColor": "#1e1e1e",
"backgroundColor": "#03a9f4",
"width": 241.60000610351562,
"height": 75,
"seed": 1976381603,
"groupIds": [
"hCyHVfABhzmE_8xEhUbGD"
],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1724587158353,
"link": null,
"locked": false,
"fontSize": 20,
"fontFamily": 5,
"text": "- SQLite\n- DuckDB\n- Postgres (SQLAlchemy)",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "- SQLite\n- DuckDB\n- Postgres (SQLAlchemy)",
"autoResize": true,
"lineHeight": 1.25
},
{
"type": "rectangle",
"version": 900,
"versionNonce": 1747610221,
"index": "adV",
"isDeleted": false,
"id": "AK1nt4FrnmjinS2uZVZ2g",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1125,
"y": -132.32625000000002,
"strokeColor": "#ffeb3b",
"backgroundColor": "#ffeb3b",
"width": 266.9999999999999,
"height": 180,
"seed": 961514755,
"groupIds": [
"KOc5NUqUBL03A8qlCEUgw"
],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1724584372798,
"link": null,
"locked": false
},
{
"type": "text",
"version": 828,
"versionNonce": 1440317155,
"index": "ae",
"isDeleted": false,
"id": "yeFldcgggtNS8S44yWdtq",
"fillStyle": "hachure",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1218.7916666666667,
"y": -129.32625000000002,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffeb3b",
"width": 79.41666666666667,
"height": 35,
"seed": 41743523,
"groupIds": [
"KOc5NUqUBL03A8qlCEUgw"
],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1724584372798,
"link": null,
"locked": false,
"fontSize": 28,
"fontFamily": 5,
"text": "Graph",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Graph",
"autoResize": true,
"lineHeight": 1.25
},
{
"type": "text",
"version": 937,
"versionNonce": 766285005,
"index": "af",
"isDeleted": false,
"id": "FSHrZ4DMc-ubEPZmgY7M3",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1128.8999938964844,
"y": -78.67374999999998,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffeb3b",
"width": 259.20001220703125,
"height": 75,
"seed": 2094819395,
"groupIds": [
"KOc5NUqUBL03A8qlCEUgw"
],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1724584372798,
"link": null,
"locked": false,
"fontSize": 20,
"fontFamily": 5,
"text": "- NetworkX (MessagePack)\n- Postgres (grand-graph)\n",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "- NetworkX (MessagePack)\n- Postgres (grand-graph)\n",
"autoResize": true,
"lineHeight": 1.25
},
{
"type": "rectangle",
"version": 784,
"versionNonce": 868973283,
"index": "afV",
"isDeleted": false,
"id": "C_7EOPOUjQk0kE44hF9WC",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1423.5,
"y": -130.82625000000002,
"strokeColor": "#9775fa",
"backgroundColor": "#9775fa",
"width": 290.9999999999999,
"height": 174,
"seed": 606086243,
"groupIds": [
"-E2Q3MkgggNSCRYPrSvhr"
],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1724584154381,
"link": null,
"locked": false
},
{
"type": "text",
"version": 712,
"versionNonce": 1558730957,
"index": "ag",
"isDeleted": false,
"id": "nbfo2fj-5l1xNK7r9SnT8",
"fillStyle": "hachure",
"strokeWidth": 2,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1520.2333335876465,
"y": -127.82625000000002,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffeb3b",
"width": 97.53333282470703,
"height": 35,
"seed": 704880643,
"groupIds": [
"-E2Q3MkgggNSCRYPrSvhr"
],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1724584154381,
"link": null,
"locked": false,
"fontSize": 28,
"fontFamily": 5,
"text": "Scoring",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Scoring",
"autoResize": true,
"lineHeight": 1.25
},
{
"type": "text",
"version": 832,
"versionNonce": 2104267693,
"index": "ah",
"isDeleted": false,
"id": "6a1UVKWBLqgnaAvPSuSfw",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1431.6750030517578,
"y": -76.17374999999998,
"strokeColor": "#1e1e1e",
"backgroundColor": "#ffeb3b",
"width": 274.6499938964844,
"height": 75,
"seed": 154576803,
"groupIds": [
"-E2Q3MkgggNSCRYPrSvhr"
],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1724584347937,
"link": null,
"locked": false,
"fontSize": 20,
"fontFamily": 5,
"text": "- Local index (MessagePack)\n- Postgres\n",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "- Local index (MessagePack)\n- Postgres\n",
"autoResize": true,
"lineHeight": 1.25
}
],
"appState": {
"gridSize": 20,
"gridStep": 5,
"gridModeEnabled": false,
"viewBackgroundColor": "#ffffff"
},
"files": {}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 531 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 148 KiB

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 50 KiB

+38 -28
View File
@@ -5,11 +5,11 @@
"elements": [
{
"type": "rectangle",
"version": 1431,
"versionNonce": 726709768,
"version": 1435,
"versionNonce": 1860045045,
"isDeleted": false,
"id": "LgVOdCQnXRH2GYHIGLwOx",
"fillStyle": "cross-hatch",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
@@ -25,17 +25,20 @@
"groupIds": [
"s5mCNZzJxsETmWhZoD3qR"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641754344717
"updated": 1688311151676,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 1531,
"versionNonce": 2009304696,
"version": 1534,
"versionNonce": 2090527963,
"isDeleted": false,
"id": "GG_mFtlk6nEiYCQ8vhzjZ",
"fillStyle": "cross-hatch",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
@@ -51,41 +54,48 @@
"groupIds": [
"Rezl6DUXkEY8GT9kuDOQX"
],
"strokeSharpness": "sharp",
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1641754344717
"updated": 1688311151677,
"link": null,
"locked": false
},
{
"id": "NLfZWFLgvJj3ccuF5yxD8",
"type": "text",
"x": 793,
"y": 216.86805555555557,
"width": 80,
"height": 16,
"angle": 0,
"strokeColor": "#343a40",
"backgroundColor": "transparent",
"version": 293,
"versionNonce": 1618682453,
"isDeleted": false,
"id": "NLfZWFLgvJj3ccuF5yxD8",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"groupIds": [],
"strokeSharpness": "sharp",
"angle": 0,
"x": 793,
"y": 216.86805555555557,
"strokeColor": "#343a40",
"backgroundColor": "transparent",
"width": 80,
"height": 16,
"seed": 297813880,
"version": 288,
"versionNonce": 145457528,
"isDeleted": false,
"boundElements": null,
"updated": 1641754464371,
"text": "Installing.......",
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1688311151677,
"link": null,
"locked": false,
"fontSize": 12.242424242424246,
"fontFamily": 1,
"text": "Installing.......",
"textAlign": "left",
"verticalAlign": "top",
"baseline": 11,
"containerId": null,
"originalText": "Installing......."
"originalText": "Installing.......",
"lineHeight": 1.3069306930693065,
"baseline": 11
}
],
"appState": {
Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 50 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 230 KiB

+531
View File
@@ -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": {}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

+243
View File
@@ -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": {}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 861 KiB

+555
View File
@@ -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": {}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 856 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 KiB

After

Width:  |  Height:  |  Size: 434 KiB

+284 -157
View File
@@ -5,8 +5,8 @@
"elements": [
{
"type": "rectangle",
"version": 633,
"versionNonce": 705603336,
"version": 639,
"versionNonce": 1876686474,
"isDeleted": false,
"id": "mG5J3YEl3JUm8tWD2gLax",
"fillStyle": "hachure",
@@ -15,22 +15,29 @@
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 840.1017043524607,
"x": 840.0920889678455,
"y": 323.8650942251963,
"strokeColor": "#ff7043",
"backgroundColor": "#ff7043",
"width": 412.0000000000001,
"height": 54.999999999999964,
"seed": 322487816,
"groupIds": [],
"groupIds": [
"VYua_NGvuS1eX_KPHCgOc"
],
"strokeSharpness": "sharp",
"boundElements": [],
"updated": 1641744014625
"updated": 1731084295790,
"index": "a4",
"frameId": null,
"roundness": null,
"link": null,
"locked": false
},
{
"type": "text",
"version": 202,
"versionNonce": 1087974776,
"version": 210,
"versionNonce": 82579222,
"isDeleted": false,
"id": "N9ytCRthOA395FeHYtiWS",
"fillStyle": "hachure",
@@ -39,17 +46,19 @@
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1010.3997812755383,
"x": 1019.5920889678455,
"y": 335.8362480713501,
"strokeColor": "#343a40",
"backgroundColor": "#03a9f4",
"width": 53,
"height": 36,
"seed": 1396884744,
"groupIds": [],
"groupIds": [
"VYua_NGvuS1eX_KPHCgOc"
],
"strokeSharpness": "sharp",
"boundElements": [],
"updated": 1641744014625,
"updated": 1731084295790,
"fontSize": 28,
"fontFamily": 1,
"text": "API",
@@ -57,138 +66,19 @@
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "API"
"originalText": "API",
"index": "a5",
"frameId": null,
"roundness": null,
"link": null,
"locked": false,
"autoResize": true,
"lineHeight": 1.2857142857142858
},
{
"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,
"version": 460,
"versionNonce": 1551291798,
"isDeleted": false,
"id": "QKBksUpSSix31GSKFO1uV",
"fillStyle": "hachure",
@@ -197,8 +87,8 @@
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 838.5920889678456,
"y": 456.87470960981165,
"x": 837.5920889678456,
"y": 456.8747096098117,
"strokeColor": "#03a9f4",
"backgroundColor": "#03a9f4",
"width": 417,
@@ -210,22 +100,19 @@
{
"id": "4o-d8ZzuqEpB7ROBAyReL",
"type": "text"
},
{
"id": "4o-d8ZzuqEpB7ROBAyReL",
"type": "text"
},
{
"type": "text",
"id": "4o-d8ZzuqEpB7ROBAyReL"
}
],
"updated": 1641744014625
"updated": 1731084298697,
"index": "a6",
"frameId": null,
"roundness": null,
"link": null,
"locked": false
},
{
"type": "text",
"version": 258,
"versionNonce": 347014152,
"version": 263,
"versionNonce": 1011157002,
"isDeleted": false,
"id": "4o-d8ZzuqEpB7ROBAyReL",
"fillStyle": "cross-hatch",
@@ -234,8 +121,8 @@
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 843.4670889678456,
"y": 469.29778653288855,
"x": 842.4670889678456,
"y": 469.2977865328886,
"strokeColor": "#343a40",
"backgroundColor": "#03a9f4",
"width": 407,
@@ -244,7 +131,7 @@
"groupIds": [],
"strokeSharpness": "sharp",
"boundElements": [],
"updated": 1641743551019,
"updated": 1731084298697,
"fontSize": 28,
"fontFamily": 1,
"text": "Embeddings",
@@ -252,11 +139,251 @@
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "QKBksUpSSix31GSKFO1uV",
"originalText": "Embeddings"
"originalText": "Embeddings",
"index": "a7",
"frameId": null,
"roundness": null,
"link": null,
"locked": false,
"autoResize": true,
"lineHeight": 1.2857142857142858
},
{
"type": "rectangle",
"version": 847,
"versionNonce": 266827407,
"isDeleted": false,
"id": "uFbzRXgEesWgll3llORrW",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 969.4670889678455,
"y": 387.5069211482732,
"strokeColor": "#00e676",
"backgroundColor": "#00e676",
"width": 135,
"height": 60.846153846153825,
"seed": 531948552,
"groupIds": [
"DlS9eiqyrIHp45FmS35GN"
],
"strokeSharpness": "sharp",
"boundElements": [
{
"type": "text",
"id": "Ctud-Ap642NinH0-64fKT"
}
],
"updated": 1731149308913,
"index": "a8",
"frameId": null,
"roundness": null,
"link": null,
"locked": false
},
{
"type": "text",
"version": 617,
"versionNonce": 1566326241,
"isDeleted": false,
"id": "Ctud-Ap642NinH0-64fKT",
"fillStyle": "cross-hatch",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 988.8004223011789,
"y": 399.9299980713501,
"strokeColor": "#000000",
"backgroundColor": "#03a9f4",
"width": 96.33333333333333,
"height": 36,
"seed": 720254072,
"groupIds": [
"DlS9eiqyrIHp45FmS35GN"
],
"strokeSharpness": "sharp",
"boundElements": [],
"updated": 1731149308913,
"fontSize": 28,
"fontFamily": 1,
"text": "Pipeline",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "uFbzRXgEesWgll3llORrW",
"originalText": "Pipeline",
"index": "a9",
"frameId": null,
"roundness": null,
"link": null,
"locked": false,
"autoResize": true,
"lineHeight": 1.2857142857142858
},
{
"type": "rectangle",
"version": 827,
"versionNonce": 1640467681,
"isDeleted": false,
"id": "_zQO_kyS5Pvq1zDhEn9hv",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1111.4863197370764,
"y": 388.1766044061918,
"strokeColor": "#ffeb3b",
"backgroundColor": "#ffeb3b",
"width": 141,
"height": 59.76470588235287,
"seed": 1988829960,
"groupIds": [
"DlS9eiqyrIHp45FmS35GN"
],
"strokeSharpness": "sharp",
"boundElements": [
{
"id": "tL_gw7MpliV1bDFJp8Cql",
"type": "text"
}
],
"updated": 1731149323000,
"index": "aA",
"frameId": null,
"roundness": null,
"link": null,
"locked": false
},
{
"type": "text",
"version": 617,
"versionNonce": 1776634049,
"isDeleted": false,
"id": "tL_gw7MpliV1bDFJp8Cql",
"fillStyle": "cross-hatch",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1122.7113197370763,
"y": 400.0589573473683,
"strokeColor": "#000000",
"backgroundColor": "#03a9f4",
"width": 118.55,
"height": 36,
"seed": 274132856,
"groupIds": [
"DlS9eiqyrIHp45FmS35GN"
],
"strokeSharpness": "sharp",
"boundElements": [],
"updated": 1731149323001,
"fontSize": 28,
"fontFamily": 1,
"text": "Workflow",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "_zQO_kyS5Pvq1zDhEn9hv",
"originalText": "Workflow",
"index": "aB",
"frameId": null,
"roundness": null,
"link": null,
"locked": false,
"autoResize": true,
"lineHeight": 1.2857142857142858
},
{
"type": "rectangle",
"version": 910,
"versionNonce": 391148577,
"isDeleted": false,
"id": "STAkXjIBdAZgXMIKZfGnx",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 839.6978581986145,
"y": 387.38672884058093,
"strokeColor": "#9775fa",
"backgroundColor": "#9775fa",
"width": 121,
"height": 60.846153846153825,
"seed": 362222090,
"groupIds": [
"DlS9eiqyrIHp45FmS35GN"
],
"strokeSharpness": "sharp",
"boundElements": [
{
"type": "text",
"id": "1iyFs-1PG5afe6QKq1s34"
}
],
"updated": 1731149289560,
"index": "aC",
"frameId": null,
"roundness": null,
"link": null,
"locked": false
},
{
"type": "text",
"version": 690,
"versionNonce": 456727151,
"isDeleted": false,
"id": "1iyFs-1PG5afe6QKq1s34",
"fillStyle": "cross-hatch",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 861.8895238480286,
"y": 399.80980576365783,
"strokeColor": "#1e1e1e",
"backgroundColor": "#03a9f4",
"width": 76.61666870117188,
"height": 36,
"seed": 565985482,
"groupIds": [
"DlS9eiqyrIHp45FmS35GN"
],
"strokeSharpness": "sharp",
"boundElements": [],
"updated": 1731149289560,
"fontSize": 28,
"fontFamily": 1,
"text": "Agent",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "STAkXjIBdAZgXMIKZfGnx",
"originalText": "Agent",
"index": "aD",
"frameId": null,
"roundness": null,
"link": null,
"locked": false,
"autoResize": true,
"lineHeight": 1.2857142857142858
}
],
"appState": {
"gridSize": null,
"gridSize": 20,
"gridStep": 5,
"gridModeEnabled": false,
"viewBackgroundColor": "#ffffff"
},
"files": {}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 237 KiB

After

Width:  |  Height:  |  Size: 437 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 275 KiB

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 273 KiB

+26 -28
View File
@@ -4,59 +4,57 @@
<img src="https://raw.githubusercontent.com/neuml/txtai/master/logo.png"/>
</p>
<h3 align="center">
<p>Build AI-powered semantic search applications</p>
</h3>
<p align="center">
<b>All-in-one AI framework</b>
</p>
<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/releases">
<img src="https://img.shields.io/github/release-date/neuml/txtai.svg?style=flat&color=blue" alt="GitHub Release Date"/>
<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://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 href="https://join.slack.com/t/txtai/shared_invite/zt-37c1zfijp-Y57wMty6YOx_hyIHEQvQJA">
<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/coveralls/github/neuml/txtai" alt="Coverage Status">
<img src="https://img.shields.io/coverallsCoverage/github/neuml/txtai" alt="Coverage Status">
</a>
</p>
-------------------------------------------------------------------------------------------------------------------------------------------------------
txtai is an all-in-one AI framework for semantic search, LLM orchestration and language model workflows.
txtai executes machine-learning workflows to transform data and build AI-powered semantic search applications.
![architecture](images/architecture.png#gh-light-mode-only)
![architecture](images/architecture-dark.png#gh-dark-mode-only)
![demo](https://raw.githubusercontent.com/neuml/txtai/master/demo.gif)
The key component of txtai is an embeddings database, which is a union of vector indexes (sparse and dense), graph networks and relational databases.
Traditional search systems use keywords to find data. Semantic search applications have an understanding of natural language and identify results that have the same meaning, not necessarily the same keywords.
This foundation enables vector search and/or serves as a powerful knowledge source for large language model (LLM) applications.
Backed by state-of-the-art machine learning models, data is transformed into vector representations for search (also known as embeddings). Innovation is happening at a rapid pace, models can understand concepts in documents, audio, images and more.
Build autonomous agents, retrieval augmented generation (RAG) processes, multi-model workflows and more.
Summary of txtai features:
- 🔎 Large-scale similarity search with multiple index backends ([Faiss](https://github.com/facebookresearch/faiss), [Annoy](https://github.com/spotify/annoy), [Hnswlib](https://github.com/nmslib/hnswlib))
- 📄 Create embeddings for text snippets, documents, audio, images and video. Supports transformers and word vectors.
- 💡 Machine-learning pipelines to run extractive question-answering, zero-shot labeling, transcription, translation, summarization and text extraction
- ↪️️ Workflows that join pipelines together to aggregate business logic. txtai processes can be microservices or full-fledged indexing workflows.
- 🔗 API bindings 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)
- ☁️ Cloud-native architecture that scales out with container orchestration systems (e.g. Kubernetes)
- 🔎 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.
- 🤖 Agents that intelligently connect embeddings, pipelines, workflows and other agents together to autonomously solve complex problems
- ⚙️ Web and Model Context Protocol (MCP) APIs. 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).
- 🔋 Batteries included with defaults to get up and running fast
- ☁️ Run local or scale out with container orchestration
Applications range from similarity search to complex NLP-driven data extractions to generate structured databases. The following applications are powered by txtai.
txtai is built with Python 3.11+, [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.
![apps](https://raw.githubusercontent.com/neuml/txtai/master/apps.jpg)
!!! note
| Application | Description |
|:----------|:-------------|
| [paperai](https://github.com/neuml/paperai) | AI-powered literature discovery and review engine for medical/scientific papers |
| [tldrstory](https://github.com/neuml/tldrstory) | AI-powered understanding of headlines and story text |
| [neuspo](https://neuspo.com) | Fact-driven, real-time sports event and news site |
| [codequestion](https://github.com/neuml/codequestion) | Ask coding questions directly from the terminal |
[NeuML](https://neuml.com) is the company behind txtai and we provide AI consulting services around our stack. [Schedule a meeting](https://cal.com/neuml/intro) or [send a message](mailto:[email protected]) to learn more.
txtai is built with Python 3.7+, [Hugging Face Transformers](https://github.com/huggingface/transformers), [Sentence Transformers](https://github.com/UKPLab/sentence-transformers) and [FastAPI](https://github.com/tiangolo/fastapi)
We're also building an easy and secure way to run hosted txtai applications with [txtai.cloud](https://txtai.cloud).
+98 -11
View File
@@ -5,23 +5,35 @@
The easiest way to install is via pip and PyPI
pip install txtai
```
pip install txtai
```
Python 3.7+ is supported. Using a Python [virtual environment](https://docs.python.org/3/library/venv.html) is recommended.
Python 3.11+ is supported. Using a Python [virtual environment](https://docs.python.org/3/library/venv.html) is recommended.
## Optional dependencies
txtai has the following optional dependencies that can be installed as extras. The patterns below are supported
in setup.py install_requires sections.
_Note: Extras are provided for convenience. Alternatively, individual packages can be installed to limit dependencies._
### All
Install all dependencies (mirrors txtai < 3.2)
Install all dependencies.
```
pip install txtai[all]
```
### ANN
Additional ANN backends.
```
pip install txtai[ann]
```
### API
Serve txtai via a web API.
@@ -38,17 +50,33 @@ Interface with cloud compute.
pip install txtai[cloud]
```
### Console
Command line index query console.
```
pip install txtai[console]
```
### Database
Additional content storage options
Additional content storage options.
```
pip install txtai[database]
```
### Graph
Topic modeling, data connectivity and network analysis.
```
pip install txtai[graph]
```
### Model
Additional non-standard models
Additional non-standard models.
```
pip install txtai[model]
@@ -62,12 +90,22 @@ All pipelines - default install comes with most common pipelines.
pip install txtai[pipeline]
```
### Similarity
More granular extras are available for pipeline categories: `pipeline-audio`, `pipeline-data`, `pipeline-image`, `pipeline-llm`, `pipeline-text`, and `pipeline-train`.
Word vectors, support for sentence-transformers models not on the HF Hub and additional ANN libraries.
### Scoring
Additional scoring methods.
```
pip install txtai[similarity]
pip install txtai[scoring]
```
### Vectors
Additional vector methods.
```
pip install txtai[vectors]
```
### Workflow
@@ -78,6 +116,8 @@ All workflow tasks - default install comes with most common workflow tasks.
pip install txtai[workflow]
```
### Combining dependencies
Multiple dependencies can be specified at the same time.
```
@@ -90,21 +130,68 @@ Additional environment specific prerequisites are below.
### Linux
Optional audio transcription requires a [system library to be installed](https://github.com/bastibe/python-soundfile#installation)
The AudioStream and Microphone pipelines require the [PortAudio](https://python-sounddevice.readthedocs.io/en/0.5.0/installation.html) system library.
The Transcription pipeline requires the [SoundFile](https://github.com/bastibe/python-soundfile#installation) system library.
The LiteRT LLM pipeline requires libegl1, libgles2 and libvulkan1.
### macOS
Run `brew install libomp` see [this link](https://github.com/kyamagu/faiss-wheels#prerequisite)
Older versions of Faiss have a runtime dependency on `libomp` for macOS. Run `brew install libomp` in this case.
The AudioStream and Microphone pipelines require the [PortAudio](https://python-sounddevice.readthedocs.io/en/0.5.0/installation.html) system library. Run `brew install portaudio`.
### Windows
Optional dependencies require [C++ Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/)
The [txtai build workflow](https://github.com/neuml/txtai/blob/master/.github/workflows/build.yml) occasionally has work arounds for other known but temporary dependency issues. The [FAQ](../faq) also has a list of common problems, including common installation issues.
## CPU-only
The default install adds PyTorch with GPU support. There are a number of dependencies that come with that. When running in a CPU-only environment, the CPU-only PyTorch package can be installed with txtai as follows.
```
pip install txtai torch==[version]+cpu \
-f https://download.pytorch.org/whl/torch
```
Where `[version]` is the version of PyTorch (such as 2.4.1). The [txtai-cpu](https://hub.docker.com/r/neuml/txtai-cpu) image on Docker Hub uses this method to reduce the image size.
## Install from source
txtai can also be installed directly from GitHub to access the latest, unreleased features.
pip install git+https://github.com/neuml/txtai
```
pip install git+https://github.com/neuml/txtai
```
Extras can be installed from GitHub by adding `#egg=txtai[<name-of-extra>]` to the end of the above URL.
## Conda
A [community-supported txtai package](https://anaconda.org/conda-forge/txtai) is available via conda-forge.
```
conda install -c conda-forge txtai
```
## Minimal install
A lightweight zero dependency minimal install package is available. This is helpful if the default libraries are too heavy or there are no plans to use them.
All the same extras mentioned above are available in this version of the package.
```
# Lightweight minimal install
pip install txtai_minimal
# Same as standard `txtai` install
pip install txtai_minimal[default]
```
Note that in order to use the `Embeddings` or `LLM` interface without `torch` requires either `llama.cpp`, `litellm` or `litert`.
## Run with containers

Some files were not shown because too many files have changed in this diff Show More