🚩(project) add more backend AI feature flags
The Blocknote AI feature is a bit flaky, we want to be able to disable it if to much issues arise, without having to do a new release. We add a bunch of feature flags to be able to disable the AI features if needed: - add AI_FEATURE_BLOCKNOTE_ENABLED, to display or not the feature powered by blocknote - add AI_FEATURE_LEGACY_ENABLED, to display or not the legacy AI features
This commit is contained in:
@@ -1852,7 +1852,7 @@ class DocumentViewSet(
|
||||
# Check permissions first
|
||||
self.get_object()
|
||||
|
||||
if not settings.AI_FEATURE_ENABLED:
|
||||
if not settings.AI_FEATURE_ENABLED or not settings.AI_FEATURE_BLOCKNOTE_ENABLED:
|
||||
raise ValidationError("AI feature is not enabled.")
|
||||
|
||||
ai_service = AIService()
|
||||
@@ -2572,6 +2572,8 @@ class ConfigView(drf.views.APIView):
|
||||
array_settings = [
|
||||
"AI_BOT",
|
||||
"AI_FEATURE_ENABLED",
|
||||
"AI_FEATURE_BLOCKNOTE_ENABLED",
|
||||
"AI_FEATURE_LEGACY_ENABLED",
|
||||
"API_USERS_SEARCH_QUERY_MIN_LENGTH",
|
||||
"COLLABORATION_WS_URL",
|
||||
"COLLABORATION_WS_NOT_CONNECTED_READY_ONLY",
|
||||
|
||||
@@ -23,6 +23,8 @@ def ai_settings(settings):
|
||||
settings.AI_BASE_URL = "http://localhost-ai:12345/"
|
||||
settings.AI_API_KEY = "test-key"
|
||||
settings.AI_FEATURE_ENABLED = True
|
||||
settings.AI_FEATURE_BLOCKNOTE_ENABLED = True
|
||||
settings.AI_FEATURE_LEGACY_ENABLED = True
|
||||
settings.LANGFUSE_PUBLIC_KEY = None
|
||||
settings.AI_VERCEL_SDK_VERSION = 6
|
||||
|
||||
@@ -239,9 +241,12 @@ def test_api_documents_ai_proxy_success(mock_stream, via, role, mock_user_teams)
|
||||
mock_stream.assert_called_once()
|
||||
|
||||
|
||||
def test_api_documents_ai_proxy_ai_feature_disabled(settings):
|
||||
@pytest.mark.parametrize(
|
||||
"setting_to_disable", ["AI_FEATURE_ENABLED", "AI_FEATURE_BLOCKNOTE_ENABLED"]
|
||||
)
|
||||
def test_api_documents_ai_proxy_ai_feature_disabled(settings, setting_to_disable):
|
||||
"""When AI_FEATURE_ENABLED is False, the endpoint returns 400."""
|
||||
settings.AI_FEATURE_ENABLED = False
|
||||
setattr(settings, setting_to_disable, False)
|
||||
|
||||
user = factories.UserFactory()
|
||||
|
||||
|
||||
@@ -21,6 +21,8 @@ pytestmark = pytest.mark.django_db
|
||||
@override_settings(
|
||||
AI_BOT={"name": "Test Bot", "color": "#000000"},
|
||||
AI_FEATURE_ENABLED=False,
|
||||
AI_FEATURE_BLOCKNOTE_ENABLED=False,
|
||||
AI_FEATURE_LEGACY_ENABLED=False,
|
||||
API_USERS_SEARCH_QUERY_MIN_LENGTH=6,
|
||||
COLLABORATION_WS_URL="http://testcollab/",
|
||||
COLLABORATION_WS_NOT_CONNECTED_READY_ONLY=True,
|
||||
@@ -47,6 +49,8 @@ def test_api_config(is_authenticated):
|
||||
assert response.json() == {
|
||||
"AI_BOT": {"name": "Test Bot", "color": "#000000"},
|
||||
"AI_FEATURE_ENABLED": False,
|
||||
"AI_FEATURE_BLOCKNOTE_ENABLED": False,
|
||||
"AI_FEATURE_LEGACY_ENABLED": False,
|
||||
"API_USERS_SEARCH_QUERY_MIN_LENGTH": 6,
|
||||
"COLLABORATION_WS_URL": "http://testcollab/",
|
||||
"COLLABORATION_WS_NOT_CONNECTED_READY_ONLY": True,
|
||||
|
||||
@@ -29,6 +29,8 @@ def ai_settings(settings):
|
||||
settings.AI_BASE_URL = "http://example.com"
|
||||
settings.AI_API_KEY = "test-key"
|
||||
settings.AI_FEATURE_ENABLED = True
|
||||
settings.AI_FEATURE_BLOCKNOTE_ENABLED = True
|
||||
settings.AI_FEATURE_LEGACY_ENABLED = True
|
||||
settings.LANGFUSE_PUBLIC_KEY = None
|
||||
settings.AI_VERCEL_SDK_VERSION = 6
|
||||
|
||||
|
||||
@@ -710,9 +710,22 @@ class Base(Configuration):
|
||||
"hour": 100,
|
||||
"day": 500,
|
||||
}
|
||||
# Master settings to enable AI features, if you set it to False,
|
||||
# all AI features will be disabled even if the other settings are enabled.
|
||||
AI_FEATURE_ENABLED = values.BooleanValue(
|
||||
default=False, environ_name="AI_FEATURE_ENABLED", environ_prefix=None
|
||||
)
|
||||
# Far better UI but more flaky for the moment
|
||||
# ⚠️ AGPL license, be sure to comply with the Blocknote license
|
||||
# if you enable it (https://www.blocknotejs.org/)
|
||||
AI_FEATURE_BLOCKNOTE_ENABLED = values.BooleanValue(
|
||||
default=False, environ_name="AI_FEATURE_BLOCKNOTE_ENABLED", environ_prefix=None
|
||||
)
|
||||
# UI with less features but more stable
|
||||
# MIT friendly license, you can enable it without worrying about the license
|
||||
AI_FEATURE_LEGACY_ENABLED = values.BooleanValue(
|
||||
default=True, environ_name="AI_FEATURE_LEGACY_ENABLED", environ_prefix=None
|
||||
)
|
||||
AI_MODEL = values.Value(None, environ_name="AI_MODEL", environ_prefix=None)
|
||||
AI_VERCEL_SDK_VERSION = values.IntegerValue(
|
||||
6, environ_name="AI_VERCEL_SDK_VERSION", environ_prefix=None
|
||||
|
||||
Reference in New Issue
Block a user