From f2e89d9b2dbe9d3b426c23a6a0725729ca9234c5 Mon Sep 17 00:00:00 2001 From: davidmezzetti <561939+davidmezzetti@users.noreply.github.com> Date: Sun, 6 Aug 2023 18:59:18 -0400 Subject: [PATCH] Update documentation --- README.md | 8 +++----- docs/index.md | 8 +++----- logo.png | Bin 13461 -> 16973 bytes setup.py | 2 +- 4 files changed, 7 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 426ca389..a08da444 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,7 @@

-------------------------------------------------------------------------------------------------------------------------------------------------------- - -txtai is an all-in-one open-source embeddings database for semantic search, LLM orchestration and language model workflows. +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) @@ -40,14 +38,14 @@ Embeddings databases can stand on their own and/or serve as a powerful knowledge Summary of txtai features: -- 🔎 Vector search with SQL, object storage, topic modeling, graph analysis and multiple vector index backends (sparse, dense, hybrid, external) +- 🔎 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, summarizations 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). - ☁️ Cloud-native architecture that scales out with container orchestration systems (e.g. Kubernetes) -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 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. ## Why txtai? diff --git a/docs/index.md b/docs/index.md index c8b57364..efe04286 100644 --- a/docs/index.md +++ b/docs/index.md @@ -29,9 +29,7 @@

-------------------------------------------------------------------------------------------------------------------------------------------------------- - -txtai is an all-in-one open-source embeddings database for semantic search, LLM orchestration and language model workflows. +txtai is an all-in-one embeddings database for semantic search, LLM orchestration and language model workflows. ![architecture](images/architecture.png#gh-light-mode-only) ![architecture](images/architecture-dark.png#gh-dark-mode-only) @@ -42,11 +40,11 @@ Embeddings databases can stand on their own and/or serve as a powerful knowledge Summary of txtai features: -- 🔎 Vector search with SQL, object storage, topic modeling, graph analysis and multiple vector index backends (sparse, dense, hybrid, external) +- 🔎 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, summarizations 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). - ☁️ Cloud-native architecture that scales out with container orchestration systems (e.g. Kubernetes) -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 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. diff --git a/logo.png b/logo.png index 99d378881de5c928fb17e1c4df2722f8aa1e52b1..5495194d2a8d08a00dfbc04d2291c88d51111b8e 100644 GIT binary patch literal 16973 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 F{{U>7t-SyM literal 13461 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 diff --git a/setup.py b/setup.py index af906b71..33a9c682 100644 --- a/setup.py +++ b/setup.py @@ -92,7 +92,7 @@ setup( name="txtai", version="6.0.0", author="NeuML", - description="Semantic search and workflows powered by language models", + description="All-in-one open-source embeddings database for semantic search, LLM orchestration and language model workflows", long_description=DESCRIPTION, long_description_content_type="text/markdown", url="https://github.com/neuml/txtai",