App: Context Chat

Context Chat is an :ref:`assistant<ai-app-assistant>` feature that is implemented via an ensemble of two apps:

Together they provide the ContextChat text processing and search tasks accessible via the :ref:`Nextcloud Assistant app<ai-app-assistant>`.

The context_chat and context_chat_backend apps will use the configured text-to-text task processing provider, which is required on a fresh install. It can be configured to run open source models entirely on-premises, see the list of providers :ref:`here <tp-consumer-apps>` in the "Backend apps" section.

This app supports input and output in the same languages that the currently configured text-to-text task processing provider supports.

Requirements

Space usage

This app employs a bundled DB with Vector support called PostgreSQL. All the users' textual data is duplicated, chunked and stored on disk in this vector DB along with semantic embedding vectors for the content.

Installation

  1. Make sure the :ref:`Nextcloud Assistant app<ai-app-assistant>` is installed

  2. Setup a :ref:`Deploy Daemon <ai-app_api>` in AppAPI Admin settings

  3. Install the context_chat_backend ExApp via the "Apps" page in Nextcloud, or by executing (checkout the readme at https://github.com/nextcloud/context_chat_backend for manual install steps)

occ app_api:app:register context_chat_backend
  1. Install the context_chat app via the "Apps" page in Nextcloud, or by executing

occ app:enable context_chat
  1. Install a text-to-text provider (text generation provider) via the "Apps" page in Nextcloud. A list of providers can be found :ref:`here <tp-consumer-apps>` in the "Backend apps" section.

  2. Optionally but recommended, setup background workers for faster pickup of tasks. See :ref:`the relevant section in AI Overview<ai-overview_improve-ai-task-pickup-speed>` for more information.

Initial loading of data

Auto-indexing

Context chat will automatically load user data into the Vector DB. Context chat backend pulls the queued files and content providers' items from the context chat PHP app and indexes them.
The initial loading of data can take a long time depending on the number of files and their size.

Scaling

Listed below are the major parts of the system that can be scaled independently to improve performance:

  1. The text-to-text task processing provider (from among the list of providers :ref:`here <tp-consumer-apps>` in the "Backend apps" section)

    The text-to-text task processing provider can be scaled by using a hosted service using the OpenAI and LocalAI integration (via OpenAI API) like OpenAI or by hosting your own model on powerful hardware.

  2. The vector DB performance

    The vector DB performance can be scaled by using a dedicated or cluster setup for PostgreSQL with the pgvector extension.
    The connection string of the external vector DB can be set using the environment variable EXTERNAL_DB during deployment in the "Deploy Options".
  3. The embedding model performance

    The embedding model performance can be scaled by using a hosted embedding service, locally or remotely hosted. It should be able to serve an OpenAI-compatible API.
    The embedding service URL can be set using the environment variable CC_EM_BASE_URL during deployment in the "Deploy Options". Other options like the model name, api key, or username and password can be set using the environment variables CC_EM_MODEL_NAME, CC_EM_APIKEY, CC_EM_USERNAME, and CC_EM_PASSWORD respectively.
  4. The parsing of the documents to extract text

    The parsing of the documents to extract text is done in a single instance of the context_chat_backend ExApp in a docker-based environment. It is a CPU-bound task, so having a powerful CPU will help speed up the parsing process.
    This can be scaled by using Kubernetes for deployment, allowing multiple instances of the context_chat_backend ExApp to handle the parsing concurrently, see :ref:`the Kubernetes section <kubernetes-context-chat>`.

If context_chat_backend is already deployed, you can change these environment variables by redeploying it with the new values.

  1. Go to Apps page -> search for "Context Chat Backend"

  2. Disable and remove the app taking care the data is not removed (except when the embedding model is changed, in which case the data should be removed)

  3. Set the "Deploy Options" with the new environment variables

  4. Reinstall the app

Kubernetes

Starting with version 5.4.0 of the app and Nextcloud 34, Kubernetes is supported for deployment of the backend to scale ContextChat to large instances. Nextcloud customers can find details about Kubernetes deployment in the customer documentation or by contacting support.

App store

You can also find the context_chat app in our app store, where you can write a review: https://apps.nextcloud.com/apps/context_chat

Repository

You can find the app's code repository on GitHub where you can report bugs and contribute fixes and features: https://github.com/nextcloud/context_chat and https://github.com/nextcloud/context_chat_backend

Nextcloud customers should file bugs directly with our Customer Support.

Commands (OCC)

The options for each command can be found like this, using stats as example: context_chat:stats --help

Configuration Options

occ config:app:set context_chat auto_indexing --value='true' --type=string

Context chat backend's configuration options are available through the environment variable in :ref:`Deploy Options <ai-app_api_deploy_options>`.

Logs

Logs for both the context_chat PHP app and the context_chat_backend ExApp can be found in the admin settings of your Nextcloud GUI as well as in the Context Chat log file, which is usually located in the Nextcloud data directory. The log file is named context_chat.log.

The internal PostgreSQL Vector DB logs (in case of non-Kubernetes setups) can be found inside the docker container at /nc_app_context_chat_backend_data/vector_db_data/pgsql/logfile. It can be copied to host using docker cp nc_app_context_chat_backend:/nc_app_context_chat_backend_data/vector_db_data/pgsql/logfile /tmp/vectordb-logfile.
This might be needed when the automated setting up of the vector db fails with something like: "pg_ctl: could not start server".

When running in Kubernetes, the logs for the backend will be in the respective pod's logs, which can be accessed using kubectl logs <pod_name> command.

Troubleshooting

  1. If the docker container seems to suddenly restart during indexing or querying, it could be related to RAM/storage filling up, or AVX being unavailable on the system. AVX can be checked using grep -i avx /proc/cpuinfo command on the host system. If AVX is not available, the app will not work.

  2. Look for issues in the diagnostic logs, the server logs and the docker container nc_app_context_chat_container logs. If unsure, open an issue in either of the repositories.

  3. Check "Admin settings -> Context Chat" for statistics and information about the indexing process.

File access control rules not supported

In Nextcloud you can set up file access control rules using the files_accesscontrol app to restrict access to certain files.

Context Chat does not follow these rules.

It is thus possible for users who have been denied access to a document via the files_accesscontrol app to still gain access via Context Chat if the document is visible in the files app for the user in question.

Known Limitations