Source code for smarter.apps.vectorstore.models.vectorstore_interface

"""
Models for the vectorstore app.
"""

import logging

from django.db import models

from smarter.lib.django import waffle
from smarter.lib.django.models import TimestampedModel
from smarter.lib.django.waffle import SmarterWaffleSwitches
from smarter.lib.logging import WaffleSwitchedLoggerWrapper

from .vectorstore_meta import VectorestoreMeta


# pylint: disable=unused-argument
def should_log(level):
    """Check if logging should be done based on the waffle switch."""
    return waffle.switch_is_active(SmarterWaffleSwitches.VECTORSTORE_LOGGING)


base_logger = logging.getLogger(__name__)
logger = WaffleSwitchedLoggerWrapper(base_logger, should_log)


[docs] class VectorstoreInterface(TimestampedModel): """ Model representing the VectorstoreInterface configuration for a vector database. """ # pylint: disable=C0115 class Meta: verbose_name = "Vectorstore Interface" verbose_name_plural = "Vectorstore Interfaces" vectorestore_meta = models.OneToOneField( VectorestoreMeta, help_text="The associated VectorestoreMeta object for this VectorstoreInterface configuration.", on_delete=models.CASCADE, related_name="vectorstore_interface", ) text_key = models.CharField( help_text="The key in the vector database where the original text is stored, if applicable.", max_length=255, blank=True, null=True, ) namespace = models.CharField( help_text="The namespace to use for the vector database, if applicable.", max_length=255, blank=True, null=True, ) distance_strategy = models.CharField( help_text="The distance strategy to use for similarity search (e.g., cosine, euclidean, dot_product), if applicable.", max_length=50, blank=True, null=True, )