Skip to main content

Query the text with keywords, vector similarity and other attributes.

Project description

QText

Python Check discord invitation link trackgit-views

QText is a microservices framework for building the RAG pipeline, or semantic search engine on top of Postgres. It provides a simple API to add, query, and highlight the text in your existing database.

The main features include:

  • Full-text search with Postgres GIN index.
  • Vector and sparse search with pgvecto.rs
  • Reranking with cross-encoder model, cohere reranking API, or other methods.
  • Semantic highlight

Besides this, qtext also provides a dashboard to visualize the vector search, sparse vector search, full text search, and reranking results.

asciicast

Design goals

  • Simple: easy to deploy and use.
  • Customizable: can be integrated into your existing databases.
  • Extensible: can be extended with new features.

How to use

To start all the services with docker compose:

docker compose -f docker/compose.yaml up -d server

Some of the dependent services can be opt-out:

  • emb: used to generate embedding for query and documents
  • sparse: used to generate sparse embedding for query and documents (this requires a HuggingFace token that signed the agreement for prithivida/Splade_PP_en_v1)
  • highlight: used to provide the semantic highlight feature
  • encoder: rerank with cross-encoder model, you can choose other methods or other online services
arch

For the client example, check:

API

We provide a simple sync/async client. You can also refer to the OpenAPI and build your own client.

  • /api/namespace POST: create a new namespace and configure the index
  • /api/doc POST: add a new doc
  • /api/query POST: query the docs
  • /api/highlight POST: semantic highlight
  • /metrics GET: open metrics

Check the OpenAPI documentation for more information (this requires the qtext service).

Terminal UI

We provide a simple terminal UI powered by Textual for you to interact with the service.

pip install textual
# need to run the qtext service first
python tui/main.py $QTEXT_PORT

Configurations

Check the config.py for more detail. It will read the $HOME/.config/qtext/config.json if this file exists.

Integrate to the RAG pipeline

This project has most of the components you need for the RAG except for the last LLM generation step. You can send the retrieval + reranked docs to any LLM providers to get the final result.

Customize the table schema

[!NOTE] If you already have the table in Postgres, you will be responsible for the text-indexing and vector-indexing part.

  1. Define a dataclass that includes the necessary columns as class attributes
    • annotate the primary_key, text_index, vector_index, sparse_index with metadata (not all of them are required, only the necessary ones)
    • attributes without default value or default factory is treated as required when you add new docs
  2. Implement the to_record and from_record methods to be used in the reranking stage
  3. Change the config.vector_store.schema to the class you have defined

Check the schema.py for more details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qtext-0.1.0.tar.gz (119.0 kB view details)

Uploaded Source

Built Distribution

qtext-0.1.0-py3-none-any.whl (24.8 kB view details)

Uploaded Python 3

File details

Details for the file qtext-0.1.0.tar.gz.

File metadata

  • Download URL: qtext-0.1.0.tar.gz
  • Upload date:
  • Size: 119.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for qtext-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b2e87979327ad91a3035ee96c62aaeb056032d049f4fbf97af08117d795e1f04
MD5 83f52aa6d0da084e12a95f3c35671780
BLAKE2b-256 8879d1c34a4967aae53b93ea408ecd3827b9b1673117c6718732d6cbba11580d

See more details on using hashes here.

File details

Details for the file qtext-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: qtext-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 24.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for qtext-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 15c4af36f510c62b1f6d7bea24ed2b5d7cb7b32337e939905e94bdb166a26b32
MD5 09dcd7aa0f19e54b2cb497a6f8d8d138
BLAKE2b-256 ae2e12ba6022488892d98f3566b047612c60f6ddf043cbd7f1306b9d6d23d820

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page