diff --git a/documentation/docs/miscellaneous/advanced.md b/documentation/docs/miscellaneous/advanced.md index 532ba7cd..63682d49 100644 --- a/documentation/docs/miscellaneous/advanced.md +++ b/documentation/docs/miscellaneous/advanced.md @@ -10,6 +10,8 @@ For example, the [paraphrase-multilingual-MiniLM-L12-v2](https://huggingface.co/ 1. Manually update the search config in server's admin settings page. Go to [the search config](http://localhost:42110/server/admin/database/searchmodelconfig/). Either create a new one, if none exists, or update the existing one. Set the bi_encoder to `sentence-transformers/multi-qa-MiniLM-L6-cos-v1` and the cross_encoder to `mixedbread-ai/mxbai-rerank-xsmall-v1`. 2. Regenerate your content index from all the relevant clients. This step is very important, as you'll need to re-encode all your content with the new model. +Note: If you use a search model that expects a prefix (e.g [mixedbread-ai/mxbai-embed-large-v1](https://huggingface.co/mixedbread-ai/mxbai-embed-large-v1)) to the query (or docs) string before encoding. Update the `bi_encoder_query_encode_config` field with `{prompt: }`. Eg. `{prompt: "Represent this query for searching documents"}`. You can pass a valid JSON object that the SentenceTransformer `encode` function accepts + ## Query Filters Use structured query syntax to filter entries from your knowledge based used by search results or chat responses. diff --git a/src/khoj/database/models/__init__.py b/src/khoj/database/models/__init__.py index a98b641e..ae13e980 100644 --- a/src/khoj/database/models/__init__.py +++ b/src/khoj/database/models/__init__.py @@ -179,16 +179,27 @@ class SearchModelConfig(BaseModel): class ModelType(models.TextChoices): TEXT = "text" + # This is the model name exposed to users on their settings page name = models.CharField(max_length=200, default="default") + # Type of content the model can generate embeddings for model_type = models.CharField(max_length=200, choices=ModelType.choices, default=ModelType.TEXT) + # Bi-encoder model of sentence-transformer type to load from HuggingFace bi_encoder = models.CharField(max_length=200, default="thenlper/gte-small") + # Config passed to the sentence-transformer model constructor. E.g device="cuda:0", trust_remote_server=True etc. bi_encoder_model_config = models.JSONField(default=dict) + # Query encode configs like prompt, precision, normalize_embeddings, etc. for sentence-transformer models bi_encoder_query_encode_config = models.JSONField(default=dict) + # Docs encode configs like prompt, precision, normalize_embeddings, etc. for sentence-transformer models bi_encoder_docs_encode_config = models.JSONField(default=dict) + # Cross-encoder model of sentence-transformer type to load from HuggingFace cross_encoder = models.CharField(max_length=200, default="mixedbread-ai/mxbai-rerank-xsmall-v1") + # Inference server API endpoint to use for embeddings inference. Bi-encoder model should be hosted on this server embeddings_inference_endpoint = models.CharField(max_length=200, default=None, null=True, blank=True) + # Inference server API Key to use for embeddings inference. Bi-encoder model should be hosted on this server embeddings_inference_endpoint_api_key = models.CharField(max_length=200, default=None, null=True, blank=True) + # Inference server API endpoint to use for embeddings inference. Cross-encoder model should be hosted on this server cross_encoder_inference_endpoint = models.CharField(max_length=200, default=None, null=True, blank=True) + # Inference server API Key to use for embeddings inference. Cross-encoder model should be hosted on this server cross_encoder_inference_endpoint_api_key = models.CharField(max_length=200, default=None, null=True, blank=True)