Compare commits

...
1264 Commits
Author SHA1 Message Date
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
davidmezzetti 2bd3bf83fd Update documentation 2022-03-09 18:19:08 -05:00
davidmezzetti b0eca57483 Add notebook links 2022-03-09 08:08:12 -05:00
davidmezzetti b4b8497aae Update documentation to use Application instances vs API instances as much as possible 2022-03-09 07:36:23 -05:00
davidmezzetti f4b194a68b Add notebook for near-duplicate image detection, closes #244 2022-03-09 07:35:53 -05:00
davidmezzetti bfbf46ee11 Add notebook for Embeddings SQL functions, closes #243 2022-03-09 07:35:28 -05:00
davidmezzetti acc4a99bf9 Change return method 2022-03-09 07:30:49 -05:00
davidmezzetti 289e9af849 Show errors with user-defined sqlite3 functions #241 2022-03-08 20:03:56 -05:00
davidmezzetti c402b129d9 Update comment 2022-03-08 16:02:36 -05:00
davidmezzetti 26e5fb2e4a Add optional function configuration logic #241 2022-03-08 15:57:23 -05:00
davidmezzetti dda277785a Fix issue with parsing multiline SQL statements, closes #242 2022-03-08 15:54:50 -05:00
davidmezzetti 7a4f6775d5 Add support for custom SQL functions in embeddings queries, closes #241 2022-03-08 14:30:57 -05:00
davidmezzetti fe458175d6 Update documentation 2022-03-07 11:35:11 -05:00
davidmezzetti 1d41192b44 Add documentation for image hash pipeline #240 2022-03-07 11:05:33 -05:00
davidmezzetti b4ab376a5e Update comment 2022-03-07 10:48:18 -05:00
davidmezzetti 39d54a1d63 Fix build dependency errors 2022-03-07 10:46:15 -05:00
davidmezzetti c39bfad8e3 Add Image Hash pipeline, closes #240 2022-03-07 10:01:21 -05:00
davidmezzetti 6816a63adf Update transcription pipeline to use AutoModelForCTC, closes #238 2022-03-03 14:04:58 -05:00
davidmezzetti 728e3ddb23 Update documentation 2022-03-03 10:52:41 -05:00
davidmezzetti ad4090252d Update documentation 2022-03-02 20:46:28 -05:00
davidmezzetti 756372dd13 Update documentat 2022-03-02 20:41:33 -05:00
davidmezzetti 26c0634ae4 Add anatomy of a txtai index notebook, closes #237 2022-03-02 10:32:16 -05:00
davidmezzetti ae4ef9b744 Update articles 2022-03-01 17:19:26 -05:00
davidmezzetti cc7a38eb2c Simplify #236 2022-03-01 14:36:14 -05:00
davidmezzetti 029210c3c0 Add last update field to index metadata, closes #236 2022-03-01 14:33:12 -05:00
davidmezzetti 378fb4e2fa Raise an error when attempting to update a read-only index #235 2022-03-01 13:59:27 -05:00
davidmezzetti dd204b621f Update documentation 2022-03-01 13:12:10 -05:00
davidmezzetti 988d3d3fe4 Ensure limit always set in embeddings search/batchsearch, closes #234 2022-03-01 12:03:50 -05:00
davidmezzetti 04d5b1d14e Move limit method to API, default limit in Application #233 2022-03-01 11:59:26 -05:00
davidmezzetti 43c268a6aa Update comment 2022-03-01 10:29:51 -05:00
davidmezzetti b6ee189e4e Refactor API instance into separate app package, closes #233 2022-03-01 10:28:37 -05:00
davidmezzetti 47b6b07db3 Rename SQLException to SQLError, closes #232 2022-03-01 09:03:55 -05:00
davidmezzetti e62e4a2abe Bump version 2022-02-27 21:12:54 -05:00
davidmezzetti 5167422436 Fix mislabeled API config definition, closes #231 2022-02-27 19:48:50 -05:00
davidmezzetti dbaa27acac Update documentation 2022-02-25 12:10:36 -05:00
davidmezzetti 367076dcae Bump version 2022-02-24 08:05:56 -05:00
davidmezzetti 6d12b5ebca Update documentation 2022-02-23 22:04:30 -05:00
davidmezzetti fee93fdfbd Add flag to disable loading index data in API, closes #230 2022-02-23 15:32:13 -05:00
davidmezzetti 41e93f097c Add support for loading/storing embedding indexes on cloud storage, closes #229 2022-02-23 15:31:47 -05:00
davidmezzetti cc2a5b78fd Update AWS workflow.py script #228 2022-02-22 07:22:14 -05:00
davidmezzetti f610745ab2 Add docker configuration for AWS Lambda, closes #228 2022-02-21 11:25:47 -05:00
davidmezzetti 3a34e9bb0b Update documentation 2022-02-15 07:48:14 -05:00
davidmezzetti c55667f9df Update documentation 2022-02-15 07:32:09 -05:00
davidmezzetti 0f25c68393 Update documentation 2022-02-14 15:18:30 -05:00
davidmezzetti 3391a83d86 Update documentation 2022-02-14 14:57:46 -05:00
davidmezzetti 44a713df8a Add default and custom docker configurations, closes #226 2022-02-14 14:40:24 -05:00
davidmezzetti 06e7448d3c Add workflow notifications notebook, closes #225 2022-02-10 13:39:00 -05:00
davidmezzetti 03b97cbc52 Update tests 2022-02-10 08:16:38 -05:00
davidmezzetti 0a1c5e7b4c Check for empty documents before indexing, closes #224 2022-02-10 08:16:19 -05:00
davidmezzetti fca12b5358 Add support for SQL concat operator, closes #223 2022-02-10 08:13:39 -05:00
davidmezzetti c3ad76f7e8 Ensure JSON is valid before indexing, closes #222 2022-02-10 08:11:26 -05:00
davidmezzetti b4a23d6519 Modify embeddings batch search return type when index is uninitialized, closes #221 2022-02-10 08:04:34 -05:00
davidmezzetti c9e13fa37c Modify embeddings batch search return type when index is uninitialized, closes #221 2022-02-10 08:03:18 -05:00
davidmezzetti ac9c5f39c8 Update comments 2022-02-09 07:35:10 -05:00
davidmezzetti 2f674581c0 Modify database decoder methods to check for None, closes #220 2022-02-09 07:10:04 -05:00
davidmezzetti f2c08308e0 Bump version 2022-02-03 08:38:27 -05:00
davidmezzetti 0770615f17 Reorder build steps 2022-02-03 06:24:20 -05:00
davidmezzetti 8186eada8b Documentation update 2022-02-02 22:33:10 -05:00
davidmezzetti 8e640483ed Add notebook for workflow scheduling, closes #218 2022-02-02 22:15:24 -05:00
davidmezzetti cbba20adb4 Add additional tests 2022-02-02 22:13:38 -05:00
davidmezzetti 52f6cb1657 Fix API search concurrency issue, closes #217 2022-02-02 16:42:56 -05:00
davidmezzetti f6b5c2f0fe Refactor check for uninitialized embeddings instance #212 2022-02-02 16:37:47 -05:00
davidmezzetti ef9b01b9d5 Update documentation 2022-02-01 22:14:03 -05:00
davidmezzetti e64ae63529 Add missing library 2022-02-01 21:54:16 -05:00
davidmezzetti 466f88aa79 Add console task, closes #215. Add export task, closes #216 2022-02-01 21:24:29 -05:00
davidmezzetti f6150e93f0 Catch exceptions during scheduled workflow runs #206 2022-02-01 21:21:54 -05:00
davidmezzetti ec59cce14b Fix issue when workflow task generates no output, closes #214 2022-02-01 21:20:46 -05:00
davidmezzetti 0066899150 Accept functions as workflow task actions in API, closes #213 2022-02-01 21:19:54 -05:00
davidmezzetti 5a2c447c23 Add workflow search task to API, closes #210. Add shorthand syntax for creating workflow tasks in API, closes #211 2022-02-01 21:18:53 -05:00
davidmezzetti e1818d2728 Add better error handling around unindexed embedding instances, closes #212 2022-02-01 21:17:23 -05:00
davidmezzetti c6ecf2cb3c Add documentation on local API instances, closes #209 2022-01-31 12:10:38 -05:00
davidmezzetti 4ef058c289 Add limit parameter to API search method, closes #208 2022-01-28 19:24:31 -05:00
davidmezzetti d44145d79f Update build timeout 2022-01-28 17:54:23 -05:00
davidmezzetti 0bf536a604 Update tests 2022-01-28 17:24:57 -05:00
davidmezzetti 07c2495952 Add test for API __del__ method 2022-01-28 16:33:47 -05:00
davidmezzetti 2e26103244 Update method signature 2022-01-28 16:10:11 -05:00
davidmezzetti b8cc67670d Makefile update to debug GitHub action issues 2022-01-28 15:48:45 -05:00
davidmezzetti 0f87c0712e Makefile update to debug GitHub action issues 2022-01-28 15:36:15 -05:00
davidmezzetti f7c2752219 Makefile update to debug GitHub action issues 2022-01-28 15:31:35 -05:00
davidmezzetti e6c43a98f3 Update build script 2022-01-28 14:53:44 -05:00
davidmezzetti d65e20e064 Add eager parameter for word vector models 2022-01-28 14:52:13 -05:00
davidmezzetti 60ddda914e Update fasteners version 2022-01-28 13:19:38 -05:00
davidmezzetti 0b53138c76 Revert unnecessary test changes 2022-01-28 11:52:30 -05:00
davidmezzetti eda1cabcdc Pin fasteners version in build workflow to workaround deadlocking issue for word vector unit tests 2022-01-28 11:26:53 -05:00
davidmezzetti 2bdfee9116 Update documentation 2022-01-28 09:21:55 -05:00
davidmezzetti 3ac6a5b332 Skip word vector embeddings test on macOS 2022-01-28 07:23:43 -05:00
davidmezzetti 9461d2813a Reduce number of vector process indexers for unit test 2022-01-27 22:57:01 -05:00
davidmezzetti 7a1a9039a8 Update documentation 2022-01-27 22:18:32 -05:00
davidmezzetti 13d620ebd6 Reduce number of vector process indexers for unit test 2022-01-27 19:04:49 -05:00
davidmezzetti d646ca70c8 Reduce number of vector process indexers for unit test 2022-01-27 18:51:13 -05:00
davidmezzetti b68d8736c4 Skip test for macOS 2022-01-27 18:12:59 -05:00
davidmezzetti d21d00acc5 Update tests to improve memory cleanup 2022-01-27 17:09:11 -05:00
davidmezzetti 615395b53d Add scheduled workflows to documentation, reorganize docs #206 2022-01-27 14:53:32 -05:00
davidmezzetti 2a4e47c797 Lazily create API ThreadPool #206 2022-01-27 12:31:09 -05:00
davidmezzetti 0162b5974c Add workflow scheduling, closes #206 2022-01-27 12:27:14 -05:00
davidmezzetti 1ff6217c1f Change default macOS build to 10.15 to workaround build hanging 2022-01-27 07:21:11 -05:00
davidmezzetti f3eb9cd11f Change default macOS build to 10.15 to workaround build hanging 2022-01-27 07:14:23 -05:00
davidmezzetti 3e2bf48478 Update documentation 2022-01-27 06:34:37 -05:00
davidmezzetti 9bb6db16a3 Update README 2022-01-26 14:57:21 -05:00
davidmezzetti 8ba533388b Add entity extraction pipeline notebook and documentation #203 2022-01-26 14:55:36 -05:00
davidmezzetti 2798ac7c91 Add join parameter to entity pipeline #203 2022-01-26 13:45:00 -05:00
davidmezzetti 8a46872365 Add flatten parameter to entity pipeline #203 2022-01-26 11:14:29 -05:00
davidmezzetti d5436d2f4f Check tokenizer attribute exists, closes #204 2022-01-26 09:12:14 -05:00
davidmezzetti 60240eeb58 Add article link 2022-01-26 09:01:39 -05:00
davidmezzetti e9f34cd850 Add entity extraction pipeline, closes #203 2022-01-25 14:18:25 -05:00
davidmezzetti c6a8b14992 Add links to txtai in all example notebooks, closes #202 2022-01-25 08:33:50 -05:00
davidmezzetti e318515501 Update notebook grammar 2022-01-23 07:30:31 -05:00
davidmezzetti dab10d0265 Update docs build 2022-01-22 06:29:54 -05:00
davidmezzetti d46dd24bfa Update docs build 2022-01-22 06:23:47 -05:00
davidmezzetti f92038abfd Update docs build 2022-01-22 06:21:22 -05:00
davidmezzetti b740362401 Add social preview for docs, closes #201 2022-01-22 06:08:35 -05:00
davidmezzetti 787085e6fe Reorder examples 2022-01-21 07:35:11 -05:00
davidmezzetti f8853f6af8 Documentation improvements, closes #200 2022-01-20 20:46:44 -05:00
davidmezzetti 07f6bc1abe Update comment 2022-01-20 20:46:20 -05:00
davidmezzetti 6afcd44af3 Update documentation links 2022-01-18 11:15:02 -05:00
davidmezzetti dbb7b269f0 Add comment 2022-01-17 21:26:50 -05:00
davidmezzetti 36ad8d3245 Add numbers to workflow tasks 2022-01-17 21:23:05 -05:00
davidmezzetti 8d51bf8b34 Pass index data to cache lookup method 2022-01-17 19:08:08 -05:00
davidmezzetti 16b3d9f064 Clear query session on export 2022-01-17 15:26:21 -05:00
davidmezzetti 60ef5e4bc1 Improve multi-user experience for workflow application, closes #198 2022-01-17 14:23:30 -05:00
davidmezzetti d069ec2f83 Default documentation theme using system preference, closes #197 2022-01-15 07:20:35 -05:00
davidmezzetti 0ce25cde16 Update documentation 2022-01-13 08:16:30 -05:00
davidmezzetti 7b9fa334c9 Update documentation links 2022-01-11 14:19:45 -05:00
davidmezzetti 9208194548 Update comment 2022-01-11 08:46:17 -05:00
davidmezzetti 0f5d3e7ad4 Bump version 2022-01-11 07:55:48 -05:00
davidmezzetti fa99458944 Update notebook links 2022-01-11 07:55:40 -05:00
davidmezzetti 841786bf6f Update documentation 2022-01-10 14:02:49 -05:00
davidmezzetti 61dbd7f4b8 Update documentation 2022-01-10 14:00:13 -05:00
davidmezzetti 6e9b194570 Update documentation 2022-01-10 13:47:46 -05:00
davidmezzetti ea8ec3a612 Update documentation 2022-01-10 11:16:29 -05:00
davidmezzetti bd73a3f8d9 Update documentation 2022-01-10 11:12:50 -05:00
davidmezzetti 709937dfee Raise error when API task action not found. Fix scoring key reference. 2022-01-10 11:12:26 -05:00
davidmezzetti e747c9a1d9 Update setup.py to filter gh-dark-mode-only images 2022-01-09 16:46:44 -05:00
davidmezzetti f07c64d95c Update documentation image 2022-01-09 14:57:29 -05:00
davidmezzetti 22f5dce8cd Update documentation images 2022-01-09 14:52:50 -05:00
davidmezzetti a34e27e776 Update documentation images 2022-01-09 14:41:58 -05:00
davidmezzetti 322a8e4e7d Update docs 2022-01-09 14:37:50 -05:00
davidmezzetti 6c10d2dfdb Update README 2022-01-09 14:34:32 -05:00
davidmezzetti de16640b40 Add graphics and illustrations to docs #196 2022-01-09 14:26:35 -05:00
davidmezzetti 66280ae339 Update documentation with 4.0 changes, closes #196 2022-01-06 15:58:34 -05:00
davidmezzetti e52a82b0d3 Update test to reduce duplication #195 2022-01-05 14:19:51 -05:00
davidmezzetti be1b020ed4 Derive and set ORT provider in OnnxModel and HFOnnx pipeline #195 2022-01-05 13:42:29 -05:00
davidmezzetti a454e99dd8 Add additional example to 4.0 notebook #188 2022-01-04 21:06:08 -05:00
davidmezzetti 9c2d57547c Update console application to automatically wrap text based on terminal width 2022-01-04 20:48:50 -05:00
davidmezzetti b25173a865 Modify file delete 2021-12-28 20:54:41 -05:00
davidmezzetti e83ee844c6 Modify file delete 2021-12-28 20:25:36 -05:00
davidmezzetti b43cdc1f43 Update notebook 2021-12-28 19:59:09 -05:00
davidmezzetti 7d5921060d Modify file delete 2021-12-28 19:58:57 -05:00
davidmezzetti 2ac7027fa2 Modify file delete 2021-12-28 19:31:54 -05:00
davidmezzetti 708fcaad72 Modify file delete 2021-12-28 19:05:32 -05:00
davidmezzetti 1e65a3b75e Add pre-computed vector support, closes #192 2021-12-28 18:16:58 -05:00
davidmezzetti 1b5a180221 Improve efficiency of vector transformations, closes #191 2021-12-28 18:16:10 -05:00
davidmezzetti 4b70388905 Change document/object inserts to only keep latest record, closes #193 2021-12-28 18:12:48 -05:00
davidmezzetti 9eec84711c Add notebook link to docs 2021-12-28 09:52:52 -05:00
davidmezzetti a7045d3cd6 Add 4.0 notebook #188 2021-12-28 09:49:11 -05:00
davidmezzetti a7d9f3f7e0 Add check before trying to create directory 2021-12-28 08:59:34 -05:00
davidmezzetti 4efe59e308 Rewrite reindex SQL function, closes #190 2021-12-27 21:05:46 -05:00
davidmezzetti cf0491e63a Cleanup notebooks 2021-12-27 18:46:08 -05:00
davidmezzetti e0adfdd319 Reduce notebook size 2021-12-27 18:42:55 -05:00
davidmezzetti a5a039d951 Refresh notebooks for 4.0, closes #188 2021-12-27 17:41:43 -05:00
davidmezzetti 7fe06052eb Modify embeddings index/upsert methods only consume input documents once, closes #189 2021-12-27 11:29:21 -05:00
davidmezzetti 01e228fc5c Add apps image to docs 2021-12-26 21:18:43 -05:00
davidmezzetti 5ff161f31f Add support for user defined column aliases and identifier/expression bracket clauses, closes #186 and closes #187 2021-12-26 20:05:24 -05:00
davidmezzetti a3542086b4 Close embeddings in tests 2021-12-23 08:14:26 -05:00
davidmezzetti 5f9a98b5b1 Add function parameter to embeddings reindex, closes #185 2021-12-23 07:11:39 -05:00
davidmezzetti 2dbe9cf6cd Aggregate partial query results when clustering, closes #184 2021-12-23 06:31:17 -05:00
davidmezzetti d53f1f5b10 Add test for models module 2021-12-22 07:35:47 -05:00
davidmezzetti 119306e911 Add object storage, closes #183 2021-12-22 06:46:08 -05:00
davidmezzetti b14d8769dd Update test method docs for consistency 2021-12-22 06:44:49 -05:00
davidmezzetti 04561aa549 Use protocol=4 for all pickle.dump calls to ensure compatibility with Python 3.7, closes #182 2021-12-21 06:46:42 -05:00
davidmezzetti 9ca3663989 Better default ANN parameters, closes #174 2021-12-20 15:04:06 -05:00
davidmezzetti eba43c2eee Add index metadata to embeddings config, closes #180 2021-12-20 15:03:09 -05:00
davidmezzetti f9cb32e037 Add __version__ attribute, closes #181 2021-12-20 15:02:22 -05:00
davidmezzetti 0b876d72e8 Add reindex method, closes #171 2021-12-19 16:30:26 -05:00
davidmezzetti d39629c1d7 Update test 2021-12-18 18:47:27 -05:00
davidmezzetti d15df0f3c9 Add close methods to database and embeddings, closes #173 2021-12-18 18:28:19 -05:00
davidmezzetti 79b4109aee Update test 2021-12-18 16:26:49 -05:00
davidmezzetti 48a223c341 Update test 2021-12-18 15:53:46 -05:00
davidmezzetti 305db67988 Update test 2021-12-18 15:48:39 -05:00
davidmezzetti 85b54eaf0c Update test 2021-12-18 14:34:53 -05:00
davidmezzetti f881c2fd7b Reset archive instance on index 2021-12-18 14:05:43 -05:00
davidmezzetti 600fd2e5ea Add index archive support, closes #172 2021-12-18 09:46:15 -05:00
davidmezzetti d9ffcf6e5c Modify variable name 2021-12-18 08:31:05 -05:00
davidmezzetti 07f6b537e6 Update workflow example to support full document content, closes #179 2021-12-17 10:58:37 -05:00
davidmezzetti 0ea87a849a Set default columns when no select clause provided. Improve column selection process. 2021-12-17 10:56:01 -05:00
davidmezzetti 4fa2d2da45 Add test for tabular pipeline 2021-12-14 15:10:13 -05:00
davidmezzetti f84ed38c1b Consistently name embeddings id fields, closes #178 2021-12-14 14:34:05 -05:00
davidmezzetti 3f8adb2391 Add content option for tabular pipeline, closes #177 2021-12-14 14:28:29 -05:00
davidmezzetti 6aae0015a3 Update API to support embeddings + database search, closes #176 2021-12-14 14:21:02 -05:00
davidmezzetti ed95ce3c84 Update comments 2021-12-14 14:15:20 -05:00
davidmezzetti 424eeb80f6 Update comments 2021-12-14 14:13:01 -05:00
davidmezzetti cbd52eeee7 Update build script 2021-12-13 23:06:31 -05:00
davidmezzetti 365f2ca0a7 Require Python 3.7, closes #175 2021-12-13 22:57:37 -05:00
davidmezzetti 90e3edaaf5 Update test 2021-12-13 22:56:50 -05:00
davidmezzetti 787de6a648 Delete existing file when creating new SQLite db 2021-12-13 22:07:39 -05:00
davidmezzetti 345d092fab Initial version of storing document content (closes #168), inserting dictionaries (closes #169) and SQL query support (closes #170) 2021-12-13 19:50:55 -05:00
davidmezzetti 4ac7aa26ea Update reducer to be consistent with embeddings patterns 2021-12-13 19:41:49 -05:00
davidmezzetti df72f43205 Update naming convention 2021-12-13 19:41:10 -05:00
davidmezzetti 7123356671 Update scoring tests 2021-12-13 19:40:40 -05:00
davidmezzetti 6dddc99142 Update documentation and method naming convention 2021-12-13 19:39:58 -05:00
davidmezzetti 9441fa85a0 Update scoring models to be consistent with embeddings patterns 2021-12-13 19:39:20 -05:00
davidmezzetti 214cabdb6e Documentation update 2021-12-13 19:38:35 -05:00
davidmezzetti 807d5349f3 Ensure HNSW always returns int ids 2021-12-13 19:38:15 -05:00
davidmezzetti a73d914072 Bump version to 4.0.0 2021-12-13 19:37:29 -05:00
davidmezzetti 1659c856e9 Add tensor workflow notebook, closes #167 2021-12-06 18:53:14 -05:00
davidmezzetti fe907ccead Wait on pools to terminate 2021-12-05 19:08:52 -05:00
davidmezzetti 10ebd99cb4 Documentation update 2021-12-03 07:53:49 -05:00
davidmezzetti 0c1de34504 Add site description to docs 2021-12-02 07:25:38 -05:00
davidmezzetti 944e2afe49 Documentation update 2021-11-29 19:48:47 -05:00
davidmezzetti eab2c9d02b Skip tests for Windows 2021-11-29 19:43:16 -05:00
davidmezzetti 2dd850426f Skip tests for macOS 2021-11-29 19:10:38 -05:00
davidmezzetti 3454200674 Verify unit tests still need to be skipped 2021-11-29 18:41:30 -05:00
davidmezzetti ffb3713114 Process task actions concurrently, closes #164 2021-11-29 18:29:30 -05:00
davidmezzetti cf20ea49b6 Update comments 2021-11-29 18:29:07 -05:00
davidmezzetti 4b0b45468f Increase test coverage 2021-11-29 18:18:44 -05:00
davidmezzetti cbd6849697 Increase test coverage 2021-11-27 22:15:12 -05:00
davidmezzetti 972254c7fc Replace imports with logic to load modules from sys.modules 2021-11-27 21:37:50 -05:00
davidmezzetti 1ca5ebc522 Make adding pipelines to API easier, closes #163 2021-11-27 19:40:13 -05:00
davidmezzetti dd29b3636c Read YAML config from file if path provided, closes #162 2021-11-27 16:41:57 -05:00
davidmezzetti dbdb68144b Add objects and caption pipelines to API, closes #161 2021-11-27 15:30:46 -05:00
davidmezzetti 6f419f0138 Update code to address pylint warnings 2021-11-27 10:00:06 -05:00
davidmezzetti c72dc0bed2 Update pre-commit config 2021-11-27 07:23:48 -05:00
davidmezzetti 3a700b0862 Fix build to work with coverage.py 6.2 2021-11-27 07:14:02 -05:00
davidmezzetti ac38ea5127 Update build.yml 2021-11-26 21:52:36 -05:00
davidmezzetti 063857915c Update build.yml 2021-11-26 21:41:45 -05:00
davidmezzetti 752e681b52 Add thread lock around API write calls, closes #160 2021-11-26 20:51:43 -05:00
davidmezzetti 97f7976b82 Improve workflow processing efficiency for tensors, closes #158, closes #159 2021-11-26 19:05:43 -05:00
davidmezzetti b606b18e1a Update docs directories to be consistent with src 2021-11-23 08:09:08 -05:00
davidmezzetti 08eadace47 Bump version 2021-11-22 21:04:57 -05:00
davidmezzetti 01b4ca0fab Update documentation 2021-11-22 20:04:11 -05:00
davidmezzetti d78278317c Update documentation, closes #156 2021-11-22 19:49:43 -05:00
davidmezzetti 6f60d62ab6 Rename pipeline.segment to pipeline.data 2021-11-22 19:45:42 -05:00
davidmezzetti 2151b65303 Ignore all .coverage.* files 2021-11-22 17:36:24 -05:00
davidmezzetti 03eaaca9e2 Remove unnecessary files 2021-11-22 17:31:30 -05:00
davidmezzetti f200f2c2d8 Fixed regression with WorkflowTask 2021-11-22 16:55:30 -05:00
davidmezzetti 82fd799139 Replace leading file:// urls in FileTask 2021-11-22 14:57:11 -05:00
davidmezzetti d645382501 Add flatten parameter to objects pipeline 2021-11-22 14:56:39 -05:00
davidmezzetti dcf70f3732 Update notebook 2021-11-22 14:31:40 -05:00
davidmezzetti 361371903c Add new workflow functionality, closes #155 2021-11-22 14:13:15 -05:00
davidmezzetti f3ba6487c6 Update pipeline imports 2021-11-22 14:01:41 -05:00
davidmezzetti 01b73fea9d Update sentence-transformers dependencies 2021-11-22 14:00:31 -05:00
davidmezzetti a10f688b46 Add parameter to flatten label outputs, closes #153 2021-11-22 13:59:43 -05:00
davidmezzetti 434c65f237 Add no-op pipeline, closes #152 2021-11-22 13:57:15 -05:00
davidmezzetti 1b80f7674f Update optional package tests to better simulate missing packages, closes #154 2021-11-22 13:55:02 -05:00
davidmezzetti d5fc5c31e4 Add workers parameter to objects pipeline 2021-11-18 22:24:30 -05:00
davidmezzetti 8551f2f61f Add dependency 2021-11-18 21:53:50 -05:00
davidmezzetti da67b22c04 Add retrieval task, closes #150 2021-11-18 21:29:46 -05:00
davidmezzetti a6a61bd4a8 Code cleanup 2021-11-18 21:28:52 -05:00
davidmezzetti 59f6abe492 Handle file urls more consistently, closes #151 2021-11-18 21:26:55 -05:00
davidmezzetti 836080b69a Add image caption pipeline, closes #149 2021-11-18 21:24:01 -05:00
davidmezzetti a437f0bbdb Add object detection pipeline, closes #148 2021-11-18 21:23:11 -05:00
davidmezzetti 538c052de2 Update test 2021-11-18 16:07:13 -05:00
davidmezzetti e6e9ec6858 Reorganize pipeline package, closes #147 2021-11-18 15:49:59 -05:00
davidmezzetti d9b4afaa7e Fix bug with xmltodict not being wrapped in a conditional import, closes #146 2021-11-15 13:31:48 -05:00
davidmezzetti b085b32542 Add fallback mode for textractor, closes #145 2021-11-15 13:31:15 -05:00
davidmezzetti e492c7028d Add article summarization example, closes #144 2021-11-15 10:23:23 -05:00
davidmezzetti a5f1f9af47 Update workflow example application 2021-11-14 08:12:24 -05:00
David Mezzetti cd6f91b1b6 Merge pull request #141 from 0206pdh/master
Create README_ko.md
2021-11-14 07:47:56 -05:00
davidmezzetti 8a1636b8c9 Update notebook to show how to run workflow yaml in python 2021-11-12 11:41:20 -05:00
0206pdh c25da68c47 Rename README-Korean.md to README_ko.md
I changed the name of README.md file translated into Korean according to your request. Please check it again.
2021-11-13 00:41:13 +09:00
0206pdh 5f2b4a0f92 Create README-Korean.md
README-Korean.md is README.md file translated into Korean.
If there are any mistakes or requirements in this pull request process, please let me know. I'll fix it as soon as possible.
Thank you!!
2021-11-12 13:23:59 +09:00
davidmezzetti 702f7726f6 Update workflow example application 2021-11-11 17:11:40 -05:00
davidmezzetti f3e5e3fa3e Update workflow example application 2021-11-11 16:37:38 -05:00
davidmezzetti 6e12623ad3 Update workflow example application 2021-11-11 15:45:51 -05:00
davidmezzetti 0d8f55c8ff Update workflow application to support loading existing workflow configurations 2021-11-11 14:08:57 -05:00
davidmezzetti 733cab6b19 Update workflow example application 2021-11-10 15:40:10 -05:00
davidmezzetti 1678b45bd6 Update example applications for consistency. Add links to applications hosted on hf spaces. Closes #140 2021-11-10 14:40:33 -05:00
davidmezzetti f8fc297f9e Add further reading section to documentation 2021-11-10 13:21:03 -05:00
davidmezzetti 5931a4184b Add links to hf spaces applications 2021-11-10 12:58:24 -05:00
davidmezzetti 4cdf475600 Add links to hf spaces applications 2021-11-10 12:57:50 -05:00
davidmezzetti b0f80ff896 Add links to hf spaces applications 2021-11-10 12:56:34 -05:00
davidmezzetti 8ecf8279b5 Update workflow example app 2021-11-09 11:45:20 -05:00
davidmezzetti c5f2ba2898 Bump version 2021-11-08 13:24:33 -05:00
davidmezzetti b76f27bceb Rename extractor pipeline topn parameter to context for clarity #137 2021-11-08 12:22:57 -05:00
davidmezzetti 2ff7440089 Change comparison to be case insensitive 2021-11-08 12:00:12 -05:00
davidmezzetti 593c3fdd1c Add service task and tabular pipeline. Fix bug with spawning API. #130 2021-11-08 11:59:28 -05:00
davidmezzetti 7cd41244b1 Use new transformers auto model register methods, closes #128 2021-11-07 09:17:15 -05:00
davidmezzetti 4a1832c708 Add topn context matches option to extractor pipeline, closes #137 2021-11-07 07:32:06 -05:00
davidmezzetti fd5e450cfb Add notebook for tabular pipeline, closes #136 2021-11-03 10:28:06 -04:00
davidmezzetti 29533c95e8 Add tabular pipeline to API and API tests, #134 2021-11-03 09:17:57 -04:00
davidmezzetti 68afaa694e Update documentation 2021-11-02 16:11:25 -04:00
davidmezzetti 83793a0cc6 Update documentation 2021-11-02 14:26:10 -04:00
davidmezzetti 02bc0b22e9 Add documentation for tabular pipeline 2021-11-02 14:18:09 -04:00
davidmezzetti b8d207500c Update test 2021-11-02 13:54:36 -04:00
davidmezzetti f633071926 Remove Excel support from tabular pipeline given build/platform issues introduced 2021-11-02 13:50:21 -04:00
davidmezzetti c2afa9544a Update build script 2021-11-02 13:35:03 -04:00
davidmezzetti 0ed184c719 Update build script 2021-11-02 13:31:14 -04:00
davidmezzetti c46c527c80 Update optional dependency 2021-11-02 12:33:06 -04:00
davidmezzetti d035dddc04 Add optional dependency 2021-11-02 12:11:12 -04:00
davidmezzetti 5bba51579f Update test data path 2021-11-02 11:41:16 -04:00
davidmezzetti e323a96b27 Enhance ServiceTask to support additional use cases, closes #135 2021-11-02 11:26:53 -04:00
davidmezzetti 809151c3cc Add tabular pipeline, closes #134 2021-11-02 11:26:09 -04:00
davidmezzetti 1d3d933e01 Update workflow example application to support running inline API server and exporting API configuration, closes #130 2021-10-26 14:05:51 -04:00
davidmezzetti c444d1715d Add post workflow actions to API, closes #129 2021-10-26 14:02:46 -04:00
davidmezzetti c837c3ab07 Update workflow example remove deprecated code 2021-10-21 14:49:00 -04:00
davidmezzetti 0dee5e6062 Bump version 2021-10-18 08:19:59 -04:00
davidmezzetti 6907aaac68 Add notebook for MLOnnx pipeline, closes #127 2021-10-14 07:35:55 -04:00
davidmezzetti 2dc6b055bc Update test 2021-10-13 12:22:27 -04:00
davidmezzetti 3dfcb522ca Create model registry, closes #126 2021-10-13 12:07:37 -04:00
davidmezzetti 7b96a7d244 Add check for method == pooling, closes #125 2021-10-13 12:04:24 -04:00
davidmezzetti c838569d4b Add task parameter to prevent hardcoding model name in export, #124 2021-10-13 12:01:54 -04:00
davidmezzetti 8cbbf8d76d Add ONNX export pipeline backed by onnxmltools library, closes #124 2021-10-12 19:15:33 -04:00
davidmezzetti 04d811fa9b Skip applying a classification function when multilabel=None, closes #123 2021-10-12 18:14:20 -04:00
davidmezzetti 310477749f Fix package import in example notebook 2021-10-11 10:32:25 -04:00
David Mezzetti d805734286 Merge pull request #122 from hi019/master
Fix incorrect import in Notebooks
2021-10-11 10:22:41 -04:00
hi019 1fb3849127 Update Extractor import in Notebooks 2021-10-10 13:15:38 -04:00
davidmezzetti 378bcd4175 Infer configuration for ONNX models 2021-10-09 09:42:17 -04:00
davidmezzetti d91979d0c5 Bump version 2021-10-07 13:26:13 -04:00
davidmezzetti 71783c2257 Batch extractor context queries, closes #120 2021-10-07 11:51:43 -04:00
davidmezzetti 5ca9e761ad Use latest mkdocs version 2021-10-07 08:39:57 -04:00
davidmezzetti 5f4c5fa637 Revert labels list workaround in #118, fixed in transformers 4.11.3 2021-10-07 08:24:35 -04:00
davidmezzetti 65f2b419a0 Update docs 2021-10-05 12:15:42 -04:00
davidmezzetti 325498cc54 Set gpu=True for questions pipeline to be consistent with other pipelines 2021-10-05 10:15:42 -04:00
davidmezzetti aefb12e1e1 Add support for similarity backed context in extractor pipelines, closes #119 2021-10-05 10:02:42 -04:00
davidmezzetti 8aa0daaf94 Disable default parallel processing for pipelines #118 2021-10-02 19:07:58 -04:00
davidmezzetti bbe138f586 Skip additional test on Windows 2021-10-02 17:09:39 -04:00
davidmezzetti cc3a765a2b Skip testSummaryBatch with Windows tests 2021-10-02 16:46:39 -04:00
davidmezzetti fbfbb7cfb9 Use specific mkdocs-material version 2021-10-02 14:51:55 -04:00
davidmezzetti b6ee9afd37 Add mkdocs dependency 2021-10-02 14:43:11 -04:00
davidmezzetti 705910cc0f Fix issues with transformers 4.11.2, closes #118 2021-10-02 14:18:25 -04:00
davidmezzetti 6087b542d8 Add notebook using extractive qa to build structured data, closes #117 2021-09-24 12:52:12 -04:00
davidmezzetti 5b86e422e0 Update labels pipeline to filter text classification output, closes #116 2021-09-23 10:58:12 -04:00
davidmezzetti f941f2cb2c Documentation update 2021-09-21 15:19:41 -04:00
davidmezzetti e5f1a6368d Add why txtai documentation 2021-09-21 14:58:12 -04:00
davidmezzetti 06179f3571 Bump version 2021-09-11 06:15:54 -04:00
davidmezzetti 652a494e4a Remove workarounds no longer relevant in 4.10.2 release of Transformers, closes #110 2021-09-10 13:12:44 -04:00
davidmezzetti b8aef4601c Add notebook for training a QA model, closes #115 2021-09-09 19:36:30 -04:00
davidmezzetti f97d3384fe Remove original columns as tokenization can generate additional rows 2021-09-09 17:00:48 -04:00
davidmezzetti c15090a303 Update comment 2021-09-09 15:23:08 -04:00
davidmezzetti 780a78904e Refactor training pipeline to support additional model types. Add QA models, closes #111 2021-09-09 15:20:52 -04:00
davidmezzetti f7c5c62e4f Update documentation 2021-09-06 13:43:04 -04:00
davidmezzetti d390dcb4c5 Update documentation 2021-09-06 09:22:53 -04:00
davidmezzetti e227cf5929 Update documentation 2021-09-06 08:47:53 -04:00
davidmezzetti 8ff136b22b Remove deprecated packages, closes #114 2021-09-06 07:55:59 -04:00
davidmezzetti a0ab014e96 Update notebook 2021-09-01 15:52:41 -04:00
davidmezzetti 34f625313c Modify method signature and add additional test 2021-09-01 14:52:44 -04:00
davidmezzetti fc76c92659 Add changes/workarounds for Transformers 4.10, closes #110 2021-09-01 12:38:08 -04:00
davidmezzetti 7343d08475 Rename package to fix issue with transformers 4.10, closes #110 2021-08-31 20:22:01 -04:00
davidmezzetti 2ed7c7fec4 Add ONNX support for Embeddings and Pipelines, closes #109 2021-08-31 19:18:21 -04:00
davidmezzetti f2512f5316 Add notebook for ONNX pipelines, closes #108 2021-08-27 18:41:05 -04:00
davidmezzetti 30bb6562c0 Cast tokens to int64 before passing to ONNX to fix Windows issue 2021-08-27 12:46:22 -04:00
davidmezzetti db4e6dc340 Update documentation 2021-08-27 12:25:16 -04:00
davidmezzetti 1031be0d2f Formatting change 2021-08-27 12:19:55 -04:00
davidmezzetti de6da9daba Add ONNX export pipeline, closes #107 2021-08-27 11:58:52 -04:00
davidmezzetti 3732f917ae Update image search examples to query using multilingual model #106 2021-08-23 12:44:02 -04:00
davidmezzetti fd03e77751 Bump version 2021-08-23 12:33:51 -04:00
davidmezzetti d1bcdc591f Update notebook 2021-08-18 08:19:33 -04:00
davidmezzetti 0e4966443b Update documentation 2021-08-17 19:09:45 -04:00
davidmezzetti 4f4fce8635 Add new notebook links 2021-08-17 17:11:10 -04:00
davidmezzetti 38ad65a251 Update examples with latest models, closes #103 2021-08-17 16:57:38 -04:00
davidmezzetti d294627ba9 Add pipeline dependency 2021-08-17 13:28:27 -04:00
davidmezzetti 73415837c4 Update logic moving tensors to device 2021-08-17 12:17:16 -04:00
davidmezzetti 68d2477f4f Add new vector method and fix performance regression, closes #101, closes #102 2021-08-17 11:57:38 -04:00
davidmezzetti e11db82dd9 Documentation updates 2021-08-16 12:53:24 -04:00
davidmezzetti 57b2018f66 Documentation updates 2021-08-15 14:10:22 -04:00
davidmezzetti cd39c56ca0 Update demo example 2021-08-15 13:52:33 -04:00
davidmezzetti 47dbe81e48 Documentation updates 2021-08-15 13:48:29 -04:00
davidmezzetti f1e05a442a Documentation updates 2021-08-15 13:42:16 -04:00
davidmezzetti 10906e8494 Replace deprecated models with newer models 2021-08-15 13:42:00 -04:00
davidmezzetti 3458a529af Test updates for #99 and #100 2021-08-15 13:41:16 -04:00
davidmezzetti 2583c83afb Infer vector method using path, closes #100 2021-08-15 13:38:01 -04:00
davidmezzetti 246e4449f8 Change tokenization to default to false for TransformersVectors, closes #99 2021-08-15 13:36:48 -04:00
davidmezzetti b90b2f4460 Make faiss a required library for all platforms (#98) 2021-08-14 17:27:01 -04:00
davidmezzetti 716d6bcedb Specify dtype for ids calls 2021-08-14 16:33:59 -04:00
davidmezzetti 34543a0162 Enable Faiss test on Windows, update docs 2021-08-14 08:36:16 -04:00
davidmezzetti 9b56d2ae20 Use Faiss as default ANN for all platforms (#98) 2021-08-14 08:24:16 -04:00
davidmezzetti 089c96bf14 Update documentation 2021-08-14 08:21:00 -04:00
davidmezzetti 1e3db617db Update dockerfile to install api and pipeline extras 2021-08-14 08:12:41 -04:00
davidmezzetti 6d4417c125 Encode documents in batches 2021-08-13 20:51:58 -04:00
davidmezzetti 1f82d54009 Make txtai install modular, base install is now a minimal set of libraries to support most commonly used functionality, closes #97 2021-08-13 20:02:40 -04:00
davidmezzetti 47146228e5 Update dataset handling, documentation change 2021-08-12 20:14:18 -04:00
davidmezzetti f0eb46b85d Add HFTrainer documentation 2021-08-12 18:03:40 -04:00
davidmezzetti b23aba8116 Update method docs 2021-08-12 17:47:07 -04:00
davidmezzetti 6ff95297b7 Add trainer pipeline, closes #96 2021-08-12 17:09:32 -04:00
davidmezzetti bba76f5704 Update test 2021-08-09 20:37:31 -04:00
davidmezzetti 2a50557df1 Add support for fixed label models, closes #95 2021-08-09 20:17:58 -04:00
davidmezzetti b3a1599f5d Bump version 2021-08-09 19:56:36 -04:00
davidmezzetti 58f585d694 Update documentation 2021-06-21 14:01:34 -04:00
davidmezzetti 5fd6835d03 Add wiki search example application, closes #92 2021-06-21 13:57:32 -04:00
davidmezzetti 40904f92cc Add book search example, closes #91 2021-06-01 13:21:53 -04:00
davidmezzetti 7e83c61176 Clear workflow batch during processing, close #90 2021-05-27 10:55:41 -04:00
davidmezzetti b9e84d99f3 Add embeddings cluster documentation 2021-05-21 09:48:12 -04:00
davidmezzetti 6ac0a8cfea Update link in notebook 2021-05-20 12:31:08 -04:00
davidmezzetti 9faae5dbbd Disable test on Windows to work around Windows-specific Python connection issue 2021-05-19 15:29:26 -04:00
davidmezzetti 39a085bb9d Disable test on Windows to work around Windows-specific Python connection issue 2021-05-19 15:13:31 -04:00
davidmezzetti b87fa34f6a Disable test on Windows to work around Windows-specific Python connection issue 2021-05-19 14:58:38 -04:00
davidmezzetti 53564bb8bc Update cluster tests to flush data 2021-05-19 13:35:46 -04:00
davidmezzetti a208f77d16 Update GitHub Action Python version 2021-05-19 13:10:07 -04:00
davidmezzetti 1658be7ad4 Update GitHub Action Python version 2021-05-19 12:52:44 -04:00
davidmezzetti 3b4e9d602b Update GitHub Action Python version 2021-05-19 12:51:46 -04:00
davidmezzetti 7cf670627b Update GitHub Action Python version 2021-05-19 12:34:08 -04:00
davidmezzetti 9e6bb9269f Update GitHub Action Python version 2021-05-19 12:28:41 -04:00
davidmezzetti 2c71f9aa42 Add links to embeddings cluster notebook 2021-05-19 10:35:37 -04:00
davidmezzetti 631c01438d Add distributed embeddings cluster notebook example, closes #89 2021-05-19 10:26:39 -04:00
davidmezzetti a0bd420890 Add embeddings cluster closes #87 2021-05-18 20:13:38 -04:00
davidmezzetti 368e822b6f Update API to include support for embeddings upsert/delete/count (#86) 2021-05-17 13:24:15 -04:00
davidmezzetti 5dbb948c85 Code improvement 2021-05-12 16:09:13 -04:00
davidmezzetti b1a3b97514 Modify HNSW logic to initialize delete counter in index method 2021-05-12 16:07:48 -04:00
davidmezzetti 5419381faf Update test 2021-05-12 15:22:37 -04:00
davidmezzetti e2215b7fad Update notebook with embeddings update/delete example 2021-05-12 15:22:16 -04:00
davidmezzetti 502d0e5d0a Fix issue with ANN indices after save/load. Store offsets/delete counts on self.config. 2021-05-12 12:45:15 -04:00
davidmezzetti bd4f98d21f Change embeddings.delete to take a list of ids vs documents 2021-05-12 10:32:06 -04:00
davidmezzetti ef6ca7d457 Update workflow example app to accept urls 2021-05-12 09:27:41 -04:00
davidmezzetti 6a9a281cf7 Switch default backend on Windows to Hnswlib, closes #88 2021-05-11 16:29:12 -04:00
davidmezzetti 75ec616e2a Add support for update/delete embeddings index operations, closes #86 2021-05-11 16:11:41 -04:00
davidmezzetti a3ec37a3f2 Update API documentation 2021-05-04 15:11:37 -04:00
davidmezzetti 52a192526e Rename workflows to workflow for naming consistency 2021-05-03 14:41:32 -04:00
davidmezzetti de15603ce3 Update documentation 2021-04-30 16:32:44 -04:00
davidmezzetti 3e9d03a953 Update workflow task documentation 2021-04-29 12:30:07 -04:00
davidmezzetti b2c9bbf7c4 Add workflow to API #82. Add service workflow task #83. Add object storage workflow task #84. Add URL workflow task #85 2021-04-29 12:22:34 -04:00
davidmezzetti 7e83b99676 Update documentation 2021-04-27 09:53:41 -04:00
davidmezzetti 03a20d0755 Update documentation 2021-04-27 09:13:04 -04:00
davidmezzetti e11d73f4ea Update method name 2021-04-27 08:43:47 -04:00
davidmezzetti 983fe9f2c9 Add text segmentation pipeline, closes #81 2021-04-27 08:33:09 -04:00
davidmezzetti 4fd3fc48e7 Improve logic for handling overflows with text tokenization 2021-04-27 08:32:19 -04:00
davidmezzetti 5ae223bbd9 Update workflow builder application 2021-04-17 21:31:50 -04:00
davidmezzetti 03785a0880 Documentation updates 2021-04-16 21:51:17 -04:00
davidmezzetti 5ae58e7add Documentation update 2021-04-16 21:43:43 -04:00
davidmezzetti eeb2f7448a Documentation update 2021-04-16 21:40:43 -04:00
davidmezzetti 086ab428fd Add workflow builder application, closes #80 2021-04-16 21:27:31 -04:00
davidmezzetti b42a252538 Pipeline updates 2021-04-16 21:26:48 -04:00
davidmezzetti 9fc2ebe23c Update notebook 2021-04-13 12:21:40 -04:00
davidmezzetti 75124014ec Documentation update 2021-04-13 11:57:32 -04:00
davidmezzetti 5a0649ffbd Updated summary model in tests to use smaller model 2021-04-12 19:15:13 -04:00
davidmezzetti 759bb71d28 Documentation update 2021-04-12 18:45:03 -04:00
davidmezzetti b2adcb9d6d Synchronize truncation/max length logic between embeddings and pipelines. Addresses #74 and #79 2021-04-12 18:29:04 -04:00
davidmezzetti 006f834609 Add serial execution mode for building word vectors, addresses #62 2021-04-11 15:56:09 -04:00
davidmezzetti 69a7918376 Remove Windows test 2021-04-11 15:41:28 -04:00
davidmezzetti e5db879127 Add back Windows test 2021-04-11 15:29:20 -04:00
davidmezzetti 17b0d05eb8 Reduce test complexity to work with memory available on GitHub actions 2021-04-11 15:11:25 -04:00
davidmezzetti b835d56587 Reduce test complexity to work with memory available on GitHub actions 2021-04-11 14:49:18 -04:00
davidmezzetti 1d353a28a3 Reduce test complexity to work with memory available on GitHub actions 2021-04-09 22:57:41 -04:00
davidmezzetti 4907be4346 Reduce test complexity to work with memory available on GitHub actions 2021-04-09 22:08:33 -04:00
davidmezzetti 1368f655c9 Reduce test complexity to work with memory available on GitHub actions 2021-04-09 21:53:10 -04:00
davidmezzetti b71684734c Add API extensions #77 and Modularize the API #78 2021-04-09 20:47:55 -04:00
davidmezzetti 1f78957aa6 Add pipeline factory #76 2021-04-09 20:29:18 -04:00
davidmezzetti 17963dfb78 Add truncation to summary pipeline 2021-04-09 20:25:09 -04:00
davidmezzetti 1513eb8390 Fix broken links in docs 2021-04-05 18:05:15 -04:00
davidmezzetti 44c560e6f4 Update docs GitHub action 2021-04-05 17:52:41 -04:00
davidmezzetti 5f7bcc3f90 Integrate txtai python docs into doc site, fix python doc error 2021-04-05 17:48:31 -04:00
davidmezzetti d5ea573319 Update docs 2021-04-05 08:43:10 -04:00
davidmezzetti 9f6e9ba151 Update docs 2021-04-05 08:00:37 -04:00
davidmezzetti cc4eff89b4 Add UTF-8 encoding when getting README 2021-04-04 21:00:33 -04:00
davidmezzetti 34fd08958f Add documentation site #75 2021-04-04 20:44:22 -04:00
davidmezzetti 8215b23fab Add parameter to set max_seq_length for transformer vectors. Allows setting or overriding the max length for a model. Fixes #74 2021-04-03 19:59:34 -04:00
davidmezzetti 2fc5b1267f Add image similarity app #73 2021-03-29 08:12:26 -04:00
davidmezzetti b7dd0456b0 Add pipeline workflow notebook, closes #73 2021-03-26 22:21:08 -04:00
davidmezzetti b49b0ad02b Add new notebook links to README 2021-03-26 12:14:25 -04:00
davidmezzetti 80f51b38af Add notebooks covering v3 functionality #73 2021-03-26 11:58:01 -04:00
davidmezzetti f7227e5c9f Update GitHub actions script 2021-03-26 08:35:16 -04:00
davidmezzetti 272b998d5e Add fix to better handle file paths in a cross-platform way 2021-03-26 08:00:41 -04:00
davidmezzetti 7a14f444c1 Skip M2M100 test on Windows 2021-03-25 21:57:25 -04:00
davidmezzetti bb275cc6d9 Use smaller model with tests to fit into GitHub hosted runner 2021-03-25 21:29:50 -04:00
davidmezzetti d4d51504cc Update GitHub Actions script 2021-03-25 21:00:52 -04:00
davidmezzetti 5fce31c44a Further simplify workflow unit test 2021-03-25 17:17:22 -04:00
davidmezzetti 7ff248d6c9 Further simplify workflow unit test 2021-03-25 16:56:20 -04:00
davidmezzetti dce29bffe6 Simplify test to work with GitHub action memory limitations 2021-03-25 16:30:52 -04:00
davidmezzetti 86ea27194f Add package to GitHub actions script 2021-03-25 16:06:04 -04:00
davidmezzetti 960f6b6ae7 Add unittest data 2021-03-25 15:57:19 -04:00
davidmezzetti 82b9a03ccb Add tests for v3 functionality, closes #71 2021-03-25 15:50:57 -04:00
davidmezzetti 06364a839e Update library versions 2021-03-25 15:44:15 -04:00
davidmezzetti 83f625cc32 Consistency changes 2021-03-25 15:43:46 -04:00
davidmezzetti 4a43da04c2 Switch default translation model from MBart-50 to M2M100 2021-03-25 15:40:57 -04:00
davidmezzetti b81116b00f Finish ImageTask functionality, part of #69 2021-03-25 15:35:01 -04:00
davidmezzetti eb981b8cdc Allow downloading models directly from sentence-transformers, closes #72 2021-03-25 15:33:39 -04:00
davidmezzetti f58e534fb9 Update build deps 2021-03-25 15:29:29 -04:00
davidmezzetti 3d9fa98667 Add workflow framework, closes #69 2021-03-17 16:43:53 -04:00
davidmezzetti 8b7c8f719d Conditionally import soundfile 2021-03-17 16:34:02 -04:00
davidmezzetti 7d752357a5 Update typo 2021-03-17 16:17:37 -04:00
davidmezzetti 9db430fabd Update typo 2021-03-17 16:15:55 -04:00
davidmezzetti 74def21234 Add sndfile dependency to tests and docker image 2021-03-17 16:13:32 -04:00
davidmezzetti 8fbbc8da58 Add additional imports 2021-03-17 15:48:57 -04:00
davidmezzetti 081e0245c3 Add translation pipeline, closes #68 2021-03-17 15:47:21 -04:00
davidmezzetti e9f162bd47 Add transcription pipeline, closes #67 2021-03-17 15:39:30 -04:00
davidmezzetti 6d7370ad80 Add text extraction pipeline, which requires a tika install. Closes #66 2021-03-17 15:35:25 -04:00
davidmezzetti 8c3f5deb44 Add summary pipeline, closes #65 2021-03-17 15:33:06 -04:00
davidmezzetti 4e08912507 Add pipeline model for generic HF models and tensor backed frameworks #70. Add support for GPU device id #64. 2021-03-17 15:25:15 -04:00
davidmezzetti 918711e6b6 Fix error with variable name 2021-03-17 15:15:04 -04:00
davidmezzetti d5f8ae8310 Rename multi_class to multi_label to match Transformers ZSL change 2021-03-17 15:14:34 -04:00
davidmezzetti 935a88947b Bump version to 3.0.0 and update dependencies 2021-03-17 14:47:50 -04:00
davidmezzetti 975ba144df Refactor API code into smaller components #63 2021-03-17 14:45:54 -04:00
davidmezzetti 8544d2eb36 Refactor API code into smaller components #63 2021-03-06 09:13:46 -05:00
davidmezzetti d01d30fdfe Fix faiss detection logic 2021-02-26 20:07:24 -05:00
davidmezzetti e6b2db47c4 Refactor code into smaller modules #63 2021-02-26 19:07:36 -05:00
davidmezzetti 0422b6c19f Update comment 2021-02-26 12:49:12 -05:00
davidmezzetti f9ee1c414a Update documentation for string tokenizer #61 2021-02-11 11:18:15 -05:00
davidmezzetti 4716fcd5d9 Upgrade Faiss #60 2021-02-04 14:07:59 -05:00
davidmezzetti c357e53244 Require hnswlib >= 0.5.0 to fix install warnings, closes #47 2021-01-30 07:34:57 -05:00
davidmezzetti f1b3350aa5 Update file path 2021-01-25 12:10:54 -05:00
davidmezzetti debf254680 Replace CONTRIBUTING file with organization wide file #50 2021-01-25 12:08:13 -05:00
davidmezzetti 69ebf850c4 Update CONTRIBUTING #50 2021-01-23 17:57:55 -05:00
davidmezzetti c0851b6c05 Update README 2021-01-23 17:11:29 -05:00
davidmezzetti bb8a647d28 Update README 2021-01-23 17:10:49 -05:00
davidmezzetti 53863e693e Initial CONTRIBUTING guide for #50 2021-01-23 17:08:29 -05:00
davidmezzetti 54ea19fae2 Remove unnecessary build step 2021-01-23 13:26:17 -05:00
davidmezzetti c4302d2301 Ignore formatting for statement 2021-01-23 13:20:37 -05:00
davidmezzetti 9a8ce920a7 Update build to run pre-commit actions 2021-01-23 13:17:17 -05:00
davidmezzetti 64e5eb4a38 Update formatting to comply with pylint/black for #50 2021-01-23 13:04:57 -05:00
davidmezzetti db0f5af0e0 Update pre-commit rules 2021-01-23 12:53:25 -05:00
davidmezzetti 178c7cdc0a Add dev requirements, pre-commit hooks and psf black config for #50 2021-01-23 11:42:49 -05:00
davidmezzetti 0c33995ecd Update README 2021-01-21 19:58:06 -05:00
davidmezzetti 7c045a71c4 Add Dockerfile for API, closes #59 2021-01-21 19:40:24 -05:00
davidmezzetti dd3e191e4c Update logo 2021-01-19 12:54:48 -05:00
davidmezzetti 983f45d480 Update README 2021-01-19 09:07:32 -05:00
davidmezzetti 4f1efd062c Update demo script 2021-01-14 16:46:49 -05:00
davidmezzetti b5f4c3cfe3 Update demo script 2021-01-14 16:40:58 -05:00
davidmezzetti 92d038c598 Update notebook 2021-01-13 10:08:45 -05:00
davidmezzetti ac23c79703 Update README 2021-01-13 08:55:14 -05:00
davidmezzetti 0ccb577574 Update README 2021-01-13 08:54:42 -05:00
davidmezzetti 4becd9055c Update README 2021-01-13 08:52:04 -05:00
davidmezzetti 9c91c6ab52 Update README 2021-01-13 08:50:07 -05:00
davidmezzetti f00b5c8e15 Update README 2021-01-13 08:45:17 -05:00
davidmezzetti 097dd861b4 Update README 2021-01-13 08:40:35 -05:00
davidmezzetti e3d6b9ddb2 Update README 2021-01-13 08:37:56 -05:00
davidmezzetti 1e9b3e490d Update README 2021-01-13 08:36:37 -05:00
davidmezzetti 1d69371a8e Update README 2021-01-12 20:56:32 -05:00
davidmezzetti 665b6b09d5 Update docs 2021-01-12 20:51:54 -05:00
davidmezzetti 874e13589b Update doc 2021-01-12 19:36:46 -05:00
davidmezzetti 417517f0cd Sync docs 2021-01-12 16:43:10 -05:00
davidmezzetti a91defbd66 Update of #54 to return json objects vs tuples to help simplify language binding libraries 2021-01-12 16:23:24 -05:00
davidmezzetti 722dddb467 Fix coveralls 3.0 build issue 2021-01-12 08:00:32 -05:00
davidmezzetti 70a4073db6 Fix coveralls 3.0 build issue 2021-01-12 07:49:36 -05:00
davidmezzetti ad3b5be5c4 Update test docs 2021-01-12 07:42:06 -05:00
davidmezzetti b8d339a92b Update LICENSE year 2021-01-11 21:32:14 -05:00
davidmezzetti b6afdfde59 Update docs 2021-01-11 21:32:00 -05:00
davidmezzetti 31114a860c Updated README 2021-01-11 11:58:28 -05:00
davidmezzetti 1de9299ba6 Updated README with new parameters 2021-01-11 11:53:18 -05:00
davidmezzetti e574217e61 Make Extractor constructor consistent with pipeline models 2021-01-11 11:53:07 -05:00
davidmezzetti 30446eab75 Modify API add method to stream data, closes #56 2021-01-11 10:49:30 -05:00
davidmezzetti 53ce647b18 Allow setting custom ANN settings, closes #55 2021-01-11 09:54:02 -05:00
davidmezzetti ef36934feb Update docs 2021-01-11 09:00:30 -05:00
davidmezzetti 9ccd2e576e Update notebook description 2021-01-09 16:55:00 -05:00
davidmezzetti ba79cf68fa Update notebook links and descriptions 2021-01-09 16:48:20 -05:00
davidmezzetti 5c16e6f4cc Update notebook 2021-01-09 16:35:56 -05:00
davidmezzetti 563ba7f77c Updated notebooks with 2.0.0 changes 2021-01-09 16:20:05 -05:00
davidmezzetti e84d7c003b Refactor API definitions across modules (#54), add batch version of methods (#18, #53) 2021-01-08 17:33:20 -05:00
davidmezzetti 78ecb7e831 Bump major version to 2.0.0 2021-01-08 17:31:37 -05:00
davidmezzetti f38ee901bb Fix README link 2021-01-06 21:01:32 -05:00
davidmezzetti 469a2fa2a9 Refresh and reorganize example notebooks, closes #52 2021-01-06 20:56:52 -05:00
davidmezzetti 6b03186f4e Add notebook showing how to index/search Hugging Face Datasets, addresses #26 2021-01-06 19:03:01 -05:00
davidmezzetti 4d502670a0 Add similarity pipeline, closes #49 2021-01-05 12:13:17 -05:00
davidmezzetti 77eb297c81 Updated README 2021-01-05 10:14:13 -05:00
davidmezzetti caa342176b Updated README 2021-01-05 10:05:07 -05:00
davidmezzetti ec0bc4467c Update README 2021-01-05 10:01:08 -05:00
davidmezzetti 3a2bfeb203 Enable multiprocessing support for coverage 2021-01-04 13:46:47 -05:00
davidmezzetti ee644646d7 Update logo 2021-01-01 15:46:04 -05:00
davidmezzetti 8db4f3b53b Updated logo 2021-01-01 14:01:10 -05:00
davidmezzetti c7a688682a Update logo 2021-01-01 13:51:57 -05:00
davidmezzetti 24470d88d4 Update logo 2021-01-01 13:48:04 -05:00
davidmezzetti 5d7ca2a9be Updated logo 2021-01-01 13:41:32 -05:00
davidmezzetti 46d95d16c6 Updated logo 2021-01-01 13:38:16 -05:00
davidmezzetti c642a0e4e5 Update logo 2021-01-01 13:31:40 -05:00
davidmezzetti ae69c27ece Update test file name 2020-12-28 14:57:55 -05:00
davidmezzetti 172cd601bc Added flag to disable default tokenization for vector models. This addresses language support issues in #39 and #43. 2020-12-28 14:34:45 -05:00
davidmezzetti 525578c20d Update method docs 2020-12-28 12:38:00 -05:00
davidmezzetti dc3758536b Torch 1.7.1 macOS wheel on PyPI doesn't have quantization support enabled, skip testQuantize for macOS 2020-12-27 11:12:06 -05:00
davidmezzetti b18ed6c36a Add quantize test back to macOS 2020-12-27 08:57:36 -05:00
davidmezzetti 79aae2d31f Allow all supported pipeline config via API. Default to smaller models for labels to work with GitHub Actions. 2020-12-27 08:31:00 -05:00
davidmezzetti cfb0975fbe Skip quantize test on macOS 2020-12-26 22:24:59 -05:00
davidmezzetti 12d0685e1a Fixed build error 2020-12-26 22:02:25 -05:00
davidmezzetti e25de85396 Build script update. Make test paths cross platform. 2020-12-26 21:43:18 -05:00
davidmezzetti 4d9a231617 Updated import 2020-12-26 21:02:16 -05:00
davidmezzetti ef8226da8f Added API tests (closes #42). Increased overall test coverage. 2020-12-26 20:51:53 -05:00
davidmezzetti 8c1214be60 Added additional null checks 2020-12-26 20:18:07 -05:00
davidmezzetti 98c0a98a11 Refresh example notebooks. Add API Gallery notebook 2020-12-24 11:13:27 -05:00
davidmezzetti 9e5face23d Added Go API link 2020-12-23 18:30:40 -05:00
davidmezzetti ad43ff0f73 Upgrade sentence-transformers, remove build workaround (closes #46) 2020-12-22 17:02:47 -05:00
davidmezzetti fd1d2b61e2 Add Java API link 2020-12-22 17:02:05 -05:00
davidmezzetti 3157cf3476 Update README 2020-12-17 15:25:28 -05:00
davidmezzetti 74f3146137 Update build script 2020-12-17 14:51:24 -05:00
davidmezzetti d9c6320492 Update build script 2020-12-17 14:40:52 -05:00
davidmezzetti 9d1ced6beb Update build script 2020-12-17 14:33:45 -05:00
davidmezzetti a47a95dcef Update tests 2020-12-16 19:31:29 -05:00
davidmezzetti 0aee1b0893 Update tests 2020-12-16 19:29:20 -05:00
davidmezzetti 1e449cb9ad Update tests 2020-12-16 19:15:53 -05:00
davidmezzetti 9f2433a967 Updated test 2020-12-16 19:00:58 -05:00
davidmezzetti 689970aa8a Update README 2020-12-16 17:37:29 -05:00
davidmezzetti ad6efae447 Update build script 2020-12-09 15:10:05 -05:00
davidmezzetti d101ea10f7 Update package import in notebook 2020-12-09 14:38:12 -05:00
davidmezzetti 0fe9d15d30 Revert test build script 2020-12-08 17:01:50 -05:00
davidmezzetti d2f834f253 Test build script 2020-12-08 16:36:17 -05:00
davidmezzetti 6b600d9c1f Update pipeline GPU usage and build script 2020-12-08 15:10:43 -05:00
davidmezzetti 0aa1c430aa Update build script 2020-12-08 13:49:32 -05:00
davidmezzetti 40a2481789 Update build script 2020-12-08 13:22:24 -05:00
davidmezzetti 6116080f13 Refactor pipeline component, closes #44 2020-12-08 11:26:08 -05:00
davidmezzetti 66e7478e60 Bump version. Require transformers >= 4.0.0. Closes #45 2020-12-08 11:23:08 -05:00
davidmezzetti 357d709828 Updated README 2020-11-20 20:04:28 -05:00
davidmezzetti cd10488618 Full txtai API support, closes #41 2020-11-20 19:14:47 -05:00
davidmezzetti 48cba4a6b6 Updated README 2020-11-20 12:57:39 -05:00
davidmezzetti 223245bae0 Refreshed example notebooks, added notebook for labeling. Closes #40 2020-11-20 12:53:40 -05:00
davidmezzetti 1c95af8d0a Bump version 2020-11-20 12:53:06 -05:00
davidmezzetti e81155b41a Fixed error in comment 2020-11-20 12:52:41 -05:00
davidmezzetti 3a587267ee Removed unnecessary code 2020-11-02 19:33:10 -05:00
davidmezzetti 2340550488 Update build badge in README 2020-11-02 19:08:30 -05:00
davidmezzetti 110f6d2197 Rename build 2020-11-02 18:40:24 -05:00
davidmezzetti dd5003f51a Updated build script 2020-11-02 18:19:17 -05:00
davidmezzetti d3f9df828f Updated build script 2020-11-02 18:12:16 -05:00
davidmezzetti f602401442 Re-add Windows specific logic for Faiss as full support isn't quite ready 2020-11-02 18:09:42 -05:00
davidmezzetti 0f45aee3d0 Updated build script 2020-11-02 17:35:25 -05:00
davidmezzetti db197cdfea Updated build script 2020-11-02 17:22:46 -05:00
davidmezzetti 8929a50a03 Updated build script 2020-11-02 17:13:16 -05:00
davidmezzetti baae46efc2 Updated build script 2020-11-02 17:02:18 -05:00
davidmezzetti 5ec442ea11 Updated build script 2020-11-02 16:54:54 -05:00
davidmezzetti 51e6886687 Update build script 2020-11-02 16:20:35 -05:00
davidmezzetti 0010f3c7b7 Add github actions 2020-11-02 16:18:01 -05:00
davidmezzetti 2fe2a80c61 Upgrade Travis Windows Python version 2020-11-02 15:04:51 -05:00
davidmezzetti 8801c87c02 Upgrade to Faiss 1.6.4, closes #36 2020-11-02 13:13:33 -05:00
davidmezzetti 9e42df4617 Add macOS dependency 2020-11-02 12:35:22 -05:00
davidmezzetti ac52c80ed5 Attempt to debug macOS build error 2020-11-02 12:23:42 -05:00
davidmezzetti b6cbe880f6 Updated build scripts 2020-11-02 11:58:44 -05:00
davidmezzetti 9b677d6854 Update Travis build script for macOS 2020-11-02 11:35:26 -05:00
davidmezzetti d1288d0997 Update Travis build script for macOS 2020-11-02 11:27:48 -05:00
davidmezzetti 0b10ffef38 Faiss on Windows now supported 2020-11-01 19:04:40 -05:00
davidmezzetti b0763492ab Require must and must not tokens to have at least 1 character trailing a +/- 2020-11-01 18:43:00 -05:00
davidmezzetti 52f0e2065d Split extractor call into two separate methods, an embeddings search and QA execution. Closes #35. 2020-11-01 17:05:49 -05:00
davidmezzetti bc6f11bcaa Bump version 2020-11-01 17:05:09 -05:00
davidmezzetti 2337954a15 Re-run notebooks, move recently added comments to codeblocks 2020-10-20 18:22:44 -04:00
David Mezzetti 626e9ccc3f Merge pull request #33 from csheargm/patch-2
Update 04_Extractive_QA_with_Elasticsearch.ipynb
2020-10-20 17:31:40 -04:00
David Mezzetti 84632cc148 Merge pull request #32 from csheargm/patch-1
Update 03_Build_an_Embeddings_index_from_a_data_source.ipynb
2020-10-20 17:31:22 -04:00
csheargm f954f63071 Update 04_Extractive_QA_with_Elasticsearch.ipynb
In vscode or local dev environment, the original code will not start the elastic search server. By launching the elastic search server in a separate command line window, the rest of the script is able to connect the elastic search server and continues successfully.
2020-10-20 10:12:24 -07:00
csheargm 39ded2f75b Update 03_Build_an_Embeddings_index_from_a_data_source.ipynb
display(HTML(df.to_html(index=False))) works in a browser development environment, but will display a message like this "<IPython.core.display.HTML object>" in a local environment. Added suggestions to those who run the script in vscode or local command line environment. Instead of displaying the result to a browser, write the html result into a local file, and then use the browser to open the html file to view the result.
2020-10-20 09:54:01 -07:00
davidmezzetti 6a08bb12c7 Updated README 2020-10-16 11:31:11 -04:00
davidmezzetti 9f22956d89 Added logo to README.md 2020-10-14 22:56:06 -04:00
davidmezzetti 348623b7c9 Added logo to README.md 2020-10-14 22:53:27 -04:00
davidmezzetti 0a1e18fbc5 Added logo to README.md 2020-10-14 22:48:13 -04:00
davidmezzetti e906601830 Added logo to README.md 2020-10-14 22:39:46 -04:00
davidmezzetti ad53c56b96 Added logo to README.md 2020-10-14 22:38:43 -04:00
davidmezzetti 391ee24e76 Added link to tldrstory 2020-10-12 13:44:29 -04:00
davidmezzetti bd354453f1 Added text labeling interface using zero shot classifier, closes #30 2020-10-05 09:11:53 -04:00
davidmezzetti 816e652268 Added FastAPI interface #12 2020-10-01 14:12:10 -04:00
davidmezzetti c90cb8e457 Update macOS version in Travis CI script 2020-10-01 11:40:38 -04:00
davidmezzetti e45c4d59f4 Fix tokenization error in notebook, addresses #28 2020-10-01 09:33:38 -04:00
davidmezzetti d70f9bc3fc Upgrade transformers/sentence-transformers, fixes #25 2020-09-11 15:15:31 -04:00
478 changed files with 97266 additions and 2370 deletions
+8
View File
@@ -0,0 +1,8 @@
[run]
source = src/python
concurrency = multiprocessing,thread
disable_warnings = no-data-collected
omit = **/__main__.py
[combine]
disable_warnings = no-data-collected
+69
View File
@@ -0,0 +1,69 @@
# GitHub Actions build workflow
name: build
on: ["push", "pull_request"]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
timeout-minutes: 60
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Install Python - Linux
uses: actions/setup-python@v4
with:
python-version: 3.8
if: matrix.os == 'ubuntu-latest'
- name: Install Python - macOS/Windows
uses: actions/setup-python@v4
with:
python-version: 3.9
if: matrix.os != 'ubuntu-latest'
- name: Install Java
uses: actions/setup-java@v3
with:
distribution: "zulu"
java-version: "8"
- name: Install dependencies - Linux
run: sudo apt-get update && sudo apt-get install libsndfile1
if: matrix.os == 'ubuntu-latest'
- name: Install dependencies - macOS
run: |
echo "OMP_NUM_THREADS=1" >> $GITHUB_ENV
echo "PYTORCH_MPS_DISABLE=1" >> $GITHUB_ENV
echo "LLAMA_NO_METAL=1" >> $GITHUB_ENV
echo "ACCELERATE_USE_CPU=1" >> $GITHUB_ENV
echo "TIKA_STARTUP_SLEEP=30" >> $GITHUB_ENV
echo "TIKA_STARTUP_MAX_RETRY=10" >> $GITHUB_ENV
if: matrix.os == 'macos-latest'
- name: Install dependencies - Windows
run: choco install wget
if: matrix.os == 'windows-latest'
- name: Build
run: |
pip install -U wheel
pip install .[all,dev]
python -c "import nltk; nltk.download('punkt')"
python --version
make data coverage
- uses: pre-commit/[email protected]
if: matrix.os == 'ubuntu-latest'
- name: Test Coverage
run: coveralls --service=github
if: matrix.os == 'ubuntu-latest'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+18
View File
@@ -0,0 +1,18 @@
name: docs
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.8
- run: |
pip install -U pip wheel
pip install .[all,dev]
- run: mkdocs gh-deploy --force
+3
View File
@@ -1,7 +1,10 @@
build/
dist/
docker/**/*.yml
htmlcov/
*egg-info/
__pycache__/
.coverage
.coverage.*
*.pyc
.vscode/
+13
View File
@@ -0,0 +1,13 @@
repos:
- repo: https://github.com/pycqa/pylint
rev: v2.16.2
hooks:
- id: pylint
args:
- -d import-error
- -d duplicate-code
- repo: https://github.com/ambv/black
rev: 23.1.0
hooks:
- id: black
language_version: python3
-3
View File
@@ -15,6 +15,3 @@ min-public-methods=0
[FORMAT]
max-line-length=150
[MESSAGES CONTROL]
disable=I0011,R0201,W0105,W0108,W0110,W0141,W0621,W0640
-32
View File
@@ -1,32 +0,0 @@
# Travis CI build script - test on all supported platforms
os: linux
dist: xenial
language: python
jobs:
include:
- name: "Linux"
script:
- make coverage
after_success:
- coveralls
- name: "macOS"
os: osx
osx_image: xcode11.4
language: shell
script:
- make PYTHON=python3 test
- name: "Windows"
os: windows
language: shell
env: PATH=/c/Python36:/c/Python36/Scripts:$PATH
before_install:
- choco install make
- choco install python --version 3.6.8
- python -m pip install -U pip wheel
- python -m pip install torch==1.6.0+cpu torchvision==0.7.0+cpu -f https://download.pytorch.org/whl/torch_stable.html
install:
- pip3 install -U pip wheel coverage coveralls
- pip3 install .
- python3 --version || python --version
script:
- make test
+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 embeddings database"
abstract: "txtai is an all-in-one open-source embeddings database for semantic search, LLM orchestration and language model workflows"
url: "https://github.com/neuml/txtai"
authors:
- family-names: "Mezzetti"
given-names: "David"
affiliation: NeuML
license: Apache-2.0
+1 -1
View File
@@ -175,7 +175,7 @@
END OF TERMS AND CONDITIONS
Copyright 2020 NeuML LLC
Copyright 2020- NeuML LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
+32 -1
View File
@@ -8,13 +8,44 @@ export PYTHONPATH := ${SRC_DIR}:${TEST_DIR}:${PYTHONPATH}
export PATH := ${TEST_DIR}:${PATH}
export PYTHONWARNINGS := ignore
# Disable tokenizer parallelism for tests
export TOKENIZERS_PARALLELISM := false
# Default python executable if not provided
PYTHON ?= python
# Check for wget
WGET := $(shell wget --version 2> /dev/null)
ifndef WGET
$(error "Required binary `wget` not found, please install wget OS package")
endif
# Download test data
data:
mkdir -p /tmp/txtai
wget -N https://github.com/neuml/txtai/releases/download/v6.2.0/tests.tar.gz -P /tmp
tar -xvzf /tmp/tests.tar.gz -C /tmp
# Unit tests
test:
${PYTHON} -m unittest discover -v -s ${TEST_DIR}
# Run tests while calculating code coverage
coverage:
coverage run --source=${SRC_DIR} -m unittest discover -v -s ${TEST_DIR}
coverage run -m unittest discover -v -k testann -s ${TEST_DIR}
coverage run -m unittest discover -v -k testapi.testauthorization -k testapi.testcluster -s ${TEST_DIR}
coverage run -m unittest discover -v -k testapi.testencoding -k testapi.testextension -s ${TEST_DIR}
coverage run -m unittest discover -v -k testapp -s ${TEST_DIR}
coverage run -m unittest discover -v -k testarchive -s ${TEST_DIR}
coverage run -m unittest discover -v -k testcloud -s ${TEST_DIR}
coverage run -m unittest discover -v -k testconsole -s ${TEST_DIR}
coverage run -m unittest discover -v -k testdatabase -s ${TEST_DIR}
coverage run -m unittest discover -v -k testembeddings -s ${TEST_DIR}
coverage run -m unittest discover -v -k testgraph -s ${TEST_DIR}
coverage run -m unittest discover -v -k testmodels -s ${TEST_DIR}
coverage run -m unittest discover -v -k testoptional -s ${TEST_DIR}
coverage run -m unittest discover -v -k testpipeline -s ${TEST_DIR}
coverage run -m unittest discover -v -k testscoring -s ${TEST_DIR}
coverage run -m unittest discover -v -k testvectors -s ${TEST_DIR}
coverage run -m unittest discover -v -k testworkflow -s ${TEST_DIR}
coverage combine
+199 -141
View File
@@ -1,175 +1,233 @@
# txtai: AI-powered search engine
<p align="center">
<img src="https://raw.githubusercontent.com/neuml/txtai/master/logo.png"/>
</p>
[![Version](https://img.shields.io/github/release/neuml/txtai.svg?style=flat&color=success)](https://github.com/neuml/txtai/releases)
[![GitHub Release Date](https://img.shields.io/github/release-date/neuml/txtai.svg?style=flat&color=blue)](https://github.com/neuml/txtai/releases)
[![GitHub issues](https://img.shields.io/github/issues/neuml/txtai.svg?style=flat&color=success)](https://github.com/neuml/txtai/issues)
[![GitHub last commit](https://img.shields.io/github/last-commit/neuml/txtai.svg?style=flat&color=blue)](https://github.com/neuml/txtai)
[![Build Status](https://img.shields.io/travis/neuml/txtai/master.svg?style=flat)](https://travis-ci.org/neuml/txtai)
[![Coverage Status](https://img.shields.io/coveralls/github/neuml/txtai)](https://coveralls.io/github/neuml/txtai?branch=master)
<p align="center">
<b>All-in-one embeddings database</b>
</p>
txtai builds an AI-powered index over sections of text. txtai supports building text indices to perform similarity searches and create extractive question-answering based systems.
<p align="center">
<a href="https://github.com/neuml/txtai/releases">
<img src="https://img.shields.io/github/release/neuml/txtai.svg?style=flat&color=success" alt="Version"/>
</a>
<a href="https://github.com/neuml/txtai">
<img src="https://img.shields.io/github/last-commit/neuml/txtai.svg?style=flat&color=blue" alt="GitHub last commit"/>
</a>
<a href="https://github.com/neuml/txtai/issues">
<img src="https://img.shields.io/github/issues/neuml/txtai.svg?style=flat&color=success" alt="GitHub issues"/>
</a>
<a href="https://join.slack.com/t/txtai/shared_invite/zt-1cagya4yf-DQeuZbd~aMwH5pckBU4vPg">
<img src="https://img.shields.io/badge/slack-join-blue?style=flat&logo=slack&logocolor=white" alt="Join Slack"/>
</a>
<a href="https://github.com/neuml/txtai/actions?query=workflow%3Abuild">
<img src="https://github.com/neuml/txtai/workflows/build/badge.svg" alt="Build Status"/>
</a>
<a href="https://coveralls.io/github/neuml/txtai?branch=master">
<img src="https://img.shields.io/coverallsCoverage/github/neuml/txtai" alt="Coverage Status">
</a>
</p>
txtai is an all-in-one embeddings database for semantic search, LLM orchestration and language model workflows.
![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)
Embeddings databases are a union of vector indexes (sparse and dense), graph networks and relational databases. This enables vector search with SQL, topic modeling, retrieval augmented generation and more.
Embeddings databases can stand on their own and/or serve as a powerful knowledge source for large language model (LLM) prompts.
Summary of txtai features:
- 🔎 Vector search with SQL, object storage, topic modeling, graph analysis and multimodal indexing
- 📄 Create embeddings for text, documents, audio, images and video
- 💡 Pipelines powered by language models that run LLM prompts, question-answering, labeling, transcription, translation, summarization and more
- ↪️️ Workflows to join pipelines together and aggregate business logic. txtai processes can be simple microservices or multi-model workflows.
- ⚙️ Build with Python or YAML. API bindings available for [JavaScript](https://github.com/neuml/txtai.js), [Java](https://github.com/neuml/txtai.java), [Rust](https://github.com/neuml/txtai.rs) and [Go](https://github.com/neuml/txtai.go).
- ☁️ Run local or scale out with container orchestration
txtai is built with Python 3.8+, [Hugging Face Transformers](https://github.com/huggingface/transformers), [Sentence Transformers](https://github.com/UKPLab/sentence-transformers) and [FastAPI](https://github.com/tiangolo/fastapi). txtai is open-source under an Apache 2.0 license.
*Interested in an easy and secure way to run hosted txtai applications? Then join the [txtai.cloud](https://txtai.cloud) preview to learn more.*
## Why txtai?
![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)
New vector databases, LLM frameworks and everything in between are sprouting up daily. Why build with txtai?
- Up and running in minutes with [pip](https://neuml.github.io/txtai/install/) or [Docker](https://neuml.github.io/txtai/cloud/)
```python
# Get started in a couple lines
import txtai
embeddings = txtai.Embeddings()
embeddings.index(["Correct", "Not what we hoped"])
embeddings.search("positive", 1)
#[(0, 0.29862046241760254)]
```
- Built-in API makes it easy to develop applications using your programming language of choice
```yaml
# app.yml
embeddings:
path: sentence-transformers/all-MiniLM-L6-v2
```
```bash
CONFIG=app.yml uvicorn "txtai.api:app"
curl -X GET "http://localhost:8000/search?query=positive"
```
- Run local - no need to ship data off to disparate remote services
- Work with micromodels all the way up to large language models (LLMs)
- Low footprint - install additional dependencies and scale up when needed
- [Learn by example](https://neuml.github.io/txtai/examples) - notebooks cover all available functionality
## Use Cases
The following sections introduce common txtai use cases. A comprehensive set of over 50 [example notebooks and applications](https://neuml.github.io/txtai/examples) are also available.
### Semantic Search
Build semantic/similarity/vector/neural search applications.
![demo](https://raw.githubusercontent.com/neuml/txtai/master/demo.gif)
NeuML uses txtai and/or the concepts behind it to power all of our Natural Language Processing (NLP) applications. Example applications:
Traditional search systems use keywords to find data. Semantic search has an understanding of natural language and identifies results that have the same meaning, not necessarily the same keywords.
- [cord19q](https://github.com/neuml/cord19q) - COVID-19 literature analysis
- [paperai](https://github.com/neuml/paperai) - AI-powered literature discovery and review engine for medical/scientific papers
- [neuspo](https://neuspo.com) - a fact-driven, real-time sports event and news site
- [codequestion](https://github.com/neuml/codequestion) - Ask coding questions directly from the terminal
![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)
txtai is built on the following stack:
Get started with the following examples.
- [sentence-transformers](https://github.com/UKPLab/sentence-transformers)
- [transformers](https://github.com/huggingface/transformers)
- [faiss](https://github.com/facebookresearch/faiss)
- Python 3.6+
| Notebook | Description | |
|:----------|:-------------|------:|
| [Introducing txtai](https://github.com/neuml/txtai/blob/master/examples/01_Introducing_txtai.ipynb) [▶️](https://www.youtube.com/watch?v=SIezMnVdmMs) | Overview of the functionality provided by txtai | [![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
LLM chains, retrieval augmented generation (RAG), chat with your data, pipelines and workflows that interface with large language models (LLMs).
#### Chains
Integrate LLM chains (known as workflows in txtai), multiple LLM agents and self-critique.
![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) |
#### 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)
A novel feature of txtai is that it can provide both an answer and source citation.
| Notebook | Description | |
|:----------|:-------------|------:|
| [Build RAG pipelines with txtai](https://github.com/neuml/txtai/blob/master/examples/52_Build_RAG_pipelines_with_txtai.ipynb) | Guide on retrieval augmented generation including how to create citations | [![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) |
| [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) |
### 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.
| 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
![install](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/install.png#gh-light-mode-only)
![install](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/install-dark.png#gh-dark-mode-only)
The easiest way to install is via pip and PyPI
pip install txtai
You can also install txtai directly from GitHub. Using a Python Virtual Environment is recommended.
pip install git+https://github.com/neuml/txtai
Python 3.6+ is supported
### Troubleshooting
This project has dependencies that require compiling native code. Windows and macOS systems require the following additional steps. Most Linux environments will install without any additional steps.
#### Windows
- Install C++ Build Tools - https://visualstudio.microsoft.com/visual-cpp-build-tools/
- PyTorch Windows binaries are not on PyPI, the following url link must be added when installing
```
pip install txtai -f https://download.pytorch.org/whl/torch_stable.html
```
See [pytorch.org](https://pytorch.org) for more information.
#### macOS
- Run the following before installing
```
brew install libomp
```
See [this link](https://github.com/kyamagu/faiss-wheels#prerequisite) for more information.
## Examples
The examples directory has a series of examples and notebooks giving an overview of txtai. See the list of notebooks below.
### Notebooks
| Notebook | Description | |
|:----------|:-------------|------:|
| [Introducing txtai](https://github.com/neuml/txtai/blob/master/examples/01_Introducing_txtai.ipynb) | Overview of the functionality provided by txtai |[![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) |
| [Extractive QA with txtai](https://github.com/neuml/txtai/blob/master/examples/02_Extractive_QA_with_txtai.ipynb) | 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/02_Extractive_QA_with_txtai.ipynb) |
| [Build an Embeddings index from a data source](https://github.com/neuml/txtai/blob/master/examples/03_Build_an_Embeddings_index_from_a_data_source.ipynb) | Embeddings index from a data source backed by word embeddings |[![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) |
| [Extractive QA with Elasticsearch](https://github.com/neuml/txtai/blob/master/examples/04_Extractive_QA_with_Elasticsearch.ipynb) | Extractive question-answering 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/04_Extractive_QA_with_Elasticsearch.ipynb) |
## Configuration
The following section goes over available settings for Embeddings and Extractor instances.
### Embeddings
Embeddings methods are set through the constructor. Examples below.
```python
# Transformers embeddings model
Embeddings({"method": "transformers",
"path": "sentence-transformers/bert-base-nli-mean-tokens"})
# Word embeddings model
Embeddings({"path": vectors,
"storevectors": True,
"scoring": "bm25",
"pca": 3,
"quantize": True})
```
pip install txtai
```
#### method
```yaml
method: transformers|words
```
Python 3.8+ is supported. Using a Python [virtual environment](https://docs.python.org/3/library/venv.html) is recommended.
Sets the sentence embeddings method to use. When set to _transformers_, the embeddings object builds sentence embeddings using the sentence transformers. Otherwise a word embeddings model is used. Defaults to words.
See the detailed [install instructions](https://neuml.github.io/txtai/install) for more information covering [optional dependencies](https://neuml.github.io/txtai/install/#optional-dependencies), [environment specific prerequisites](https://neuml.github.io/txtai/install/#environment-specific-prerequisites), [installing from source](https://neuml.github.io/txtai/install/#install-from-source), [conda support](https://neuml.github.io/txtai/install/#conda) and how to [run with containers](https://neuml.github.io/txtai/cloud).
#### path
```yaml
path: string
```
## Model guide
Required field that sets the path for a vectors model. When method set to _transformers_, this must be a path to a Hugging Face transformers model. Otherwise,
it must be a path to a local word embeddings model.
![models](https://raw.githubusercontent.com/neuml/txtai/master/docs/images/models.png)
#### storevectors
```yaml
storevectors: boolean
```
See the table below for the current recommended models. These models all allow commercial use and offer a blend of speed and performance.
Enables copying of a vectors model set in path into the embeddings models output directory on save. This option enables a fully encapsulated index with no external file dependencies.
| Component | Model(s) |
| ----------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| [Embeddings](https://neuml.github.io/txtai/embeddings) | [all-MiniLM-L6-v2](https://hf.co/sentence-transformers/all-MiniLM-L6-v2) |
| [Image Captions](https://neuml.github.io/txtai/pipeline/image/caption) | [BLIP](https://hf.co/Salesforce/blip-image-captioning-base) |
| [Labels - Zero Shot](https://neuml.github.io/txtai/pipeline/text/labels) | [BART-Large-MNLI](https://hf.co/facebook/bart-large) |
| [Labels - Fixed](https://neuml.github.io/txtai/pipeline/text/labels) | Fine-tune with [training pipeline](https://neuml.github.io/txtai/pipeline/train/trainer) |
| [Large Language Model (LLM)](https://neuml.github.io/txtai/pipeline/text/llm) | [Mistral 7B OpenOrca](https://hf.co/Open-Orca/Mistral-7B-OpenOrca) |
| [Summarization](https://neuml.github.io/txtai/pipeline/text/summary) | [DistilBART](https://hf.co/sshleifer/distilbart-cnn-12-6) |
| [Text-to-Speech](https://neuml.github.io/txtai/pipeline/audio/texttospeech) | [ESPnet JETS](https://hf.co/NeuML/ljspeech-jets-onnx) |
| [Transcription](https://neuml.github.io/txtai/pipeline/audio/transcription) | [Whisper](https://hf.co/openai/whisper-base) |
| [Translation](https://neuml.github.io/txtai/pipeline/text/translation) | [OPUS Model Series](https://hf.co/Helsinki-NLP) |
#### scoring
```yaml
scoring: bm25|tfidf|sif
```
Models can be loaded as either a path from the Hugging Face Hub or a local directory. Model paths are optional, defaults are loaded when not specified. For tasks with no recommended model, txtai uses the default models as shown in the Hugging Face Tasks guide.
For word embedding models, a scoring model allows building weighted averages of word vectors for a given sentence. Supports BM25, tf-idf and SIF (smooth inverse frequency) methods. If a scoring method is not provided, mean sentence embeddings are built.
See the following links to learn more.
#### pca
```yaml
pca: int
```
- [Hugging Face Tasks](https://hf.co/tasks)
- [Hugging Face Model Hub](https://hf.co/models)
- [MTEB Leaderboard](https://hf.co/spaces/mteb/leaderboard)
- [LMSYS LLM Leaderboard](https://chat.lmsys.org/?leaderboard)
- [Open LLM Leaderboard](https://hf.co/spaces/HuggingFaceH4/open_llm_leaderboard)
Removes _n_ principal components from generated sentence embeddings. When enabled, a TruncatedSVD model is built to help with dimensionality reduction. After pooling of vectors creates a single sentence embedding, this method is applied.
## Powered by txtai
#### backend
```yaml
backend: annoy|faiss|hnsw
```
The following applications are powered by txtai.
Approximate Nearest Neighbor (ANN) index backend for storing generated sentence embeddings. Defaults to Faiss for Linux/macOS and Annoy for Windows. Faiss currently is not supported on Windows.
![apps](https://raw.githubusercontent.com/neuml/txtai/master/apps.jpg)
#### quantize
```yaml
quantize: boolean
```
| Application | Description |
|:------------ |:-------------|
| [txtchat](https://github.com/neuml/txtchat) | Retrieval Augmented Generation (RAG) powered search |
| [paperai](https://github.com/neuml/paperai) | Semantic search and workflows for medical/scientific papers |
| [codequestion](https://github.com/neuml/codequestion) | Semantic search for developers |
| [tldrstory](https://github.com/neuml/tldrstory) | Semantic search for headlines and story text |
Enables quanitization of generated sentence embeddings. If the index backend supports it, sentence embeddings will be stored with 8-bit precision vs 32-bit.
Only Faiss currently supports quantization.
In addition to this list, there are also many other [open-source projects](https://github.com/neuml/txtai/network/dependents), [published research](https://scholar.google.com/scholar?q=txtai&hl=en&as_ylo=2022) and closed proprietary/commercial projects that have built on txtai in production.
### Extractor
## Further Reading
Extractor methods are set as constructor arguments. Examples below.
![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)
```python
Extractor(embeddings, path, quantize)
```
- [Introducing txtai, the all-in-one embeddings database](https://medium.com/neuml/introducing-txtai-the-all-in-one-embeddings-database-c721f4ff91ad)
- [Tutorial series on Hashnode](https://neuml.hashnode.dev/series/txtai-tutorial) | [dev.to](https://dev.to/neuml/tutorial-series-on-txtai-ibg)
- [What's new in txtai 7.0](https://medium.com/neuml/whats-new-in-txtai-7-0-855ad6a55440) | [6.0](https://medium.com/neuml/whats-new-in-txtai-6-0-7d93eeedf804) | [5.0](https://medium.com/neuml/whats-new-in-txtai-5-0-e5c75a13b101) | [4.0](https://medium.com/neuml/whats-new-in-txtai-4-0-bbc3a65c3d1c)
- [Getting started with semantic search](https://medium.com/neuml/getting-started-with-semantic-search-a9fd9d8a48cf) | [workflows](https://medium.com/neuml/getting-started-with-semantic-workflows-2fefda6165d9)
- [Running txtai at scale](https://medium.com/neuml/running-at-scale-with-txtai-71196cdd99f9)
#### embeddings
```yaml
embeddings: Embeddings object instance
```
## Documentation
Embeddings object instance. Used to query and find candidate text snippets to run the question-answer model against.
[Full documentation on txtai](https://neuml.github.io/txtai) including configuration settings for embeddings, pipelines, workflows, API and a FAQ with common questions/issues is available.
#### path
```yaml
path: string
```
## Contributing
Required path to a Hugging Face SQuAD fine-tuned model. Used to answer questions.
#### quantize
```yaml
quantize: boolean
```
Enables dynamic quantization of the Hugging Face model. This is a runtime setting and doesn't save space. It is used to improve the inference time performance of the QA model.
For those who would like to contribute to txtai, please see [this guide](https://github.com/neuml/.github/blob/master/CONTRIBUTING.md).
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 41 KiB

+13
View File
@@ -0,0 +1,13 @@
# Set base image
ARG BASE_IMAGE=neuml/txtai-cpu
FROM $BASE_IMAGE
# Copy configuration
COPY config.yml .
# Run local API instance to cache models in container
RUN python -c "from txtai.api import API; API('config.yml', False)"
# Start server and listen on all interfaces
ENV CONFIG "config.yml"
ENTRYPOINT ["uvicorn", "--host", "0.0.0.0", "txtai.api:app"]
+23
View File
@@ -0,0 +1,23 @@
# Set base image
ARG BASE_IMAGE=neuml/txtai-cpu
FROM $BASE_IMAGE
# Application script to copy into image
ARG APP=api.py
# Install Lambda Runtime Interface Client and Mangum ASGI bindings
RUN pip install awslambdaric mangum
# Copy configuration
COPY config.yml .
# Run local API instance to cache models in container
RUN python -c "from txtai.api import API; API('config.yml', False)"
# Copy application
COPY $APP ./app.py
# Start runtime client using default application handler
ENV CONFIG "config.yml"
ENTRYPOINT ["python", "-m", "awslambdaric"]
CMD ["app.handler"]
+17
View File
@@ -0,0 +1,17 @@
"""
Lambda handler for a txtai API instance
"""
from mangum import Mangum
from txtai.api import app, start
# pylint: disable=C0103
# Create FastAPI application instance wrapped by Mangum
handler = None
if not handler:
# Start application
start()
# Create handler
handler = Mangum(app, lifespan="off")
+33
View File
@@ -0,0 +1,33 @@
"""
Lambda handler for txtai workflows
"""
import json
from txtai.api import API
APP = None
# pylint: disable=W0603,W0613
def handler(event, context):
"""
Runs a workflow using input event parameters.
Args:
event: input event
context: input context
Returns:
Workflow results
"""
# Create (or get) global app instance
global APP
APP = APP if APP else API("config.yml")
# Get parameters from event body
event = json.loads(event["body"])
# Run workflow and return results
return {"statusCode": 200, "headers": {"Content-Type": "application/json"}, "body": list(APP.workflow(event["name"], event["elements"]))}
+38
View File
@@ -0,0 +1,38 @@
# Set base image
ARG BASE_IMAGE=ubuntu:20.04
FROM $BASE_IMAGE
# Install GPU-enabled version of PyTorch if set
ARG GPU
# Target CPU architecture
ARG TARGETARCH
# Set Python version (i.e. 3, 3.8)
ARG PYTHON_VERSION=3
# List of txtai components to install
ARG COMPONENTS=[all]
# Locale environment variables
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
RUN \
# Install required packages
apt-get update && \
apt-get -y --no-install-recommends install libgomp1 libsndfile1 gcc g++ python${PYTHON_VERSION} python${PYTHON_VERSION}-dev python3-pip && \
rm -rf /var/lib/apt/lists && \
\
# Install txtai project and dependencies
ln -s /usr/bin/python${PYTHON_VERSION} /usr/bin/python && \
python -m pip install --no-cache-dir -U pip wheel setuptools && \
if [ -z ${GPU} ] && { [ -z ${TARGETARCH} ] || [ ${TARGETARCH} = "amd64" ] ;}; then pip install --no-cache-dir torch==2.2.2+cpu torchvision==0.17.2+cpu -f https://download.pytorch.org/whl/torch_stable.html; fi && \
python -m pip install --no-cache-dir txtai${COMPONENTS} && \
python -c "import sys, importlib.util as util; 1 if util.find_spec('nltk') else sys.exit(); import nltk; nltk.download('punkt')" && \
\
# Cleanup build packages
apt-get -y purge gcc g++ python${PYTHON_VERSION}-dev && apt-get -y autoremove
# Set default working directory
WORKDIR /app
+12
View File
@@ -0,0 +1,12 @@
# Set base image
ARG BASE_IMAGE=neuml/txtai-cpu
FROM $BASE_IMAGE
# Copy configuration
COPY config.yml .
# Run local API instance to cache models in container
RUN python -c "from txtai.api import API; API('config.yml', False)"
# Start application and wait for completion. Scheduled workflows can run indefinitely.
ENTRYPOINT ["python", "-c", "from txtai.api import API; API('config.yml').wait()"]
+13
View File
@@ -0,0 +1,13 @@
# Set base image
ARG BASE_IMAGE=neuml/txtai-cpu
FROM $BASE_IMAGE
# Copy configuration
COPY config.yml .
# Run local API instance to cache models in container
RUN python -c "from txtai.api import API; API('config.yml', False)"
# Run workflow. Requires two command line arguments: name of workflow and input elements
ENTRYPOINT ["python", "-c", "import sys; from txtai.api import API\nfor _ in API('config.yml').workflow(sys.argv[1], sys.argv[2:]): pass"]
CMD ["workflow"]
+20
View File
@@ -0,0 +1,20 @@
# Distributed embeddings clusters
The API supports combining multiple API instances into a single logical embeddings index. An example configuration is shown below.
```yaml
cluster:
shards:
- http://127.0.0.1:8002
- http://127.0.0.1:8003
```
This configuration aggregates the API instances above as index shards. Data is evenly split among each of the shards at index time. Queries are run in parallel against each shard and the results are joined together. This method allows horizontal scaling and supports very large index clusters.
This method is only recommended for data sets in the 1 billion+ records. The ANN libraries can easily support smaller data sizes and this method is not worth the additional complexity. At this time, new shards can not be added after building the initial index.
See the link below for a detailed example covering distributed embeddings clusters.
| Notebook | Description | |
|:----------|:-------------|------:|
| [Distributed embeddings cluster](https://github.com/neuml/txtai/blob/master/examples/15_Distributed_embeddings_cluster.ipynb) | Distribute an embeddings index across multiple data nodes | [![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) |
+140
View File
@@ -0,0 +1,140 @@
# Configuration
Configuration is set through YAML. In most cases, YAML keys map to fields names in Python. The [example in the previous section](../) gave a full-featured example covering a wide array of configuration options.
Each section below describes the available configuration settings.
## Embeddings
The configuration parser expects a top level `embeddings` key to be present in the YAML. All [embeddings configuration](../../embeddings/configuration) is supported.
The following example defines an embeddings index.
```yaml
path: index path
writable: true
embeddings:
path: vector model
content: true
```
Three top level settings are available to control where indexes are saved and if an index is a read-only index.
### path
```yaml
path: string
```
Path to save and load the embeddings index. Each API instance can only access a single index at a time.
### writable
```yaml
writable: boolean
```
Determines if the input embeddings index is writable (true) or read-only (false). This allows serving a read-only index.
### cloud
[Cloud storage settings](../../embeddings/configuration/cloud) can be set under a `cloud` top level configuration group.
## Pipeline
Pipelines are loaded as top level configuration parameters. Pipeline names are automatically detected in the YAML configuration and created upon startup. All [pipelines](../../pipeline) are supported.
The following example defines a series of pipelines. Note that entries below are the lower-case names of the pipeline class.
```yaml
caption:
extractor:
path: model path
labels:
summary:
tabular:
translation:
```
Under each pipeline name, configuration settings for the pipeline can be set.
## Workflow
Workflows are defined under a top level `workflow` key. Each key under the `workflow` key is the name of the workflow. Under that is a `tasks` key with each task definition.
The following example defines a workflow.
```yaml
workflow:
sumtranslate:
tasks:
- action: summary
- action: translation
```
### schedule
Schedules a workflow using a [cron expression](../../workflow/schedule).
```yaml
workflow:
index:
schedule:
cron: 0/10 * * * * *
elements: ["api params"]
tasks:
- task: service
url: api url
- action: index
```
### tasks
```yaml
tasks: list
```
Expects a list of workflow tasks. Each element defines a single workflow task. All [task configuration](../../workflow/task) is supported.
A shorthand syntax for creating tasks is supported. This syntax will automatically map task strings to an `action:value` pair.
Example below.
```yaml
workflow:
index:
tasks:
- action1
- action2
```
Each task element supports the following additional arguments.
#### action
```yaml
action: string|list
```
Both single and multi-action tasks are supported.
The action parameter works slightly different when passed via configuration. The parameter(s) needs to be converted into callable method(s). If action is a pipeline that has been defined in the current configuration, it will use that pipeline as the action.
There are three special action names `index`, `upsert` and `search`. If `index` or `upsert` are used as the action, the task will collect workflow data elements and load them into defined the embeddings index. If `search` is used, the task will execute embeddings queries for each input data element.
Otherwise, the action must be a path to a callable object or function. The configuration parser will resolve the function name and use that as the task action.
#### task
```yaml
task: string
```
Optionally sets the type of task to create. For example, this could be a `file` task or a `retrieve` task. If this is not specified, a generic task is created. [The list of workflow tasks can be found here](../../workflow).
#### args
```yaml
args: list
```
Optional list of static arguments to pass to the workflow task. These are combined with workflow data to pass to each `__call__`.
+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) |
+127
View File
@@ -0,0 +1,127 @@
# API
![api](../images/api.png#only-light)
![api](../images/api-dark.png#only-dark)
txtai has a full-featured API, backed by [FastAPI](https://github.com/tiangolo/fastapi), that can optionally be enabled for any txtai process. All functionality found in txtai can be accessed via the API.
The following is an example configuration and startup script for the API.
Note: This configuration file enables all functionality. For memory-bound systems, splitting pipelines into multiple instances is a best practice.
```yaml
# Index file path
path: /tmp/index
# Allow indexing of documents
writable: True
# Enbeddings index
embeddings:
path: sentence-transformers/nli-mpnet-base-v2
# Extractive QA
extractor:
path: distilbert-base-cased-distilled-squad
# Zero-shot labeling
labels:
# Similarity
similarity:
# Text segmentation
segmentation:
sentences: true
# Text summarization
summary:
# Text extraction
textractor:
paragraphs: true
minlength: 100
join: true
# Transcribe audio to text
transcription:
# Translate text between languages
translation:
# Workflow definitions
workflow:
sumfrench:
tasks:
- action: textractor
task: url
- action: summary
- action: translation
args: ["fr"]
sumspanish:
tasks:
- action: textractor
task: url
- action: summary
- action: translation
args: ["es"]
```
Assuming this YAML content is stored in a file named config.yml, the following command starts the API process.
```bash
CONFIG=config.yml uvicorn "txtai.api:app"
```
Uvicorn is a full-featured production-ready server. See the [Uvicorn deployment guide](https://www.uvicorn.org/deployment/) for more on configuration options.
## Connect to API
The default port for the API is 8000. See the uvicorn link above to change this.
txtai has a number of language bindings which abstract the API (see links below). Alternatively, code can be written to connect directly to the API. Documentation for a live running instance can be found at the `/docs` url (i.e. http://localhost:8000/docs). The following example runs a workflow using cURL.
```bash
curl \
-X POST "http://localhost:8000/workflow" \
-H "Content-Type: application/json" \
-d '{"name":"sumfrench", "elements": ["https://github.com/neuml/txtai"]}'
```
## Local instance
A local instance can be instantiated. In this case, a txtai application runs internally, without any network connections, providing the same consolidated functionality. This enables running txtai in Python with configuration.
The configuration above can be run in Python with:
```python
from txtai.app import Application
# Load and run workflow
app = Application(config.yml)
app.workflow("sumfrench", ["https://github.com/neuml/txtai"])
```
See this [link for a full list of methods](./methods).
## Run with containers
The API can be containerized and run. This will bring up an API instance without having to install Python, txtai or any dependencies on your machine!
[See this section for more information](../cloud/#api).
## Supported language bindings
The following programming languages have bindings with the txtai API:
- [Python](https://github.com/neuml/txtai.py)
- [JavaScript](https://github.com/neuml/txtai.js)
- [Java](https://github.com/neuml/txtai.java)
- [Rust](https://github.com/neuml/txtai.rs)
- [Go](https://github.com/neuml/txtai.go)
See the link below for a detailed example covering how to use the API.
| Notebook | Description | |
|:----------|:-------------|------:|
| [API Gallery](https://github.com/neuml/txtai/blob/master/examples/08_API_Gallery.ipynb) | Using txtai in JavaScript, Java, Rust and Go | [![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) |
+15
View File
@@ -0,0 +1,15 @@
# Methods
::: txtai.api.API
options:
inherited_members: true
filters:
- "!__del__"
- "!flows"
- "!function"
- "!indexes"
- "!limit"
- "!pipes"
- "!read"
- "!resolve"
- "!weights"
+33
View File
@@ -0,0 +1,33 @@
# Security
The default implementation of an API service runs via HTTP and is fully open. If the service is being run as a prototype on an internal network, that may be fine. In most scenarios, the connection should at least be encrypted. Authorization is another built-in feature that requires a valid API token with each request. See below for more.
## HTTPS
The default API service command starts a Uvicorn server as a HTTP service on port 8000. To run a HTTPS service, consider the following options.
- [TLS Proxy Server](https://fastapi.tiangolo.com/deployment/https/). *Recommended choice*. With this configuration, the txtai API service runs as a HTTP service only accessible on the localhost/local network. The proxy server handles all encryption and redirects requests to local services. See this [example configuration](https://www.uvicorn.org/deployment/#running-behind-nginx) for more.
- [Uvicorn SSL Certificate](https://www.uvicorn.org/deployment/). Another option is setting the SSL certificate on the Uvicorn service. This works in simple situations but gets complex when hosting multiple txtai or other related services.
## Authorization
Authorization requires a valid API token with each API request. This token is sent as a HTTP `Authorization` header.
*Server*
```bash
CONFIG=config.yml TOKEN=<sha256 encoded token> uvicorn "txtai.api:app"
```
*Client*
```bash
curl \
-X POST "http://localhost:8000/workflow" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{"name":"sumfrench", "elements": ["https://github.com/neuml/txtai"]}'
```
It's important to note that HTTPS **must** be enabled using one of the methods mentioned above. Otherwise, tokens will be exchanged as clear text.
Authentication and Authorization can be fully customized. See the [dependencies](../customization#dependencies) section for more.
+182
View File
@@ -0,0 +1,182 @@
# Cloud
![cloud](images/cloud.png#only-light)
![cloud](images/cloud-dark.png#only-dark)
Scalable cloud-native applications can be built with txtai. The following cloud runtimes are supported.
- Container Orchestration Systems (i.e. Kubernetes)
- Docker Engine
- Serverless Compute
- txtai.cloud (coming in 2024)
Images for txtai are available on Docker Hub for [CPU](https://hub.docker.com/r/neuml/txtai-cpu) and [GPU](https://hub.docker.com/r/neuml/txtai-gpu) installs. The CPU install is recommended when GPUs aren't available given the image is half the size.
The base txtai images have no models installed and models will be downloaded each time the container starts. Caching the models is recommended as that will significantly reduce container start times. This can be done a couple different ways.
- Create a container with the [models cached](#container-image-model-caching)
- Set the transformers cache environment variable and mount that volume when starting the image
```bash
docker run -v <local dir>:/models -e TRANSFORMERS_CACHE=/models --rm -it <docker image>
```
## Build txtai images
The txtai images found on Docker Hub are configured to support most situations. This image can be locally built with different options as desired.
Examples build commands below.
```bash
# Get Dockerfile
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/base/Dockerfile
# Build Ubuntu 20.04 image running Python 3.8
docker build -t txtai --build-arg BASE_IMAGE=ubuntu:20.04 --build-arg PYTHON_VERSION=3.8 .
# Build image with GPU support
docker build -t txtai --build-arg GPU=1 .
# Build minimal image with the base txtai components
docker build -t txtai --build-arg COMPONENTS= .
```
## Container image model caching
As mentioned previously, model caching is recommended to reduce container start times. The following commands demonstrate this. In all cases, it is assumed a config.yml file is present in the local directory with the desired configuration set.
### API
This section builds an image that caches models and starts an API service. The config.yml file should be configured with the desired components to expose via the API.
The following is a sample config.yml file that creates an Embeddings API service.
```yaml
# config.yml
writable: true
embeddings:
path: sentence-transformers/nli-mpnet-base-v2
content: true
```
The next section builds the image and starts an instance.
```bash
# Get Dockerfile
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/api/Dockerfile
# CPU build
docker build -t txtai-api .
# GPU build
docker build -t txtai-api --build-arg BASE_IMAGE=neuml/txtai-gpu .
# Run
docker run -p 8000:8000 --rm -it txtai-api
```
### Service
This section builds a scheduled workflow service. [More on scheduled workflows can be found here.](../workflow/schedule)
```bash
# Get Dockerfile
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/service/Dockerfile
# CPU build
docker build -t txtai-service .
# GPU build
docker build -t txtai-service --build-arg BASE_IMAGE=neuml/txtai-gpu .
# Run
docker run --rm -it txtai-service
```
### Workflow
This section builds a single run workflow. [Example workflows can be found here.](../examples/#workflows)
```bash
# Get Dockerfile
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/workflow/Dockerfile
# CPU build
docker build -t txtai-workflow .
# GPU build
docker build -t txtai-workflow --build-arg BASE_IMAGE=neuml/txtai-gpu .
# Run
docker run --rm -it txtai-workflow <workflow name> <workflow parameters>
```
## Serverless Compute
One of the most powerful features of txtai is building YAML-configured applications with the "build once, run anywhere" approach. API instances and workflows can run locally, on a server, on a cluster or serverless.
Serverless instances of txtai are supported on frameworks such as [AWS Lambda](https://aws.amazon.com/lambda/), [Google Cloud Functions](https://cloud.google.com/functions), [Azure Cloud Functions](https://azure.microsoft.com/en-us/services/functions/) and [Kubernetes](https://kubernetes.io/) with [Knative](https://knative.dev/docs/).
### AWS Lambda
The following steps show a basic example of how to build a serverless API instance with [AWS SAM](https://github.com/aws/serverless-application-model).
- Create config.yml and template.yml
```yaml
# config.yml
writable: true
embeddings:
path: sentence-transformers/nli-mpnet-base-v2
content: true
```
```yaml
# template.yml
Resources:
txtai:
Type: AWS::Serverless::Function
Properties:
PackageType: Image
MemorySize: 3000
Timeout: 20
Events:
Api:
Type: Api
Properties:
Path: "/{proxy+}"
Method: ANY
Metadata:
Dockerfile: Dockerfile
DockerContext: ./
DockerTag: api
```
- Install [AWS SAM](https://pypi.org/project/aws-sam-cli/)
- Run following
```bash
# Get Dockerfile and application
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/aws/api.py
wget https://raw.githubusercontent.com/neuml/txtai/master/docker/aws/Dockerfile
# Build the docker image
sam build
# Start API gateway and Lambda instance locally
sam local start-api -p 8000 --warm-containers LAZY
# Verify instance running (should return 0)
curl http://localhost:8080/count
```
If successful, a local API instance is now running in a "serverless" fashion. This configuration can be deployed to AWS using SAM. [See this link for more information.](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-cli-command-reference-sam-deploy.html)
### Kubernetes with Knative
txtai scales with container orchestration systems. This can be self-hosted or with a cloud provider such as [Amazon Elastic Kubernetes Service](https://aws.amazon.com/eks/), [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine) and [Azure Kubernetes Service](https://azure.microsoft.com/en-us/services/kubernetes-service/). There are also other smaller providers with a managed Kubernetes offering.
A full example covering how to build a serverless txtai application on Kubernetes with Knative [can be found here](https://medium.com/neuml/serverless-vector-search-with-txtai-96f6163ab972).
## txtai.cloud
[txtai.cloud](https://txtai.cloud) is a planned effort that will offer an easy and secure way to run hosted txtai applications.
+83
View File
@@ -0,0 +1,83 @@
# ANN
Approximate Nearest Neighbor (ANN) index configuration for storing vector embeddings.
## backend
```yaml
backend: faiss|hnsw|annoy|numpy|torch|pgvector|custom
```
Sets the ANN backend. Defaults to `faiss`. Additional backends are available via the [ann](../../../install/#ann) extras package. Set custom backends via setting this parameter to the fully resolvable class string.
Backend-specific settings are set with a corresponding configuration object having the same name as the backend (i.e. annoy, faiss, or hnsw). These are optional and set to defaults if omitted.
### faiss
```yaml
faiss:
components: comma separated list of components - defaults to "IDMap,Flat" for small
indices and "IVFx,Flat" for larger indexes where
x = min(4 * sqrt(embeddings count), embeddings count / 39)
automatically calculates number of IVF cells when omitted (supports "IVF,Flat")
nprobe: search probe setting (int) - defaults to x/16 (as defined above)
for larger indexes
nflip: same as nprobe - only used with binary hash indexes
quantize: store vectors with x-bit precision vs 32-bit (boolean|int)
true sets 8-bit precision, false disables, int sets specified
precision
mmap: load as on-disk index (boolean) - trade query response time for a
smaller RAM footprint, defaults to false
sample: percent of data to use for model training (0.0 - 1.0)
reduces indexing time for larger (>1M+ row) indexes, defaults to 1.0
```
Faiss supports both floating point and binary indexes. Floating point indexes are the default. Binary indexes are used when indexing scalar-quantized datasets.
See the following Faiss documentation links for more information.
- [Guidelines for choosing an index](https://github.com/facebookresearch/faiss/wiki/Guidelines-to-choose-an-index)
- [Index configuration summary](https://github.com/facebookresearch/faiss/wiki/Faiss-indexes)
- [Index Factory](https://github.com/facebookresearch/faiss/wiki/The-index-factory)
- [Binary Indexes](https://github.com/facebookresearch/faiss/wiki/Binary-indexes)
- [Search Tuning](https://github.com/facebookresearch/faiss/wiki/Faster-search)
### hnsw
```yaml
hnsw:
efconstruction: ef_construction param for init_index (int) - defaults to 200
m: M param for init_index (int) - defaults to 16
randomseed: random-seed param for init_index (int) - defaults to 100
efsearch: ef search param (int) - defaults to None and not set
```
See [Hnswlib documentation](https://github.com/nmslib/hnswlib/blob/master/ALGO_PARAMS.md) for more information on these parameters.
### annoy
```yaml
annoy:
ntrees: number of trees (int) - defaults to 10
searchk: search_k search setting (int) - defaults to -1
```
See [Annoy documentation](https://github.com/spotify/annoy#full-python-api) for more information on these parameters. Note that annoy indexes can not be modified after creation, upserts/deletes and other modifications are not supported.
### numpy
```yaml
numpy:
quantize: number of quantized bits when working with quantized vectors (int)
```
The NumPy backend is a k-nearest neighbors backend. It's designed for simplicity and works well with smaller datasets.
The `torch` backend supports the same options. The only difference is that the vectors can be search using GPUs.
### pgvector
```yaml
pgvector:
url: database url connection string, alternatively can be set via
ANN_URL environment variable
table: database table to store vectors - defaults to `vectors`
efconstruction: ef_construction param (int) - defaults to 200
m: M param for init_index (int) - defaults to 16
```
The pgvector backend stores embeddings in a Postgres database. See the [pgvector documentation](https://github.com/pgvector/pgvector-python?tab=readme-ov-file#sqlalchemy) for more information on these parameters. See the [SQLAlchemy](https://docs.sqlalchemy.org/en/20/core/engines.html#database-urls) documentation for more information on how to construct url connection strings.
+98
View File
@@ -0,0 +1,98 @@
# Cloud
The following describes parameters used to sync indexes with cloud storage. Cloud object storage, the [Hugging Face Hub](https://huggingface.co/models) and custom providers are all supported.
Parameters are set via the [embeddings.load](../../methods/#txtai.embeddings.base.Embeddings.load) and [embeddings.save](../../methods/#txtai.embeddings.base.Embeddings.save) methods.
## provider
```yaml
provider: string
```
Cloud provider. Can be one of the following:
- Cloud object storage. Set to one of these [providers](https://libcloud.readthedocs.io/en/stable/storage/supported_providers.html).
- Hugging Face Hub. Set to `huggingface-hub`.
- Custom providers. Set to the full class path of the custom provider.
## container
```yaml
container: string
```
Container/bucket/directory/repository name. Embeddings will be stored in the container with the filename specified by the `path` configuration.
## Cloud object storage configuration
In addition to the above common configuration, the cloud object storage provider has the following additional configuration parameters. Note that some cloud providers do not need any of these parameters and can use implicit authentication with service accounts.
See the [libcloud documentation](https://libcloud.readthedocs.io/en/stable/apidocs/libcloud.common.html#module-libcloud.common.base) for more information on these parameters.
### key
```yaml
key: string
```
Provider-specific access key. Can also be set via `ACCESS_KEY` environment variable. Ensure the configuration file is secured if added to the file. When using implicit authentication, set this to a value such as 'using-implicit-auth'.
### secret
```yaml
secret: string
```
Provider-specific access secret. Can also be set via `ACCESS_SECRET` environment variable. Ensure the configuration file is secured if added to the file. When using implicit authentication, this option is not required.
### host
```yaml
host: string
```
Optional server host name. Set when using a local cloud storage server.
### port
```yaml
port: int
```
Optional server port. Set when using a local cloud storage server.
### token
```yaml
token: string
```
Optional temporary session token
### region
```yaml
region: string
```
Optional parameter to specify the storage region, provider-specific.
## Hugging Face Hub configuration
The huggingface-hub provider supports the following additional configuration parameters. More on these parameters can be found in the [Hugging Face Hub's documentation](https://huggingface.co/docs/huggingface_hub/main/en/package_reference/overview).
### revision
```yaml
revision: string
```
Optional Git revision id which can be a branch name, a tag, or a commit hash
### cache
```yaml
cache: string
```
Path to the folder where cached files are stored
### token
```yaml
token: string|boolean
```
Token to be used for the download. If set to True, the token will be read from the Hugging Face config folder.
+60
View File
@@ -0,0 +1,60 @@
# Database
Databases store metadata, text and binary content.
## content
```yaml
content: boolean|sqlite|duckdb|client|url|custom
```
Enables content storage. When true, the default storage engine, `sqlite` will be used to save metadata.
Client-server connections are supported with either `client` or a full connection URL. When set to `client`, the CLIENT_URL environment variable must be set to the full connection URL. See the [SQLAlchemy](https://docs.sqlalchemy.org/en/20/core/engines.html#database-urls) documentation for more information on how to construct connection strings for client-server databases.
Add custom storage engines via setting this parameter to the fully resolvable class string.
Content storage specific settings are set with a corresponding configuration object having the same name as the content storage engine (i.e. duckdb or sqlite). These are optional and set to defaults if omitted.
### sqlite
```yaml
sqlite:
wal: enable write-ahead logging - allows concurrent read/write operations,
defaults to false
```
## objects
```yaml
objects: boolean|image|pickle
```
Enables object storage. Supports storing binary content. Requires content storage to also be enabled.
Object encoding options are:
- `standard`: Default encoder when boolean set. Encodes and decodes objects as byte arrays.
- `image`: Image encoder. Encodes and decodes objects as image objects.
- `pickle`: Pickle encoder. Encodes and decodes objects with the pickle module. Supports arbitrary objects.
## functions
```yaml
functions: list
```
List of functions with user-defined SQL functions, only used when [content](#content) is enabled. Each list element must be one of the following:
- function
- callable object
- dict with fields for name, argcount and function
[An example can be found here](../../query#custom-sql-functions).
## query
```yaml
query:
path: sets the path for the query model - this can be any model on the
Hugging Face Model Hub or a local file path.
prefix: text prefix to prepend to all inputs
maxlength: maximum generated sequence length
```
Query translation model. Translates natural language queries to txtai compatible SQL statements.
+47
View File
@@ -0,0 +1,47 @@
# General
General configuration options that don't fit elsewhere.
## keyword
```yaml
keyword: boolean
```
Enables sparse keyword indexing for this embeddings.
## hybrid
```yaml
hybrid: boolean
```
Enables hybrid (sparse + dense) indexing for this embeddings.
## indexes
```yaml
indexes: dict
```
Key value pairs defining subindexes for this embeddings. Each key is the index name and the value is the full configuration. This configuration can use any of the available configurations in a standard embeddings instance.
## autoid
```yaml
format: int|uuid function
```
Sets the auto id generation method. When this is not set, an autogenerated numeric sequence is used. This also supports [UUID generation functions](https://docs.python.org/3/library/uuid.html#uuid.uuid1). For example, setting this value to `uuid4` will generate random UUIDs. Setting this to `uuid5` will generate deterministic UUIDs for each input data row.
## columns
```yaml
columns:
text: name of the text column
object: name of the object column
```
Sets the `text` and `object` column names. Defaults to `text` and `object` if not provided.
## format
```yaml
format: json|pickle
```
Sets the configuration storage format. Defaults to `json`.
+70
View File
@@ -0,0 +1,70 @@
# Graph
Enable graph storage via the `graph` parameter. This component requires the [graph](../../../install/#graph) extras package.
When enabled, a graph network is built using the embeddings index. Graph nodes are synced with each embeddings index operation (index/upsert/delete). Graph edges are created using the embeddings index upon completion of each index/upsert/delete embeddings index call.
## backend
```yaml
backend: networkx|rdbms|custom
```
Sets the graph backend. Defaults to `networkx`.
Add custom graph storage engines via setting this parameter to the fully resolvable class string.
The `rdbms` backend has the following additional settings.
### rdbms
```yaml
url: database url connection string, alternatively can be set via the
GRAPH_URL environment variable
nodes: table to store node data, defaults to `nodes`
edges: table to store edge data, defaults to `edges`
```
## batchsize
```yaml
batchsize: int
```
Batch query size, used to query embeddings index - defaults to 256.
## limit
```yaml
limit: int
```
Maximum number of results to return per embeddings query - defaults to 15.
## minscore
```yaml
minscore: float
```
Minimum score required to consider embeddings query matches - defaults to 0.1.
## approximate
```yaml
approximate: boolean
```
When true, queries only run for nodes without edges - defaults to true.
## topics
```yaml
topics:
algorithm: community detection algorithm (string), options are
louvain (default), greedy, lpa
level: controls number of topics (string), options are best (default) or first
resolution: controls number of topics (int), larger values create more
topics (int), defaults to 100
labels: scoring index method used to build topic labels (string)
options are bm25 (default), tfidf, sif
terms: number of frequent terms to use for topic labels (int), defaults to 4
stopwords: optional list of stop words to exclude from topic labels
categories: optional list of categories used to group topics, allows
granular topics with broad categories grouping topics
```
Enables topic modeling. Defaults are tuned so that in most cases these values don't need to be changed (except for categories). These parameters are available for advanced use cases where one wants full control over the community detection process.
+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.embeddings import Embeddings
embeddings = Embeddings()
```
Creates a new embeddings instance, using [all-MiniLM-L6-v2](https://hf.co/sentence-transformers/all-MiniLM-L6-v2) as the vector model, [Faiss](https://faiss.ai/) as the ANN index backend and content disabled.
```python
from txtai.embeddings import Embeddings
embeddings = Embeddings(content=True)
```
Is the same as above except it adds in [SQLite](https://www.sqlite.org/index.html) for content storage.
The following sections link to all the available configuration options.
## [ANN](./ann)
The default vector index backend is Faiss.
## [Cloud](./cloud)
Embeddings databases can optionally be synced with cloud storage.
## [Database](./database)
Content storage is disabled by default. When enabled, SQLite is the default storage engine.
## [General](./general)
General configuration that doesn't fit elsewhere.
## [Graph](./graph)
An accomplying graph index can be created with an embeddings database. This enables topic modeling, path traversal and more. [NetworkX](https://github.com/networkx/networkx) is the default graph index.
## [Scoring](./scoring)
Sparse keyword indexing and word vectors term weighting.
## [Vectors](./vectors)
Vector search is enabled by converting text and other binary data into embeddings vectors. These vectors are then stored in an ANN index. The vector model is optional and a default model is used when not provided.
+32
View File
@@ -0,0 +1,32 @@
# Scoring
Enable scoring support via the `scoring` parameter.
This scoring instance can serve two purposes, depending on the settings.
One use case is building sparse/keyword indexes. This occurs when the `terms` parameter is set to `True`.
The other use case is with word vector term weighting. This feature has been available since the initial version but isn't quite as common anymore.
The following covers the available options.
## method
```yaml
method: bm25|tfidf|sif|custom
```
Sets the scoring method. Add custom scoring via setting this parameter to the fully resolvable class string.
## terms
```yaml
terms: boolean
```
Enables term frequency sparse arrays for a scoring instance. This is the backend for sparse keyword indexes.
## normalize
```yaml
normalize: boolean
```
Enables normalized scoring (ranging from 0 to 1). When enabled, statistics from the index will be used to calculate normalized scores.
+139
View File
@@ -0,0 +1,139 @@
# Vectors
The following covers available vector model configuration options.
## path
```yaml
path: string
```
Sets the path for a vectors model. When using a transformers/sentence-transformers model, this can be any model on the
[Hugging Face Hub](https://huggingface.co/models) or a local file path. Otherwise, it must be a local file path to a word embeddings model.
## method
```yaml
method: transformers|sentence-transformers|llama.cpp|litellm|external|words
```
Embeddings method to use. If the method is not provided, it is inferred using the `path`.
`sentence-transformers`, `llama.cpp`, `litellm` and `words` require the [vectors](../../../install/#vectors) extras package to be installed.
### transformers
Builds embeddings using a transformers model. While this can be any transformers model, it works best with
[models trained](https://huggingface.co/models?pipeline_tag=sentence-similarity) to build embeddings.
Both `mean` and `cls` pooling are supported and automatically infered from the model. The pooling method can be overwritten by changing the method
from `transformers` to `meanpooling` or `clspooling` respectively.
### sentence-transformers
Same as transformers but loads models with the [sentence-transformers](https://github.com/UKPLab/sentence-transformers) library.
### llama.cpp
Builds embeddings using a llama.cpp model. Supports both local and remote GGUF paths on the HF Hub.
### litellm
Builds embeddings using a LiteLLM model. See the [LiteLLM documentation](https://litellm.vercel.app/docs/providers) for the options available with LiteLLM models.
### words
Builds embeddings using a word embeddings model. Transformers models are the preferred vector backend in most cases. Word embeddings models may be deprecated in the future.
#### storevectors
```yaml
storevectors: boolean
```
Enables copying of a vectors model set in path into the embeddings models output directory on save. This option enables a fully encapsulated index with no external file dependencies.
#### pca
```yaml
pca: int
```
Removes _n_ principal components from generated embeddings. When enabled, a TruncatedSVD model is built to help with dimensionality reduction. After pooling of vectors creates a single embedding, this method is applied.
### external
Embeddings are created via an external model or API. Requires setting the [transform](#transform) parameter to a function that translates data into embeddings.
#### transform
```yaml
transform: function
```
When method is `external`, this function transforms input content into embeddings. The input to this function is a list of data. This method must return either a numpy array or list of numpy arrays.
## gpu
```yaml
gpu: boolean|int|string|device
```
Set the target device. Supports true/false, device id, device string and torch device instance. This is automatically derived if omitted.
## batch
```yaml
batch: int
```
Sets the transform batch size. This parameter controls how input streams are chunked and vectorized.
## encodebatch
```yaml
encodebatch: int
```
Sets the encode batch size. This parameter controls the underlying vector model batch size. This often corresponds to a GPU batch size, which controls GPU memory usage.
## dimensionality
```yaml
dimensionality: int
```
Enables truncation of vectors to this dimensionality. This is only useful for models trained to store more important information in earlier dimensions such as [Matryoshka Representation Learning (MRL)](https://huggingface.co/blog/matryoshka).
## quantize
```yaml
quantize: int|boolean
```
Enables scalar quantization at the specified precision. Supports 1-bit through 8-bit quantization. Scalar quantization transforms continuous floating point values
to discrete unsigned integers. Quantized data storage is only supported by the `faiss`, `numpy` and `torch` ANN backends.
This parameter supports booleans for backwards compatability. When set to true/false, this flag sets [faiss.quantize](../ann/#faiss).
## instructions
```yaml
instructions:
query: prefix for queries
data: prefix for indexing
```
Instruction-based models use prefixes to modify how embeddings are computed. This is especially useful with asymmetric search, which is when the query and indexed data are of vastly different lengths. In other words, short queries with long documents.
[E5-base](https://huggingface.co/intfloat/e5-base) is an example of a model that accepts instructions. It takes `query: ` and `passage: ` prefixes and uses those to generate embeddings that work well for asymmetric search.
## models
```yaml
models: dict
```
Loads and stores vector models in this cache. This is primarily used with subindexes but can be set on any embeddings instance. This prevents the same model from being loaded multiple times when working with multiple embeddings instances.
## tokenize
```yaml
tokenize: boolean
```
Enables string tokenization (defaults to false). This method applies tokenization rules that only work with English language text. It's not recommended for use with recent vector models.
## vectors
```yaml
vectors: dict
```
Passes these additional parameters to the underlying vector model.
+105
View File
@@ -0,0 +1,105 @@
# Embeddings
![embeddings](../images/embeddings.png#only-light)
![embeddings](../images/embeddings-dark.png#only-dark)
Embeddings databases are the engine that delivers semantic search. Data is transformed into embeddings vectors where similar concepts will produce similar vectors. Indexes both large and small are built with these vectors. The indexes are used to find results that have the same meaning, not necessarily the same keywords.
The following code snippet shows how to build and search an embeddings index.
```python
from txtai.embeddings import Embeddings
# Create embeddings model, backed by sentence-transformers & transformers
embeddings = Embeddings(path="sentence-transformers/nli-mpnet-base-v2")
data = [
"US tops 5 million confirmed virus cases",
"Canada's last fully intact ice shelf has suddenly collapsed, " +
"forming a Manhattan-sized iceberg",
"Beijing mobilises invasion craft along coast as Taiwan tensions escalate",
"The National Park Service warns against sacrificing slower friends " +
"in a bear attack",
"Maine man wins $1M from $25 lottery ticket",
"Make huge profits without work, earn up to $100,000 a day"
]
# Index the list of text
embeddings.index(data)
print(f"{'Query':20} Best Match")
print("-" * 50)
# Run an embeddings search for each query
for query in ("feel good story", "climate change", "public health story", "war",
"wildlife", "asia", "lucky", "dishonest junk"):
# Extract uid of first result
# search result format: (uid, score)
uid = embeddings.search(query, 1)[0][0]
# Print text
print(f"{query:20} {data[uid]}")
```
## Build
An embeddings instance is [configuration-driven](configuration) based on what is passed in the constructor. Vectors are stored with the option to also [store content](configuration/database#content). Content storage enables additional filtering and data retrieval options.
The example above sets a specific embeddings vector model via the [path](configuration/vectors/#path) parameter. An embeddings instance with no configuration can also be created.
```python
embeddings = Embeddings()
```
In this case, when loading and searching for data, the [default transformers vector model](https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2) is used to vectorize data. See the [model guide](../models) for current model recommentations.
## Index
After creating a new embeddings instance, the next step is adding data to it.
```python
embeddings.index(rows)
```
The index method takes an iterable and supports the following formats for each element.
- `(id, data, tags)` - default processing format
| Element | Description |
| ----------- | ------------------------------------------------------------- |
| id | unique record id |
| data | input data to index, can be text, a dictionary or object |
| tags | optional tags string, used to mark/label data as it's indexed |
- `(id, data)`
Same as above but without tags.
- `data`
Single element to index. In this case, unique id's will automatically be generated. Note that for generated id's, [upsert](methods/#txtai.embeddings.base.Embeddings.upsert) and [delete](methods/#txtai.embeddings.base.Embeddings.delete) calls require a separate search to get the target ids.
When the data field is a dictionary, text is passed via the `text` key, binary objects via the `object` key. Note that [content](configuration/database#content) must be enabled to store metadata and [objects](configuration/database#objects) to store binary object data. The `id` and `tags` keys will be extracted, if provided.
The input iterable can be a list or generator. [Generators](https://wiki.python.org/moin/Generators) help with indexing very large datasets as only portions of the data is in memory at any given time.
More information on indexing can be found in the [index guide](indexing).
## Search
Once data is indexed, it is ready for search.
```python
embeddings.search(query, limit)
```
The search method takes two parameters, the query and query limit. The results format is different based on whether [content](configuration/database#content) is stored or not.
- List of `(id, score)` when content is _not_ stored
- List of `{**query columns}` when content is stored
Both natural language and SQL queries are supported. More information can be found in the [query guide](query).
## More examples
See [this link](../examples/#semantic-search) for a full list of embeddings examples.
+130
View File
@@ -0,0 +1,130 @@
# 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.
## Index vs Upsert
Data is loaded into an index with either an [index](../methods#txtai.embeddings.base.Embeddings.index) or [upsert](../methods#txtai.embeddings.base.Embeddings.upsert) call.
```python
embeddings.index([(uid, text, None) for uid, text in enumerate(data)])
embeddings.upsert([(uid, text, None) for uid, text in enumerate(data)])
```
The `index` call will build a brand new index replacing an existing one. `upsert` will insert or update records. `upsert` ops do _not_ require a full index rebuild.
## Save
Indexes can be stored in a directory using the [save](../methods/#txtai.embeddings.base.Embeddings.save) method.
```python
embeddings.save("/path/to/save")
```
Compressed indexes are also supported.
```python
embeddings.save("/path/to/save/index.tar.gz")
```
In addition to saving indexes locally, they can also be persisted to [cloud storage](../configuration/cloud).
```python
embeddings.save("/path/to/save/index.tar.gz", cloud={...})
```
This is especially useful when running in a serverless context or otherwise running on temporary compute. Cloud storage is only supported with compressed indexes.
Embeddings indexes can be restored using the [load](../methods/#txtai.embeddings.base.Embeddings.load) method.
```python
embeddings.load("/path/to/load")
```
## Delete
Content can be removed from the index with the [delete](../methods#txtai.embeddings.base.Embeddings.delete) method. This method takes a list of ids to delete.
```python
embeddings.delete(ids)
```
## Reindex
When [content storage](../configuration/database#content) is enabled, [reindex](../methods#txtai.embeddings.base.Embeddings.reindex) can be called to rebuild the index with new settings. For example, the backend can be switched from faiss to hnsw or the vector model can be updated. This prevents having to go back to the original raw data.
```python
embeddings.reindex(path="sentence-transformers/all-MiniLM-L6-v2", backend="hnsw")
```
## Graph
Dimensionality reduction with UMAP combined with HDBSCAN is a popular topic modeling method found in a number of libraries. txtai takes a different approach with a semantic graph.
Enabling a [graph network](../configuration/graph) adds a semantic graph at index time as data is being vectorized. Vector embeddings are used to create relationships in the graph. Finally, community detection algorithms build topic clusters. Semantic graphs can also be used to analyze data connectivity.
This approach has the advantage of only having to vectorize data once. It also has the advantage of better topic precision given there isn't a dimensionality reduction operation (UMAP). Semantic graph examples are shown below.
Get a mapping of discovered topics to associated ids.
```python
embeddings.graph.topics
```
Show the most central nodes in the index.
```python
embeddings.graph.centrality()
```
Show how node 1 and node 2 are connected in the graph.
```python
embeddings.graph.showpath(id1, id2)
```
Graphs are persisted alongside an embeddings index. Each save and load will also save and load the graph.
## Sparse vectors
Scoring instances can create a standalone [keyword](../configuration/general#keyword) or sparse index (BM25, TF-IDF). This enables [hybrid](../configuration/general/#hybrid) search when there is an available dense vector index.
The terms `sparse vector index`, `keyword index`, `terms index` and `scoring index` are used interchangeably throughout txtai's documentation.
See [this link](../../examples/#semantic-search) to learn more.
## Subindexes
An embeddings instance can optionally have associated [subindexes](../configuration/general/#indexes), which are also embeddings databases. This enables indexing additional fields, vector models and much more.
## Word vectors
When using [word vector backed models](../configuration/vectors#words) with scoring set, a separate call is required before calling `index` as follows:
```python
embeddings.score(rows)
embeddings.index(rows)
```
Both calls are required to support generator-backed iteration of data with word vectors models.
+22
View File
@@ -0,0 +1,22 @@
# Methods
::: txtai.embeddings.Embeddings
options:
filters:
- "!columns"
- "!createann"
- "!createcloud"
- "!createdatabase"
- "!creategraph"
- "!createids"
- "!createindexes"
- "!createscoring"
- "!checkarchive"
- "!configure"
- "!defaultallowed"
- "!defaults"
- "!initindex"
- "!loadconfig"
- "!loadquery"
- "!loadvectors"
- "!saveconfig"
+236
View File
@@ -0,0 +1,236 @@
# 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
In the simplest case, the query is text and the results are index text that is most similar to the query text.
```python
embeddings.search("feel good story")
embeddings.search("wildlife")
```
The queries above [search](../methods#txtai.embeddings.base.Embeddings.search) the index for similarity matches on `feel good story` and `wildlife`. If content storage is enabled, a list of `{**query columns}` is returned. Otherwise, a list of `(id, score)` tuples are returned.
## SQL
txtai supports more complex queries with SQL. This is only supported if [content storage](../configuration/database#content) is enabled. txtai has a translation layer that analyzes input SQL statements and combines similarity results with content stored in a relational database.
SQL queries are run through `embeddings.search` like natural language queries but the examples below only show the SQL query for conciseness.
```python
embeddings.search("SQL query")
```
### Similar clause
The similar clause is a txtai function that enables similarity searches with SQL.
```sql
SELECT id, text, score FROM txtai WHERE similar('feel good story')
```
The similar clause takes the following arguments:
```sql
similar("query", "number of candidates", "index", "weights")
```
| Argument | Description |
| --------------------- | ---------------------------------------|
| query | natural language query to run |
| number of candidates | number of candidate results to return |
| index | target index name |
| weights | hybrid score weights |
The txtai query layer joins results from two separate components, a relational store and a similarity index. With a similar clause, a similarity search is run and those ids are fed to the underlying database query.
The number of candidates should be larger than the desired number of results when applying additional filter clauses. This ensures that `limit` results are still returned after applying additional filters. If the number of candidates is not specified, it is defaulted as follows:
- For a single query filter clause, the default is the query limit
- With multiple filtering clauses, the default is 10x the query limit
The index name is only applicable when [subindexes](../configuration/general/#indexes) are enabled. This specifies the index to use for the query.
Weights sets the hybrid score weights when an index has both a sparse and dense index.
### Dynamic columns
Content can be indexed in multiple ways when content storage is enabled. [Remember that input documents](../#index) take the form of `(id, data, tags)` tuples. If data is a string or binary content, it's indexed and searchable with `similar()` clauses.
If data is a dictionary, then all fields in the dictionary are stored and available via SQL. The `text` field or [field specified in the index configuration](../configuration/general/#columns) is indexed and searchable with `similar()` clauses.
For example:
```python
embeddings.index([{"text": "text to index", "flag": True,
"actiondate": "2022-01-01"}])
```
With the above input data, queries can now have more complex filters.
```sql
SELECT text, flag, actiondate FROM txtai WHERE similar('query') AND flag = 1
AND actiondate >= '2022-01-01'
```
txtai's query layer automatically detects columns and translates queries into a format that can be understood by the underlying database.
Nested dictionaries/JSON is supported and can be escaped with bracket statements.
```python
embeddings.index([{"text": "text to index",
"parent": {"child element": "abc"}}])
```
```sql
SELECT text FROM txtai WHERE [parent.child element] = 'abc'
```
Note the bracket statement escaping the nested column with spaces in the name.
### Bind parameters
txtai has support for SQL bind parameters.
```python
# Query with a bind parameter for similar clause
query = "SELECT id, text, score FROM txtai WHERE similar(:x)"
results = embeddings.search(query, parameters={"x": "feel good story"})
# Query with a bind parameter for column filter
query = "SELECT text, flag, actiondate FROM txtai WHERE flag = :x"
results = embeddings.search(query, parameters={"x": 1})
```
### Aggregation queries
The goal of txtai's query language is to closely support all functions in the underlying database engine. The main challenge is ensuring dynamic columns are properly escaped into the engines native query function.
Aggregation query examples.
```sql
SELECT count(*) FROM txtai WHERE similar('feel good story') AND score >= 0.15
SELECT max(length(text)) FROM txtai WHERE similar('feel good story')
AND score >= 0.15
SELECT count(*), flag FROM txtai GROUP BY flag ORDER BY count(*) DESC
```
## Binary objects
txtai has support for storing and retrieving binary objects. Binary objects can be retrieved as shown in the example below.
```python
# Create embeddings index with content and object storage enabled
embeddings = Embeddings(content=True, objects=True)
# Get an image
request = open("demo.gif", "rb")
# Insert record
embeddings.index([("txtai", {"text": "txtai executes machine-learning workflows.",
"object": request.read()})])
# Query txtai and get associated object
query = "SELECT object FROM txtai WHERE similar('machine learning') LIMIT 1"
result = embeddings.search(query)[0]["object"]
# Query binary content with a bind parameter
query = "SELECT object FROM txtai WHERE similar(:x) LIMIT 1"
results = embeddings.search(query, parameters={"x": request.read()})
```
## Custom SQL functions
Custom, user-defined SQL functions extend selection, filtering and ordering clauses with additional logic. For example, the following snippet defines a function that translates text using a translation pipeline.
```python
# Translation pipeline
translate = Translation()
# Create embeddings index
embeddings = Embeddings(path="sentence-transformers/nli-mpnet-base-v2",
content=True,
functions=[translate]})
# Run a search using a custom SQL function
embeddings.search("""
SELECT
text,
translation(text, 'de', null) 'text (DE)',
translation(text, 'es', null) 'text (ES)',
translation(text, 'fr', null) 'text (FR)'
FROM txtai WHERE similar('feel good story')
LIMIT 1
""")
```
## Query translation
Natural language queries with filters can be converted to txtai-compatible SQL statements with query translation. For example:
```python
embeddings.search("feel good story since yesterday")
```
can be converted to a SQL statement with a similar clause and date filter.
```sql
select id, text, score from txtai where similar('feel good story') and
entry >= date('now', '-1 day')
```
This requires setting a [query translation model](../configuration/database#query). The default query translation model is [t5-small-txtsql](https://huggingface.co/NeuML/t5-small-txtsql) but this can easily be finetuned to handle different use cases.
## Hybrid search
When an embeddings database has both a sparse and dense index, both indexes will be queried and the results will be equally weighted unless otherwise specified.
```python
embeddings.search("query", weights=0.5)
embeddings.search("SELECT id, text, score FROM txtai WHERE similar('query', 0.5)")
```
## Graph search
If an embeddings database has an associated graph network, graph searches can be run. The search syntax below uses [openCypher](https://github.com/opencypher/openCypher). Follow the preceding link to learn more about this syntax.
Additionally, standard embeddings searches can be returned as graphs.
```python
# Find all paths between id: 0 and id: 5 between 1 and 3 hops away
embeddings.graph.search("""
MATCH P=({id: 0})-[*1..3]->({id: 5})
RETURN P
""")
# Standard embeddings search as graph
embeddings.search("query", graph=True)
```
## Subindexes
Subindexes can be queried as follows:
```python
# Query with index parameter
embeddings.search("query", index="subindex1")
# Specify with SQL
embeddings.search("""
SELECT id, text, score FROM txtai
WHERE similar('query', 'subindex1')
""")
```
## Combined index architecture
txtai has multiple storage and indexing components. Content is stored in an underlying database along with an approximate nearest neighbor (ANN) index, keyword index and graph network. These components combine to deliver similarity search alongside traditional structured search.
The ANN index stores ids and vectors for each input element. When a natural language query is run, the query is translated into a vector and a similarity query finds the best matching ids. When a database is added into the mix, an additional step is executed. This step takes those ids and effectively inserts them as part of the underlying database query. The same steps apply with keyword indexes except a term frequency index is used to find the best matching ids.
Dynamic columns are supported via the underlying engine. For SQLite, data is stored as JSON and dynamic columns are converted into `json_extract` clauses. Client-server databases are supported via [SQLAlchemy](https://docs.sqlalchemy.org/en/20/dialects/) and dynamic columns are supported provided the underlying engine has [JSON](https://docs.sqlalchemy.org/en/20/core/type_basics.html#sqlalchemy.types.JSON) support.
+139
View File
@@ -0,0 +1,139 @@
# Examples
![examples](images/examples.png#only-light)
![examples](images/examples-dark.png#only-dark)
See below for a comprehensive series of example notebooks and applications covering txtai.
## Semantic Search
Build semantic/similarity/vector/neural search applications.
| Notebook | Description | |
|:----------|:-------------|------:|
| [Introducing txtai](https://github.com/neuml/txtai/blob/master/examples/01_Introducing_txtai.ipynb) [▶️](https://www.youtube.com/watch?v=SIezMnVdmMs) | Overview of the functionality provided by txtai | [![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) |
| [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
LLM chains, retrieval augmented generation (RAG), chat with your data, pipelines and workflows that interface with large language models (LLMs).
| Notebook | Description | |
|:----------|:-------------|------:|
| [Prompt-driven search with LLMs](https://github.com/neuml/txtai/blob/master/examples/42_Prompt_driven_search_with_LLMs.ipynb) | Embeddings-guided and Prompt-driven search with Large Language Models (LLMs) | [![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) | 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) |
## Pipelines
Transform data with language model backed pipelines.
| Notebook | Description | |
|:----------|:-------------|------:|
| [Extractive QA with txtai](https://github.com/neuml/txtai/blob/master/examples/05_Extractive_QA_with_txtai.ipynb) | Introduction to extractive question-answering with txtai | [![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) |
| [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) |
## Workflows
Efficiently process data at scale.
| Notebook | Description | |
|:----------|:-------------|------:|
| [Run pipeline workflows](https://github.com/neuml/txtai/blob/master/examples/14_Run_pipeline_workflows.ipynb) [▶️](https://www.youtube.com/watch?v=UBMPDCn1gEU) | Simple yet powerful constructs to efficiently process data | [![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) |
## Model Training
Train NLP models.
| Notebook | Description | |
|:----------|:-------------|------:|
| [Train a text labeler](https://github.com/neuml/txtai/blob/master/examples/16_Train_a_text_labeler.ipynb) | Build text sequence classification models | [![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) |
| [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) |
## 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/48_Benefits_of_hybrid_search.ipynb) |
| [Benefits of hybrid search](https://github.com/neuml/txtai/blob/master/examples/48_Benefits_of_hybrid_search.ipynb) | Improve accuracy with a combination of semantic and keyword search | [![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) |
## 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) |
## Applications
Series of example applications with txtai. Links to hosted versions on [Hugging Face Spaces](https://hf.co/spaces) are also provided, when available.
| Application | Description | |
|:-------------|:-------------|------:|
| [Basic similarity search](https://github.com/neuml/txtai/blob/master/examples/similarity.py) | Basic similarity search example. Data from the original txtai demo. |[🤗](https://hf.co/spaces/NeuML/similarity)|
| [Baseball stats](https://github.com/neuml/txtai/blob/master/examples/baseball.py) | Match historical baseball player stats using vector search. |[🤗](https://hf.co/spaces/NeuML/baseball)|
| [Benchmarks](https://github.com/neuml/txtai/blob/master/examples/benchmarks.py) | Calculate performance metrics for the BEIR datasets. |*Local run only*|
| [Book search](https://github.com/neuml/txtai/blob/master/examples/books.py) | Book similarity search application. Index book descriptions and query using natural language statements. |*Local run only*|
| [Image search](https://github.com/neuml/txtai/blob/master/examples/images.py) | Image similarity search application. Index a directory of images and run searches to identify images similar to the input query. |[🤗](https://hf.co/spaces/NeuML/imagesearch)|
| [Summarize an article](https://github.com/neuml/txtai/blob/master/examples/article.py) | Summarize an article. Workflow that extracts text from a webpage and builds a summary. |[🤗](https://hf.co/spaces/NeuML/articlesummary)|
| [Wiki search](https://github.com/neuml/txtai/blob/master/examples/wiki.py) | Wikipedia search application. Queries Wikipedia API and summarizes the top result. |[🤗](https://hf.co/spaces/NeuML/wikisummary)|
| [Workflow builder](https://github.com/neuml/txtai/blob/master/examples/workflows.py) | Build and execute txtai workflows. Connect summarization, text extraction, transcription, translation and similarity search pipelines together to run unified workflows. |[🤗](https://hf.co/spaces/NeuML/txtai)|
+128
View File
@@ -0,0 +1,128 @@
# 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 the content of a txtai index?
__Answer__
txtai has a console application that makes this easy. Read [this article](https://medium.com/neuml/insights-from-the-txtai-console-d307c28e149e) to learn more.
----------
__Question__
How can models be externally loaded and passed to embeddings and pipelines?
__Answer__
Embeddings example.
```python
from transformers import AutoModel, AutoTokenizer
from txtai.embeddings import Embeddings
# Load model externally
model = AutoModel.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")
tokenizer = AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2")
# Pass to embeddings instance
embeddings = Embeddings(path=model, tokenizer=tokenizer)
```
LLM pipeline example.
```python
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from txtai.pipeline import LLM
# Load Mistral-7B-OpenOrca
path = "Open-Orca/Mistral-7B-OpenOrca"
model = AutoModelForCausalLM.from_pretrained(
path,
torch_dtype=torch.bfloat16,
)
tokenizer = AutoTokenizer.from_pretrained(path)
llm = LLM((model, tokenizer))
```
## Common issues
----------
__Issue__
Embeddings query errors like this:
```
SQLError: no such function: json_extract
```
__Solution__
Upgrade Python version as it doesn't have SQLite support for json_extract
----------
__Issue__
Segmentation faults and similar errors on macOS
__Solution__
Disable OpenMP threading via the environment variable `export OMP_NUM_THREADS=1` or downgrade PyTorch to <= 1.12. See issue [#377](https://github.com/neuml/txtai/issues/377) for more.
----------
__Issue__
`ContextualVersionConflict` and/or package METADATA exception while running one of the [examples](../examples) notebooks on Google Colab
__Solution__
Restart the kernel. See issue [#409](https://github.com/neuml/txtai/issues/409) for more on this issue.
----------
__Issue__
Error installing optional/extra dependencies such as `pipeline`
__Solution__
The default MacOS shell (zsh) and Windows PowerShell require escaping square brackets
```
pip install 'txtai[pipeline]'
```
+10
View File
@@ -0,0 +1,10 @@
# Further reading
![further](images/further.png#only-light)
![further](images/further-dark.png#only-dark)
- [Introducing txtai, the all-in-one embeddings database](https://medium.com/neuml/introducing-txtai-the-all-in-one-embeddings-database-c721f4ff91ad)
- [Tutorial series on Hashnode](https://neuml.hashnode.dev/series/txtai-tutorial) | [dev.to](https://dev.to/neuml/tutorial-series-on-txtai-ibg)
- [What's new in txtai 7.0](https://medium.com/neuml/whats-new-in-txtai-7-0-855ad6a55440) | [6.0](https://medium.com/neuml/whats-new-in-txtai-6-0-7d93eeedf804) | [5.0](https://medium.com/neuml/whats-new-in-txtai-5-0-e5c75a13b101) | [4.0](https://medium.com/neuml/whats-new-in-txtai-4-0-bbc3a65c3d1c)
- [Getting started with semantic search](https://medium.com/neuml/getting-started-with-semantic-search-a9fd9d8a48cf) | [workflows](https://medium.com/neuml/getting-started-with-semantic-workflows-2fefda6165d9)
- [Running txtai at scale](https://medium.com/neuml/running-at-scale-with-txtai-71196cdd99f9)
Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

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

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.

After

Width:  |  Height:  |  Size: 112 KiB

+379
View File
@@ -0,0 +1,379 @@
{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [
{
"type": "rectangle",
"version": 3062,
"versionNonce": 456539957,
"isDeleted": false,
"id": "Ufh5VUA3qmvJowuFyEWz4",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 570.7515859513394,
"y": 59.768341009859626,
"strokeColor": "#d0d9dd",
"backgroundColor": "transparent",
"width": 719.330217768941,
"height": 100.49478848195537,
"seed": 2109972213,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1688312603126,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 1798,
"versionNonce": 1560857173,
"isDeleted": false,
"id": "NDWbJgM53uVck-LSQzD-0",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 740.6664767795138,
"y": 67.92614920483035,
"strokeColor": "#ffeb3b",
"backgroundColor": "#ffeb3b",
"width": 85,
"height": 84.17917209201391,
"seed": 1782446165,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [
{
"type": "text",
"id": "0VztU7lb7T9I5zoL2LjLt"
}
],
"updated": 1688312605190,
"link": null,
"locked": false
},
{
"type": "text",
"version": 385,
"versionNonce": 1280754907,
"isDeleted": false,
"id": "0VztU7lb7T9I5zoL2LjLt",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 745.6664767795138,
"y": 99.51573525083731,
"strokeColor": "#000000",
"backgroundColor": "#7950f2",
"width": 75,
"height": 21,
"seed": 2095457717,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1688312605190,
"link": null,
"locked": false,
"fontSize": 16,
"fontFamily": 1,
"text": "Container",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "NDWbJgM53uVck-LSQzD-0",
"originalText": "Container",
"lineHeight": 1.3125,
"baseline": 15
},
{
"type": "rectangle",
"version": 1874,
"versionNonce": 847689653,
"isDeleted": false,
"id": "rr3YJsAyrrPqZbZ4qXh5x",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1175.874140249897,
"y": 67.92614920483035,
"strokeColor": "#00e676",
"backgroundColor": "#00e676",
"width": 85,
"height": 84.17917209201391,
"seed": 1491183381,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [
{
"id": "9NBdG6TyrBqjuDKvzAZXN",
"type": "text"
}
],
"updated": 1688312605190,
"link": null,
"locked": false
},
{
"type": "text",
"version": 456,
"versionNonce": 1820291451,
"isDeleted": false,
"id": "9NBdG6TyrBqjuDKvzAZXN",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1180.874140249897,
"y": 99.51573525083731,
"strokeColor": "#000000",
"backgroundColor": "#7950f2",
"width": 75,
"height": 21,
"seed": 547748981,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1688312605190,
"link": null,
"locked": false,
"fontSize": 16,
"fontFamily": 1,
"text": "Container",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "rr3YJsAyrrPqZbZ4qXh5x",
"originalText": "Container",
"lineHeight": 1.3125,
"baseline": 15
},
{
"type": "rectangle",
"version": 1864,
"versionNonce": 1889532181,
"isDeleted": false,
"id": "ji9UBE590YJ5e8DKUKbPG",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 598.874140249897,
"y": 67.92614920483035,
"strokeColor": "#ff7043",
"backgroundColor": "#ff7043",
"width": 85,
"height": 84.17917209201391,
"seed": 200844757,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [
{
"id": "2fdy7dRwF7ZVaYPrb1Q7p",
"type": "text"
}
],
"updated": 1688312605190,
"link": null,
"locked": false
},
{
"type": "text",
"version": 446,
"versionNonce": 673810971,
"isDeleted": false,
"id": "2fdy7dRwF7ZVaYPrb1Q7p",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 603.874140249897,
"y": 99.51573525083731,
"strokeColor": "#000000",
"backgroundColor": "#7950f2",
"width": 75,
"height": 21,
"seed": 1039082293,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1688312605190,
"link": null,
"locked": false,
"fontSize": 16,
"fontFamily": 1,
"text": "Container",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "ji9UBE590YJ5e8DKUKbPG",
"originalText": "Container",
"lineHeight": 1.3125,
"baseline": 15
},
{
"type": "rectangle",
"version": 1805,
"versionNonce": 281677429,
"isDeleted": false,
"id": "Kod3erHdgkFtJcsgqHeQQ",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 889.874140249897,
"y": 67.92614920483035,
"strokeColor": "#03a9f4",
"backgroundColor": "#03a9f4",
"width": 85,
"height": 84.17917209201391,
"seed": 1525609621,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [
{
"id": "vA5QfvPySVZE9WnP6d7dp",
"type": "text"
}
],
"updated": 1688312605190,
"link": null,
"locked": false
},
{
"type": "text",
"version": 390,
"versionNonce": 1682411195,
"isDeleted": false,
"id": "vA5QfvPySVZE9WnP6d7dp",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 894.874140249897,
"y": 99.51573525083731,
"strokeColor": "#000000",
"backgroundColor": "#7950f2",
"width": 75,
"height": 21,
"seed": 1588435445,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1688312605190,
"link": null,
"locked": false,
"fontSize": 16,
"fontFamily": 1,
"text": "Container",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "Kod3erHdgkFtJcsgqHeQQ",
"originalText": "Container",
"lineHeight": 1.3125,
"baseline": 15
},
{
"type": "rectangle",
"version": 1916,
"versionNonce": 1103787989,
"isDeleted": false,
"id": "8p_AIsxC6UbaWESkrwl4g",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1035.874140249897,
"y": 67.92614920483035,
"strokeColor": "#7950f2",
"backgroundColor": "#7950f2",
"width": 85,
"height": 84.17917209201391,
"seed": 842044245,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [
{
"id": "AceuLTPujneYjRp_njhIl",
"type": "text"
}
],
"updated": 1688312605190,
"link": null,
"locked": false
},
{
"type": "text",
"version": 499,
"versionNonce": 1132199771,
"isDeleted": false,
"id": "AceuLTPujneYjRp_njhIl",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1041.907473074604,
"y": 99.51573525083731,
"strokeColor": "#000000",
"backgroundColor": "#7950f2",
"width": 72.93333435058594,
"height": 21,
"seed": 30236853,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1688312605190,
"link": null,
"locked": false,
"fontSize": 16,
"fontFamily": 1,
"text": "Container",
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "8p_AIsxC6UbaWESkrwl4g",
"originalText": "Container",
"lineHeight": 1.3125,
"baseline": 15
}
],
"appState": {
"gridSize": null,
"viewBackgroundColor": "#ffffff"
},
"files": {}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 850 KiB

+513
View File
@@ -0,0 +1,513 @@
{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [
{
"type": "rectangle",
"version": 824,
"versionNonce": 1352316119,
"isDeleted": false,
"id": "U2NgEIEiFpAlwmv5Xnyzr",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 50,
"angle": 0,
"x": 557.5,
"y": 267.30499999999995,
"strokeColor": "#7950f2",
"backgroundColor": "#7950f2",
"width": 995.3286713286714,
"height": 339.0000000000001,
"seed": 1946478225,
"groupIds": [
"C_65R9XVeMQED2nMfIW2D"
],
"roundness": null,
"boundElements": [],
"updated": 1673788613149,
"link": "",
"locked": false
},
{
"type": "text",
"version": 607,
"versionNonce": 590931993,
"isDeleted": false,
"id": "fbSO8bnZmAdvIXZxBAtHY",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 572.7237762237763,
"y": 281.50080419580416,
"strokeColor": "#000",
"backgroundColor": "#03a9f4",
"width": 967,
"height": 312,
"seed": 1586673137,
"groupIds": [
"C_65R9XVeMQED2nMfIW2D"
],
"roundness": null,
"boundElements": [],
"updated": 1673788613149,
"link": null,
"locked": false,
"fontSize": 20.27972027972028,
"fontFamily": 1,
"text": "Query Best Match\n----------------------------------------------------\nfeel good story Maine man wins $1M from $25 lottery ticket\nclimate change Canada's last fully intact ice shelf has suddenly collapsed, forming a \n Manhattan-sized iceberg\npublic health story US tops 5 million confirmed virus cases\nwar Beijing mobilises invasion craft along coast as Taiwan tensions escalate\nwildlife The National Park Service warns against sacrificing slower friends in a\n bear attack\nasia Beijing mobilises invasion craft along coast as Taiwan tensions escalate\nlucky Maine man wins $1M from $25 lottery ticket\ndishonest junk Make huge profits without work, earn up to $100,000 a day",
"baseline": 304,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Query Best Match\n----------------------------------------------------\nfeel good story Maine man wins $1M from $25 lottery ticket\nclimate change Canada's last fully intact ice shelf has suddenly collapsed, forming a \n Manhattan-sized iceberg\npublic health story US tops 5 million confirmed virus cases\nwar Beijing mobilises invasion craft along coast as Taiwan tensions escalate\nwildlife The National Park Service warns against sacrificing slower friends in a\n bear attack\nasia Beijing mobilises invasion craft along coast as Taiwan tensions escalate\nlucky Maine man wins $1M from $25 lottery ticket\ndishonest junk Make huge profits without work, earn up to $100,000 a day"
},
{
"type": "rectangle",
"version": 990,
"versionNonce": 2000421367,
"isDeleted": false,
"id": "UO6MS3wSDu7yg2421__LI",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 935,
"y": 109,
"strokeColor": "#ffeb3b",
"backgroundColor": "#ffeb3b",
"width": 214,
"height": 49,
"seed": 1629565989,
"groupIds": [
"3sURMvhuRfR0M-Q3VRPbg"
],
"roundness": null,
"boundElements": [
{
"type": "text",
"id": "8sp7H8ijWBlh6aMgZ0XTP"
},
{
"id": "Qzp41i_jzQIBlAB_qFKFH",
"type": "arrow"
},
{
"id": "SJ0F0Y81z9hir5qQWAJjk",
"type": "arrow"
}
],
"updated": 1673788613149,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 1649,
"versionNonce": 1978562009,
"isDeleted": false,
"id": "qYd3q0Vjks7VOHUC9RR51",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 551,
"y": 109.5,
"strokeColor": "#03a9f4",
"backgroundColor": "#03a9f4",
"width": 219,
"height": 52,
"seed": 1441952427,
"groupIds": [
"3sURMvhuRfR0M-Q3VRPbg"
],
"roundness": null,
"boundElements": [
{
"type": "text",
"id": "WPeWn6N4rCHf0jY16N9Ge"
},
{
"id": "Qzp41i_jzQIBlAB_qFKFH",
"type": "arrow"
}
],
"updated": 1673788613149,
"link": null,
"locked": false
},
{
"type": "text",
"version": 1336,
"versionNonce": 1274169655,
"isDeleted": false,
"id": "WPeWn6N4rCHf0jY16N9Ge",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 597.5,
"y": 117.5,
"strokeColor": "#000",
"backgroundColor": "#fa5252",
"width": 126,
"height": 36,
"seed": 870516459,
"groupIds": [
"3sURMvhuRfR0M-Q3VRPbg"
],
"roundness": null,
"boundElements": [],
"updated": 1673788618421,
"link": null,
"locked": false,
"fontSize": 28,
"fontFamily": 1,
"text": "Vectorize",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "qYd3q0Vjks7VOHUC9RR51",
"originalText": "Vectorize"
},
{
"type": "rectangle",
"version": 1236,
"versionNonce": 368709975,
"isDeleted": false,
"id": "5VuUdI_BsJ5pyE1nTqJUI",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1334,
"y": 110,
"strokeColor": "#00e676",
"backgroundColor": "#00e676",
"width": 218,
"height": 49,
"seed": 1044404613,
"groupIds": [
"3sURMvhuRfR0M-Q3VRPbg"
],
"roundness": null,
"boundElements": [
{
"id": "bJJ9SGsJsvT071qBBH0w5",
"type": "text"
},
{
"id": "SJ0F0Y81z9hir5qQWAJjk",
"type": "arrow"
}
],
"updated": 1673788613149,
"link": null,
"locked": false
},
{
"type": "text",
"version": 1420,
"versionNonce": 1511737785,
"isDeleted": false,
"id": "bJJ9SGsJsvT071qBBH0w5",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1397,
"y": 116.5,
"strokeColor": "#000",
"backgroundColor": "#fa5252",
"width": 92,
"height": 36,
"seed": 128953675,
"groupIds": [
"3sURMvhuRfR0M-Q3VRPbg"
],
"roundness": null,
"boundElements": [],
"updated": 1673788618421,
"link": null,
"locked": false,
"fontSize": 28,
"fontFamily": 1,
"text": "Search",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "5VuUdI_BsJ5pyE1nTqJUI",
"originalText": "Search"
},
{
"type": "text",
"version": 981,
"versionNonce": 1600260695,
"isDeleted": false,
"id": "8sp7H8ijWBlh6aMgZ0XTP",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1004,
"y": 115.5,
"strokeColor": "#000",
"backgroundColor": "transparent",
"width": 76,
"height": 36,
"seed": 1854823263,
"groupIds": [
"3sURMvhuRfR0M-Q3VRPbg"
],
"roundness": null,
"boundElements": [],
"updated": 1673788618422,
"link": null,
"locked": false,
"fontSize": 28,
"fontFamily": 1,
"text": "Index",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "UO6MS3wSDu7yg2421__LI",
"originalText": "Index"
},
{
"type": "text",
"version": 420,
"versionNonce": 1275651991,
"isDeleted": false,
"id": "jWJpSXHkTCzRTCA4tbAgv",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 550.5,
"y": 189.30499999999995,
"strokeColor": "#000",
"backgroundColor": "#03a9f4",
"width": 296,
"height": 42,
"seed": 1241563487,
"groupIds": [
"3sURMvhuRfR0M-Q3VRPbg"
],
"roundness": null,
"boundElements": [],
"updated": 1673788613150,
"link": null,
"locked": false,
"fontSize": 16,
"fontFamily": 1,
"text": "- Transform input into numbers\n- Similar concepts have similar values",
"baseline": 36,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "- Transform input into numbers\n- Similar concepts have similar values"
},
{
"type": "text",
"version": 419,
"versionNonce": 51134809,
"isDeleted": false,
"id": "qEnmXs0P_MQE8r4c4OWGh",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 933.5,
"y": 188.20749999999992,
"strokeColor": "#000",
"backgroundColor": "#f44336",
"width": 230,
"height": 42,
"seed": 1038536465,
"groupIds": [
"3sURMvhuRfR0M-Q3VRPbg"
],
"roundness": null,
"boundElements": [],
"updated": 1673788613150,
"link": null,
"locked": false,
"fontSize": 16,
"fontFamily": 1,
"text": "- Save vectors\n- Store content with vectors",
"baseline": 36,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "- Save vectors\n- Store content with vectors"
},
{
"type": "text",
"version": 529,
"versionNonce": 869653687,
"isDeleted": false,
"id": "1q8bzjK8lnKUZj8_A9v7D",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1245,
"y": 191.20749999999992,
"strokeColor": "#000",
"backgroundColor": "#f44336",
"width": 333,
"height": 42,
"seed": 304472945,
"groupIds": [
"3sURMvhuRfR0M-Q3VRPbg"
],
"roundness": null,
"boundElements": [],
"updated": 1673788613150,
"link": null,
"locked": false,
"fontSize": 16,
"fontFamily": 1,
"text": "- Find similar vectors with cosine similarity\n- Add rule-based filters using content",
"baseline": 36,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "- Find similar vectors with cosine similarity\n- Add rule-based filters using content"
},
{
"type": "arrow",
"version": 1935,
"versionNonce": 20011767,
"isDeleted": false,
"id": "Qzp41i_jzQIBlAB_qFKFH",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 772.5,
"y": 131.8470411964629,
"strokeColor": "#000",
"backgroundColor": "#f44336",
"width": 158.1310513485223,
"height": 0.5692601572380909,
"seed": 660786897,
"groupIds": [
"3sURMvhuRfR0M-Q3VRPbg"
],
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1673788613309,
"link": null,
"locked": false,
"startBinding": {
"elementId": "qYd3q0Vjks7VOHUC9RR51",
"focus": -0.15367587596362536,
"gap": 2.5
},
"endBinding": {
"elementId": "UO6MS3wSDu7yg2421__LI",
"focus": 0.027437144815141,
"gap": 4.3689486514776945
},
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow",
"points": [
[
0,
0
],
[
158.1310513485223,
0.5692601572380909
]
]
},
{
"type": "arrow",
"version": 2084,
"versionNonce": 1180230679,
"isDeleted": false,
"id": "SJ0F0Y81z9hir5qQWAJjk",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1151.5,
"y": 134.67907617019108,
"strokeColor": "#000",
"backgroundColor": "#f44336",
"width": 181.5,
"height": 1.5898915058209013,
"seed": 899541905,
"groupIds": [
"3sURMvhuRfR0M-Q3VRPbg"
],
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1673788613309,
"link": null,
"locked": false,
"startBinding": {
"elementId": "UO6MS3wSDu7yg2421__LI",
"focus": 0.08406032225724415,
"gap": 2.5
},
"endBinding": {
"elementId": "5VuUdI_BsJ5pyE1nTqJUI",
"focus": 0.09327847520504394,
"gap": 1
},
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow",
"points": [
[
0,
0
],
[
181.5,
-1.5898915058209013
]
]
}
],
"appState": {
"gridSize": null,
"viewBackgroundColor": "#ffffff"
},
"files": {}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 846 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

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

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: 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.

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.

After

Width:  |  Height:  |  Size: 50 KiB

+106
View File
@@ -0,0 +1,106 @@
{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [
{
"type": "rectangle",
"version": 1435,
"versionNonce": 1860045045,
"isDeleted": false,
"id": "LgVOdCQnXRH2GYHIGLwOx",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 1.5707963267948957,
"x": 764,
"y": 123.99999999999991,
"strokeColor": "#00e676",
"backgroundColor": "#00e676",
"width": 20.000000000000092,
"height": 199.99999999999991,
"seed": 782310408,
"groupIds": [
"s5mCNZzJxsETmWhZoD3qR"
],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1688311151676,
"link": null,
"locked": false
},
{
"type": "rectangle",
"version": 1534,
"versionNonce": 2090527963,
"isDeleted": false,
"id": "GG_mFtlk6nEiYCQ8vhzjZ",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 1.5707963267948957,
"x": 953,
"y": 136.9999999999999,
"strokeColor": "#ced4da",
"backgroundColor": "#ced4da",
"width": 17.99999999999998,
"height": 173.99999999999994,
"seed": 810177544,
"groupIds": [
"Rezl6DUXkEY8GT9kuDOQX"
],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1688311151677,
"link": null,
"locked": false
},
{
"type": "text",
"version": 293,
"versionNonce": 1618682453,
"isDeleted": false,
"id": "NLfZWFLgvJj3ccuF5yxD8",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 793,
"y": 216.86805555555557,
"strokeColor": "#343a40",
"backgroundColor": "transparent",
"width": 80,
"height": 16,
"seed": 297813880,
"groupIds": [],
"frameId": null,
"roundness": null,
"boundElements": [],
"updated": 1688311151677,
"link": null,
"locked": false,
"fontSize": 12.242424242424246,
"fontFamily": 1,
"text": "Installing.......",
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "Installing.......",
"lineHeight": 1.3069306930693065,
"baseline": 11
}
],
"appState": {
"gridSize": null,
"viewBackgroundColor": "#ffffff"
},
"files": {}
}
Binary file not shown.

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 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: 57 KiB

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

After

Width:  |  Height:  |  Size: 63 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: 42 KiB

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

After

Width:  |  Height:  |  Size: 38 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.

After

Width:  |  Height:  |  Size: 58 KiB

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

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

+263
View File
@@ -0,0 +1,263 @@
{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [
{
"type": "rectangle",
"version": 633,
"versionNonce": 705603336,
"isDeleted": false,
"id": "mG5J3YEl3JUm8tWD2gLax",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 840.1017043524607,
"y": 323.8650942251963,
"strokeColor": "#ff7043",
"backgroundColor": "#ff7043",
"width": 412.0000000000001,
"height": 54.999999999999964,
"seed": 322487816,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElements": [],
"updated": 1641744014625
},
{
"type": "text",
"version": 202,
"versionNonce": 1087974776,
"isDeleted": false,
"id": "N9ytCRthOA395FeHYtiWS",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1010.3997812755383,
"y": 335.8362480713501,
"strokeColor": "#343a40",
"backgroundColor": "#03a9f4",
"width": 53,
"height": 36,
"seed": 1396884744,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElements": [],
"updated": 1641744014625,
"fontSize": 28,
"fontFamily": 1,
"text": "API",
"baseline": 25,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "API"
},
{
"type": "rectangle",
"version": 741,
"versionNonce": 917800456,
"isDeleted": false,
"id": "uFbzRXgEesWgll3llORrW",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 839.3613197370764,
"y": 387.49009422519623,
"strokeColor": "#00e676",
"backgroundColor": "#00e676",
"width": 184,
"height": 60.846153846153825,
"seed": 531948552,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElements": [
{
"type": "text",
"id": "Ctud-Ap642NinH0-64fKT"
}
],
"updated": 1641744014625
},
{
"type": "text",
"version": 509,
"versionNonce": 171632136,
"isDeleted": false,
"id": "Ctud-Ap642NinH0-64fKT",
"fillStyle": "cross-hatch",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 844.3613197370764,
"y": 399.91317114827314,
"strokeColor": "#000000",
"backgroundColor": "#03a9f4",
"width": 174,
"height": 36,
"seed": 720254072,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElements": [],
"updated": 1641743551018,
"fontSize": 28,
"fontFamily": 1,
"text": "Pipeline",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "uFbzRXgEesWgll3llORrW",
"originalText": "Pipeline"
},
{
"type": "rectangle",
"version": 726,
"versionNonce": 558153336,
"isDeleted": false,
"id": "_zQO_kyS5Pvq1zDhEn9hv",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1032.3805505063074,
"y": 389.3362480713501,
"strokeColor": "#ffeb3b",
"backgroundColor": "#ffeb3b",
"width": 219,
"height": 56,
"seed": 1988829960,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElements": [
{
"id": "tL_gw7MpliV1bDFJp8Cql",
"type": "text"
},
{
"type": "text",
"id": "tL_gw7MpliV1bDFJp8Cql"
}
],
"updated": 1641744014625
},
{
"type": "text",
"version": 514,
"versionNonce": 1694557448,
"isDeleted": false,
"id": "tL_gw7MpliV1bDFJp8Cql",
"fillStyle": "cross-hatch",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1037.2555505063074,
"y": 399.3362480713501,
"strokeColor": "#000000",
"backgroundColor": "#03a9f4",
"width": 209,
"height": 36,
"seed": 274132856,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElements": [],
"updated": 1641743551018,
"fontSize": 28,
"fontFamily": 1,
"text": "Workflow",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "_zQO_kyS5Pvq1zDhEn9hv",
"originalText": "Workflow"
},
{
"type": "rectangle",
"version": 455,
"versionNonce": 289834248,
"isDeleted": false,
"id": "QKBksUpSSix31GSKFO1uV",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 838.5920889678456,
"y": 456.87470960981165,
"strokeColor": "#03a9f4",
"backgroundColor": "#03a9f4",
"width": 417,
"height": 60.846153846153825,
"seed": 910262792,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElements": [
{
"id": "4o-d8ZzuqEpB7ROBAyReL",
"type": "text"
},
{
"id": "4o-d8ZzuqEpB7ROBAyReL",
"type": "text"
},
{
"type": "text",
"id": "4o-d8ZzuqEpB7ROBAyReL"
}
],
"updated": 1641744014625
},
{
"type": "text",
"version": 258,
"versionNonce": 347014152,
"isDeleted": false,
"id": "4o-d8ZzuqEpB7ROBAyReL",
"fillStyle": "cross-hatch",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 843.4670889678456,
"y": 469.29778653288855,
"strokeColor": "#343a40",
"backgroundColor": "#03a9f4",
"width": 407,
"height": 36,
"seed": 1820749832,
"groupIds": [],
"strokeSharpness": "sharp",
"boundElements": [],
"updated": 1641743551019,
"fontSize": 28,
"fontFamily": 1,
"text": "Embeddings",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "QKBksUpSSix31GSKFO1uV",
"originalText": "Embeddings"
}
],
"appState": {
"gridSize": null,
"viewBackgroundColor": "#ffffff"
},
"files": {}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 KiB

+759
View File
@@ -0,0 +1,759 @@
{
"type": "excalidraw",
"version": 2,
"source": "https://excalidraw.com",
"elements": [
{
"type": "rectangle",
"version": 1659,
"versionNonce": 1307774681,
"isDeleted": false,
"id": "qYd3q0Vjks7VOHUC9RR51",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 425,
"y": 339.5,
"strokeColor": "#00e676",
"backgroundColor": "#00e676",
"width": 290.0000000000001,
"height": 46,
"seed": 1441952427,
"groupIds": [],
"roundness": null,
"boundElements": [
{
"type": "text",
"id": "WPeWn6N4rCHf0jY16N9Ge"
}
],
"updated": 1673789051585,
"link": null,
"locked": false
},
{
"type": "arrow",
"version": 311,
"versionNonce": 924248664,
"isDeleted": false,
"id": "tgnQzXC9s8RY4oImBOXuB",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 562.5285999651802,
"y": 272.4578674923631,
"strokeColor": "#000",
"backgroundColor": "#228be6",
"width": 0.4714000348197942,
"height": 72.5421325076369,
"seed": 650463755,
"groupIds": [],
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1658678202111,
"link": null,
"locked": false,
"startBinding": {
"elementId": "B435ajoI5vAQBDvzkd8aY",
"focus": 0.05963733900881362,
"gap": 5.457867492363107
},
"endBinding": null,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow",
"points": [
[
0,
0
],
[
0.4714000348197942,
72.5421325076369
]
]
},
{
"type": "text",
"version": 1347,
"versionNonce": 162309943,
"isDeleted": false,
"id": "WPeWn6N4rCHf0jY16N9Ge",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 430,
"y": 344.5,
"strokeColor": "#000000",
"backgroundColor": "#fa5252",
"width": 280,
"height": 36,
"seed": 870516459,
"groupIds": [],
"roundness": null,
"boundElements": [],
"updated": 1673789051585,
"link": null,
"locked": false,
"fontSize": 28,
"fontFamily": 1,
"text": "Translate",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "qYd3q0Vjks7VOHUC9RR51",
"originalText": "Translate"
},
{
"type": "rectangle",
"version": 168,
"versionNonce": 2070244952,
"isDeleted": false,
"id": "IxMxusRKX2PpnJT1uY0cC",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 819,
"y": 217.5,
"strokeColor": "#ffeb3b",
"backgroundColor": "#ffeb3b",
"width": 290.0000000000001,
"height": 49,
"seed": 1364021803,
"groupIds": [],
"roundness": null,
"boundElements": [
{
"type": "text",
"id": "SSXjX_URKvcVC8h-Qgz4j"
},
{
"id": "_YNRYTAnVzdhhKxFtkVyg",
"type": "arrow"
}
],
"updated": 1658678121633,
"link": null,
"locked": false
},
{
"type": "text",
"version": 73,
"versionNonce": 1790001960,
"isDeleted": false,
"id": "SSXjX_URKvcVC8h-Qgz4j",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 824,
"y": 224,
"strokeColor": "#000000",
"backgroundColor": "#82c91e",
"width": 280,
"height": 36,
"seed": 948915563,
"groupIds": [],
"roundness": null,
"boundElements": [],
"updated": 1658678121633,
"link": null,
"locked": false,
"fontSize": 28,
"fontFamily": 1,
"text": "Extract Text",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "IxMxusRKX2PpnJT1uY0cC",
"originalText": "Extract Text"
},
{
"type": "rectangle",
"version": 205,
"versionNonce": 1180033880,
"isDeleted": false,
"id": "lATIKISgJPOGnUHleuFRH",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 821,
"y": 338,
"strokeColor": "#03a9f4",
"backgroundColor": "#03a9f4",
"width": 290.0000000000001,
"height": 46,
"seed": 1256311595,
"groupIds": [],
"roundness": null,
"boundElements": [
{
"id": "21WiUuyDtpQ9FnJ74REpJ",
"type": "text"
},
{
"id": "Q51e0Hav-kYfjX3b8tt-r",
"type": "arrow"
}
],
"updated": 1658678121633,
"link": null,
"locked": false
},
{
"type": "text",
"version": 84,
"versionNonce": 1559141928,
"isDeleted": false,
"id": "21WiUuyDtpQ9FnJ74REpJ",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 826,
"y": 343,
"strokeColor": "#000000",
"backgroundColor": "#fa5252",
"width": 280,
"height": 36,
"seed": 626266373,
"groupIds": [],
"roundness": null,
"boundElements": [],
"updated": 1658678121633,
"link": null,
"locked": false,
"fontSize": 28,
"fontFamily": 1,
"text": "Summarize",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "lATIKISgJPOGnUHleuFRH",
"originalText": "Summarize"
},
{
"type": "arrow",
"version": 150,
"versionNonce": 108519256,
"isDeleted": false,
"id": "_YNRYTAnVzdhhKxFtkVyg",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 962.2340210300499,
"y": 270,
"strokeColor": "#000",
"backgroundColor": "#228be6",
"width": 0.2659789699500834,
"height": 75,
"seed": 101249451,
"groupIds": [],
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1658678205029,
"link": null,
"locked": false,
"startBinding": {
"elementId": "IxMxusRKX2PpnJT1uY0cC",
"focus": 0.012856281024868153,
"gap": 3.5
},
"endBinding": null,
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow",
"points": [
[
0,
0
],
[
0.2659789699500834,
75
]
]
},
{
"type": "rectangle",
"version": 213,
"versionNonce": 1959303464,
"isDeleted": false,
"id": "6B3J0wJfi561c9gMsgtXG",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 824,
"y": 455,
"strokeColor": "#7950f2",
"backgroundColor": "#7950f2",
"width": 290.0000000000001,
"height": 46,
"seed": 1164190923,
"groupIds": [],
"roundness": null,
"boundElements": [
{
"id": "qJDqmDEZF9Ewh2UrjXq5Z",
"type": "text"
},
{
"id": "Q51e0Hav-kYfjX3b8tt-r",
"type": "arrow"
}
],
"updated": 1658678121634,
"link": null,
"locked": false
},
{
"type": "text",
"version": 135,
"versionNonce": 210169176,
"isDeleted": false,
"id": "qJDqmDEZF9Ewh2UrjXq5Z",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 829,
"y": 460,
"strokeColor": "#000000",
"backgroundColor": "#fa5252",
"width": 280,
"height": 36,
"seed": 1307943269,
"groupIds": [],
"roundness": null,
"boundElements": [],
"updated": 1658678121634,
"link": null,
"locked": false,
"fontSize": 28,
"fontFamily": 1,
"text": "Build Vector Index",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "6B3J0wJfi561c9gMsgtXG",
"originalText": "Build Vector Index"
},
{
"type": "arrow",
"version": 203,
"versionNonce": 133313624,
"isDeleted": false,
"id": "Q51e0Hav-kYfjX3b8tt-r",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 963.600775377322,
"y": 387.5,
"strokeColor": "#000",
"backgroundColor": "#228be6",
"width": 0.29392358842710564,
"height": 66.5,
"seed": 59173285,
"groupIds": [],
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1658678208037,
"link": null,
"locked": false,
"startBinding": {
"elementId": "lATIKISgJPOGnUHleuFRH",
"focus": 0.015253485349599789,
"gap": 3.5
},
"endBinding": {
"elementId": "6B3J0wJfi561c9gMsgtXG",
"focus": -0.039966641220930875,
"gap": 1
},
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow",
"points": [
[
0,
0
],
[
-0.29392358842710564,
66.5
]
]
},
{
"type": "rectangle",
"version": 1246,
"versionNonce": 842910649,
"isDeleted": false,
"id": "5VuUdI_BsJ5pyE1nTqJUI",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1195,
"y": 221,
"strokeColor": "#7950f2",
"backgroundColor": "#7950f2",
"width": 290.0000000000001,
"height": 46,
"seed": 1044404613,
"groupIds": [],
"roundness": null,
"boundElements": [
{
"id": "bJJ9SGsJsvT071qBBH0w5",
"type": "text"
},
{
"id": "Q51e0Hav-kYfjX3b8tt-r",
"type": "arrow"
}
],
"updated": 1673789051585,
"link": null,
"locked": false
},
{
"type": "text",
"version": 1431,
"versionNonce": 1914742871,
"isDeleted": false,
"id": "bJJ9SGsJsvT071qBBH0w5",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1200,
"y": 226,
"strokeColor": "#000000",
"backgroundColor": "#fa5252",
"width": 280,
"height": 36,
"seed": 128953675,
"groupIds": [],
"roundness": null,
"boundElements": [],
"updated": 1673789051585,
"link": null,
"locked": false,
"fontSize": 28,
"fontFamily": 1,
"text": "Run similarity query",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "5VuUdI_BsJ5pyE1nTqJUI",
"originalText": "Run similarity query"
},
{
"type": "rectangle",
"version": 334,
"versionNonce": 7828646,
"isDeleted": false,
"id": "pSbgtf1qAB7tWl-pTld7e",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1197,
"y": 343,
"strokeColor": "#ff7043",
"backgroundColor": "#ff7043",
"width": 290.0000000000001,
"height": 46,
"seed": 210689733,
"groupIds": [],
"roundness": null,
"boundElements": [
{
"id": "pQzKSM3audka1kiQm_Sku",
"type": "text"
},
{
"id": "Q51e0Hav-kYfjX3b8tt-r",
"type": "arrow"
},
{
"id": "k67YzXNtt1GLh4i8Es5zJ",
"type": "arrow"
}
],
"updated": 1673791639562,
"link": null,
"locked": false
},
{
"type": "text",
"version": 293,
"versionNonce": 271822438,
"isDeleted": false,
"id": "pQzKSM3audka1kiQm_Sku",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1219.5,
"y": 348,
"strokeColor": "#000",
"backgroundColor": "#fa5252",
"width": 245,
"height": 36,
"seed": 1869028363,
"groupIds": [],
"roundness": null,
"boundElements": [],
"updated": 1673791644235,
"link": null,
"locked": false,
"fontSize": 28,
"fontFamily": 1,
"text": "Send notifications",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "pSbgtf1qAB7tWl-pTld7e",
"originalText": "Send notifications"
},
{
"type": "arrow",
"version": 310,
"versionNonce": 1574300026,
"isDeleted": false,
"id": "k67YzXNtt1GLh4i8Es5zJ",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1339.1171359117898,
"y": 265.5,
"strokeColor": "#000",
"backgroundColor": "#228be6",
"width": 1.0119492860442278,
"height": 76.5,
"seed": 1656816747,
"groupIds": [],
"roundness": {
"type": 2
},
"boundElements": [],
"updated": 1673791641098,
"link": null,
"locked": false,
"startBinding": null,
"endBinding": {
"elementId": "pSbgtf1qAB7tWl-pTld7e",
"focus": -0.010690950588675632,
"gap": 1
},
"lastCommittedPoint": null,
"startArrowhead": null,
"endArrowhead": "arrow",
"points": [
[
0,
0
],
[
1.0119492860442278,
76.5
]
]
},
{
"type": "text",
"version": 308,
"versionNonce": 641647912,
"isDeleted": false,
"id": "kKPPLMCj8QQIJLbW-B5hm",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 1180,
"y": 451,
"strokeColor": "#000",
"backgroundColor": "#fab005",
"width": 296,
"height": 52,
"seed": 1079990731,
"groupIds": [],
"roundness": null,
"boundElements": [],
"updated": 1658678121635,
"link": null,
"locked": false,
"fontSize": 20,
"fontFamily": 1,
"text": "- API bindings for JavaScript,\n Rust, Go and Java",
"baseline": 44,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "- API bindings for JavaScript,\n Rust, Go and Java"
},
{
"type": "text",
"version": 560,
"versionNonce": 1977188696,
"isDeleted": false,
"id": "1AQ3rj-V4weRtPA8a5-z-",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 437.5,
"y": 449.5,
"strokeColor": "#000",
"backgroundColor": "#fab005",
"width": 278,
"height": 52,
"seed": 836512075,
"groupIds": [],
"roundness": null,
"boundElements": [],
"updated": 1658678121635,
"link": null,
"locked": false,
"fontSize": 20,
"fontFamily": 1,
"text": "- Build with Python or YAML\n- Run local or via API",
"baseline": 44,
"textAlign": "left",
"verticalAlign": "top",
"containerId": null,
"originalText": "- Build with Python or YAML\n- Run local or via API"
},
{
"type": "rectangle",
"version": 292,
"versionNonce": 259776552,
"isDeleted": false,
"id": "B435ajoI5vAQBDvzkd8aY",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 426,
"y": 221,
"strokeColor": "#03a9f4",
"backgroundColor": "#03a9f4",
"width": 290.0000000000001,
"height": 46,
"seed": 942981672,
"groupIds": [],
"roundness": null,
"boundElements": [
{
"id": "AoGnxEHn4x-zq2-0C0VrT",
"type": "text"
},
{
"id": "Q51e0Hav-kYfjX3b8tt-r",
"type": "arrow"
},
{
"id": "tgnQzXC9s8RY4oImBOXuB",
"type": "arrow"
}
],
"updated": 1658678121635,
"link": null,
"locked": false
},
{
"type": "text",
"version": 171,
"versionNonce": 2093287976,
"isDeleted": false,
"id": "AoGnxEHn4x-zq2-0C0VrT",
"fillStyle": "hachure",
"strokeWidth": 1,
"strokeStyle": "solid",
"roughness": 1,
"opacity": 100,
"angle": 0,
"x": 431,
"y": 226,
"strokeColor": "#000000",
"backgroundColor": "#fa5252",
"width": 280,
"height": 36,
"seed": 604886104,
"groupIds": [],
"roundness": null,
"boundElements": [],
"updated": 1658678188284,
"link": null,
"locked": false,
"fontSize": 28,
"fontFamily": 1,
"text": "Summarize",
"baseline": 25,
"textAlign": "center",
"verticalAlign": "middle",
"containerId": "B435ajoI5vAQBDvzkd8aY",
"originalText": "Summarize"
}
],
"appState": {
"gridSize": null,
"viewBackgroundColor": "#3030"
},
"files": {}
}

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