Spaces:
Build error
Build error
import logging | |
import random | |
from core.app.entities.app_invoke_entities import ModelConfigWithCredentialsEntity | |
from core.model_runtime.errors.invoke import InvokeBadRequestError | |
from core.model_runtime.model_providers.openai.moderation.moderation import OpenAIModerationModel | |
from extensions.ext_hosting_provider import hosting_configuration | |
from models.provider import ProviderType | |
logger = logging.getLogger(__name__) | |
def check_moderation(model_config: ModelConfigWithCredentialsEntity, text: str) -> bool: | |
moderation_config = hosting_configuration.moderation_config | |
if ( | |
moderation_config | |
and moderation_config.enabled is True | |
and "openai" in hosting_configuration.provider_map | |
and hosting_configuration.provider_map["openai"].enabled is True | |
): | |
using_provider_type = model_config.provider_model_bundle.configuration.using_provider_type | |
provider_name = model_config.provider | |
if using_provider_type == ProviderType.SYSTEM and provider_name in moderation_config.providers: | |
hosting_openai_config = hosting_configuration.provider_map["openai"] | |
# 2000 text per chunk | |
length = 2000 | |
text_chunks = [text[i : i + length] for i in range(0, len(text), length)] | |
if len(text_chunks) == 0: | |
return True | |
text_chunk = random.choice(text_chunks) | |
try: | |
model_type_instance = OpenAIModerationModel() | |
moderation_result = model_type_instance.invoke( | |
model="text-moderation-stable", credentials=hosting_openai_config.credentials, text=text_chunk | |
) | |
if moderation_result is True: | |
return True | |
except Exception as ex: | |
logger.exception(ex) | |
raise InvokeBadRequestError("Rate limit exceeded, please try again later.") | |
return False | |